odoo10中的邮件提醒
odoo10中邮件提醒配置如下:
1.配置出向邮件服务器
打开开发者模式,设置–>技术–>email–>出向邮件服务器
设置如下:
如果配置成功,点击’测试连接‘,会出现如下弹出框:
2.设置公司邮箱为刚才配置的邮件地址
设置–>用户–>公司,修改公司邮箱地址
3.模型中使用
1 from odoo import models, fields, api, tools 2 3 4 class InvoiceBill(models.Model): 5 """ 6 7 """ 8 _name = \'esw.invoice.bill\' 9 _inherit = [\'mail.alias.mixin\', \'mail.thread\', \'ir.needaction_mixin\'] 10 _description = u\'邮件学习测试\' 11 _order = \'create_date desc\' 12 13 def _get_domain_of_invoice_manager(self): 14 manager = self.env[\'ir.model.data\'].xmlid_to_object(\'mail_test.esw_invoice_bill_manager_group\')[0] 15 return [(\'id\', \'in\', manager.users.ids)] 16 17 name = fields.Char(u\'单据说明\') 18 invoice_manager = fields.Many2one(\'res.users\', u\'仓库主管\', domain=_get_domain_of_invoice_manager) 19 remark = fields.Text(u\'备注\') 20 alias_id = fields.Many2one(\'mail.alias\', string=\'别名\', ondelete="restrict", required=True) 21 22 state = fields.Selection( 23 [ 24 (\'init\', u\'初始化\'), 25 (\'revert\', u\'撤回\'), 26 (\'submit\', u\'已提交\'), 27 (\'delivered\', u\'已发货\'), 28 (\'completed\', u\'完成\'), 29 ], 30 default=\'init\', 31 track_visibility=\'onchange\', 32 required=True, 33 ) 34 35 @api.multi 36 def _track_template(self, tracking): 37 """ 38 前提:不配置域别名[mail.catchall.domain] 39 此处将该参数[no_auto_thread]设置为True,可以使replay_to参数的邮件值为预期值,否则会是模板中配置的${xx.xx} 40 这样可以达到正常发送提醒邮件,且发送邮件中的发送人/接收人/reply_to 达到预期的值; 41 收件人回复后也能也能收取,会显示为消息,也就是mail.message,并且不会跟原来的邮件做关联 42 43 如果设置域别名[mail.catchall.domain] 44 虽然参数[no_auto_thread]不设置,邮件中replay_to参数也会是预期值,但是邮件发送失败,走了odoo中自带的email_from规则(odoo10参见mail_mail.py line-248), 45 如下: 46 bounce_alias = self.env[\'ir.config_parameter\'].get_param("mail.bounce.alias") 47 catchall_domain = self.env[\'ir.config_parameter\'].get_param("mail.catchall.domain") 48 if bounce_alias and catchall_domain: 49 if mail.model and mail.res_id: 50 headers[\'Return-Path\'] = \'%s+%d-%s-%d@%s\' % (bounce_alias, mail.id, mail.model, mail.res_id, catchall_domain) 51 else: 52 headers[\'Return-Path\'] = \'%s+%d@%s\' % (bounce_alias, mail.id, catchall_domain) 53 对于设置了域别名[mail.catchall.domain]的情况一直没有尝试成功 54 :param tracking: 55 :return: 56 """ 57 res = super(InvoiceBill, self)._track_template(tracking) 58 59 template = self.env.ref(\'mail_test.esw_mail_test_template\') 60 61 res[\'template_id\'] = (template, { 62 \'composition_mode\': \'mass_mail\', 63 \'no_auto_thread\': True, 64 }) 65 return res
说明:
对于邮件接收的,配置起来比较麻烦,到现在整个流程没有走通,就不说了,如果仅仅是针对邮件提醒的话,上面是没有问题的。
关于邮件接收:
1.需要配置收件邮件服务器;
2.需要配置参数,设置–>技术–>参数–>系统参数,设置如下:
mail.bounce.alias是你发送邮箱@前面的字符串,mail.catchall.alias是接收别名,不用接收不需要配置;
还有个系统收取邮件需要配置的 [域别名]–mail.catchall.domain
3.如果需要跟mail.message关联,好像还需要配置 别名 (我现在就是邮件发出去,当对方回复的时候,系统中关联不起来,不会以邮件的形式存在,而是消息)
接收到消息后,在设置–>技术–>email–>消息中可以查看,
4.收取邮件地址的别名,设置–>技术–>email–>别名,然后需要在模型中重写mail.thread的message_new方法
设计到的模型,mail模块下mail.thread, mail.mail, mail.message, 邮件服务器模型base/ir/ir_mail_server.py