【odoo14】【好书学习】第⼆⼗三章、管理邮件
☞
邮件集成是odoo最重要的特性。我们可以通过odoo收发邮件。我们甚⾄可以管理业务⽂档上的电⼦邮件,如潜在客户、销售订单和项⽬。本章,我们将探讨在odoo 中处理邮件的⽅式。
配置邮件服务器
管理⽂档中的chatter
管理⽂档中的活动
希腊字母读音表
通过Jinja模板发送邮件
通过QWeb模板发送邮件
管理邮件别名
记录在聊天中⽤户改变的内容
定期发送摘要邮件
配置邮件服务器
在收发邮件前,我们需要配置邮件服务器。
准备
本节,并不需要进⾏代码开发,我们需要邮件服务器的相关信息。⽐如,服务器url,端⼝,服务器类型,⽤户名,密码。
⼩贴⼠
如果你使⽤Odoo Online或者Odoo.sh,你⽆需配置邮件服务器。
步骤
配置传⼊和传出的电⼦邮件服务器涉及到传⼊和传出服务器流程中常见的⼏个步骤,以及每种服务器特有的⼏个步骤。因此,⾸先我们将看到常见的配置步骤,然后我们将分别配置传⼊和传出的电⼦邮件服务器。以下是输⼊和输出邮件服务器都需要的步骤:
1. 在Settins|General Settins的form视图下打开General Settins
2. 在Discuss区域打开External Email Servers,如下:
3. 在Alias Domain字段,输⼊我们的邮件服务器domain名。
配置收邮件服务器
1. 打开General Settings,点击Incoming Email Servers链接,将打开收邮件服务器的列表视图
。
2. 点击新建,将打开form视图。输⼊相关内容如下:
3. 点击Test & Confirm验证配置。
配置发邮件服务器
1. 打开General Settings,使能External Email Servers,点击Outgoing Email Servers链接。
2. 点击新建,将打开form视图。输⼊服务器细节如下:
3. 点击Test Connection验证配置。
原理
The steps given in this recipe are lf-explanatory and do not require further explanation.But the outoging and incoming email records have veral fields, so let`s e their purpo.
Here is a list of the fields ud to configure the incoming eamil rver:
Name:服务器的名称,在我们添加了多个收邮件服务器的时候,标识不同的服务器。
mycServer Type: 根据我们的邮件服务器选择POP、IMAP、Local中的⼀个。
Server Name: 服务器的domain。
Port: 邮件服务器的端⼝。
SSL/TLS: 如果邮件服务器使⽤SSL/TLS加密,则选择该项。
Urname: 邮箱地址。
日剧蜂蜜与四叶草Password: 邮件密码。
最好的学习方法
Active 标识是否启⽤邮件服务器。
Keep Attachment: 如果你不想管理附件可关闭该项。
Keep Original: 如果你想保留原始邮件,可启动该项。
如下是配置发送邮件服务器:
Description: 服务器的描述,⽤于区分不同的服务器。
Priority: ⽤于定义发送邮件服务器的优先级。数字越低,优先级越⾼。
SMTP Server: 服务器的domain。
SMTP Port: 服务器的端⼝。
Connection Security: 在发送邮件时使⽤的安全类型。
Urname: 发送邮件的账户。
Password: 发送邮件的密码。
Active: 启停发送邮件服务器。
更多
默认邮件服务器每5分钟更新⼀次。你可以修改该配置:
1. 激活开发者模式。
2. 在Settings | Technical | Automation | Scheduled | Actions,打开 Scheduled Actions。
3. 搜索名为Mail:Fetchmail的动作。
tremendously
4. 改变间隔(Execute Every)。
管理⽂档中的chatter
本节,我们将了解如何在⽂档中管理沟通记录。
准备
本节,我们使⽤my_library模块,我们新增模型。
步骤
roomate
1. 在__manifest__.py中添加mail模型
.
..
采莲曲翻译'depends': ['ba', 'mail'],
...
2. 在模型中继承mail.thread
class LibraryBookRent(models.Model):
_name = ''
_inherit = ['mail.thread']
...
3. 在模型的form视图添加chatter⼩部件
</sheet>
万圣节 英文
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_
followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
4. 更新模块,显⽰如下:
原理
为了确保模型中的chatter可⽤,我们需要安装mail模块。
与chatter相关的字段及⽅法定义在mail.thread模型中。mail.thread模型是虚拟类仅⽤作继承。步骤2,我们继承了mail.thread模型,可以为模型添加必要的字段及⽅法。
在前两个步骤中,我们添加了chatter所需的所有字段和⽅法。步骤3,我们添加了message thread及follower widget。其中message_follower_ids及message_ids字段⾃定义mail.thread中。
更多
当我们在chatter中发送了消息,odoo将会⾃动给followers发送邮件。在我们本节的例⼦中,借阅⼈并不是图书记录的follower,因此他们并不会受到消息。如果需要给他们发邮件提醒,我们需要将他们添加到借阅列表中。我们可以通过 message_subscribe() 函数实现⾃动添加。如下:
@del
def create(lf, vals):
res = super(LibraryBookRent, lf).create(vals)
return res
同样,我们可以通过 message_unsubscribe() 移除follower。
管理⽂档中的活动
当使⽤chatter时,还可以添加活动。类似于代做列表清单的东西。本节,我们将学习如何激活活动。
准备
步骤
为模型添加活动:
1. 在模型中添加继承mail.activity.mixin。
class LibraryBookRent(models.Model):
_name = ''
_inherit = ['mail.thread', 'mail.activity.mixin']
...
2. 在模型中添加mail_activity⼩部件
<div class="oe_chatter">
题目类型
<field name="message_follower_ids" widget="mail_
followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
3. 更新模块,显⽰如下:
原理
活动是mail模块中的⼀部分,我们可通过继承mail.activity.mixin实现在chatter中选择性的启⽤该功能。与mail.thread模型类似,mail.activity.mixin也是抽象模型。步骤1,我们在中继承了mail.activity.mixin,因此获得了管理活动所必须的⽅法及字段。
步骤2,我们添加了mail_activity⼩部件,⽤于展⽰活动的相关内容,通过继承,我们在模型中添加了activity_ids字段。
活动有不同的类型。默认我们可以创建诸如Email、Call、Meeting和To-Do。我们可以在Settings | Technical | Email | Activity Types添加新的活动类型。
更多
如果你想实现⾃动关联活动,我们可以通过mail.activity.mixin模型中的activity_schedule()⽅法实现。如下:
@del
def create(lf, vals):
res = super(LibraryBookRent, lf).create(vals)
urn_date:
res.activity_schedule('mail.mail_activity_data_call', date_urn_date)
return res
如上例⼦可以在图书被借⽤的时候可⾃动实现添加⼀个提醒活动。可以在借阅截⽌⽇期的时候,管理员提醒下借阅⼈。
通过Jinja模板发送邮件
odoo⽀持通过Jinja模板创建动态邮件。Jinja是基于⽂本的模板引擎,⽤于解析HTML内容。本节,我们将创建Jinja邮件模板并发送邮件。male
准备
步骤
1. 创建my_library/data/l⽂件如下:
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="book_return_reminder" model="mail. template">
<field name="name">Book Return Reminder</field>
<field name="email_from">${object.ate_ ail}</field>
<field name="email_to">${object.borrower_ id.email}</field>
<field name="subject">Reminder for book return</field>
<field name="model_id" ref="del_ library_book_rent"/>
<field name="body_html">
<![CDATA[
<p>Dear ${object.borrower_id.name},</p> <p>You had rented the
<b>${object.book_id.name}</b> book on ${format__date)}
<br/>
The due date of book is <b >${format_urn_date)}.</b>
</p> <br/>
<p>Best regards,
<br/> Librarian</p>
]]>
</field>
</record>
2. 注册⽂件
'data':[
...
'data/l'
]
3. 在模型的form视图添加Send reminder按钮
<header>
<button name="book_return" string="Return the Book" states="ongoing" type="object"/>