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