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