近半周,主要在研究odoo中的邮件发送的内容,修改重置密码和修改密码的邮件发送的相关功能。
主要发现了:
- odoo 简单配置邮件,利用bournce 模式
- odoo catchall 模式配置邮件 【待研究】
odoo bournce模式邮件配置:
odoo发送邮件的过程中碰到 no service or xxx
使用ping 来测试是否可以访问外网。在docker 里无法ping同域名,提示类似于 ping bad address 的问题,但是可以ping 通IP,这个需要后期研究一下为什么会这样。 【待研究】
是由可能是无法访问到外部网络,是由于DNS解析失败造成的,可以暂时先不管,重启一次docker就好了。
简单的方案:直接重启docker,再次ping 网址,发现可以。
继续配置odoo邮件:
- 配置好出向邮件,即为发件人,要求发件人开同通IMAP服务或POP服务。
- 配置入向服务器,收件箱,在这种模式下可以不用配置。
- 配置好公司邮件,在公司的参数里,设置好,这里设置为出向邮箱。
- 删掉bounce 设置。在设置-技术-系统参数中。虽然这里面也没有
不删掉,会报错,提示发件人和认证用户不是同一个人。
自己配置的公司的发件人A,而这里却不是A,是以bounce开头的用户,是为啥呢?
提示的错误:1
2
3
4
5邮件投递失败
通过SMTP发送邮件失败 'smtp.qq.com'.
SMTPSenderRefused: 501
mail from address must be same as authorization user
bounce+12-sale.order-6@odooqs.com
阅读源码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19@api.model
def _get_default_bounce_address(self):
'''Compute the default bounce address.
The default bounce address is used to set the envelop address if no
envelop address is provided in the message. It is formed by properly
joining the parameters "mail.bounce.alias" and
"mail.catchall.domain".
If "mail.bounce.alias" is not set it defaults to "postmaster-odoo".
If "mail.catchall.domain" is not set, return None.
'''
get_param = self.env['ir.config_parameter'].sudo().get_param
postmaster = get_param('mail.bounce.alias', default='postmaster-odoo')
domain = get_param('mail.catchall.domain')
if postmaster and domain:
return '%s@%s' % (postmaster, domain)
从以上可以得知 _get_default_bounce_address 发送邮件名来源于 mail.bounce.alias ,默认值是postmaster-odoo.
根据以上代码的值,不删除mail.bounce.alias的值,会导致发送地址错误,删除mail.bounce.alias的值,导致默认发送邮箱名是postmaster-odoo。也就是
catchall模式配置参数:
还没仔细研究
catchall 是可以看作一个中介的功能。
当一个联系人回复Odoo发送的邮件时,reply-to 地址是一个catchall地址,可将回复中继到Odoo(商机、订单、任务等)中正确的讨论话题,以及所有关注者的邮箱中。地址默认为”catchall@”,也可以更改。
在你的邮件服务器设置中创建一个catchall地址。我们建议您使用”catchall@”地址,可直接运行。如想使用其他别名,需要在Odoo中多设置一些步骤。