如何使用 BCC 向 Odoo 8 中的某些收件人发送邮件?

How to send a mail with BCC to some recipients in Odoo 8?

我已经创建了一个模块来向特定用户发送密件抄送。为此,我只继承了一些模型并修改了几行:

型号email.template

我已经添加了下一个字段:

email_bcc = fields.Char(string='Bcc',
                        help='Blind carbon copy message recipients')

并且我修改了以下方法:

generate_email_batch,修改如下行:

fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to']

并把它变成下一个:

fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'email_bcc', 'reply_to']

generate_recipients_batch,修改如下行:

mails = tools.email_split(values.pop('email_to', '')) + tools.email_split(values.pop('email_cc', ''))

并把它变成下一个:

mails = tools.email_split(values.pop('email_to', '')) + tools.email_split(values.pop('email_cc', '')) + tools.email_split(values.pop('email_bcc', ''))

型号mail.mail

我还添加了一个字段:

email_bcc = fields.Char(string='Bcc',
                        help='Blind carbon copy message recipients')

并修改了方法send,修改这一行:

msg = ir_mail_server.build_email(
    email_from=mail.email_from,
    email_to=email.get('email_to'),
    subject=email.get('subject'),
    body=email.get('body'),
    body_alternative=email.get('body_alternative'),
    email_cc=tools.email_split(mail.email_cc),
    reply_to=mail.reply_to,
    attachments=attachments,
    message_id=mail.message_id,
    references=mail.references,
    object_id=mail.res_id and ('%s-%s' % (mail.res_id, mail.model)),
    subtype='html',
    subtype_alternative='plain',
    headers=headers
)

并把它变成下一个:

msg = ir_mail_server.build_email(
    email_from=mail.email_from,
    email_to=email.get('email_to'),
    subject=email.get('subject'),
    body=email.get('body'),
    body_alternative=email.get('body_alternative'),
    email_cc=tools.email_split(mail.email_cc),
    email_bcc=tools.email_split(mail.email_bcc),
    reply_to=mail.reply_to,
    attachments=attachments,
    message_id=mail.message_id,
    references=mail.references,
    object_id=mail.res_id and ('%s-%s' % (mail.res_id, mail.model)),
    subtype='html',
    subtype_alternative='plain',
    headers=headers
)

在这两个模型中,我完全覆盖了方法(我无法找到使用 super 修改它们的方法)。

问题

我创建了一个电子邮件模板来检查 email_bcc,我从代码中调用了 email.template 的方法 send_mail:

mails_sent &= et_pool.send_mail(
    self.env.cr, 1, template.id,
    user.id, force_send=True, context=ctx
)

首先,发送邮件时,我在日志中收到此错误:

openerp.addons.email_template.email_template:无法使用值呈现模板 {'format_tz':在 0x7f170051a8c0>,'ctx':{'lang':'es_ES', 'tz': 'Europe/Madrid', 'search_default_my_sale_orders_filter': 1, 'params': {'action': 318}, 'uid': 1}, 'user': res.users(1,), 'object': res.users(2,)}

但是,邮件发送正常。但是总会有一些令人惊讶的事情发生,我举个例子让你更好地理解:

我的外发邮件服务器配置为从地址 sender@gmail.com 发送邮件。电子邮件模板在 email_to 字段中包含地址 to@gmail.com,地址 bcc@gmail.comemail_bcc 字段中。

发送完邮件后,如果我登录Google账户to@gmail.com,我会进入收件箱,我可以看到电子邮件,但我可以看到 sender@gmail.com 发送了电子邮件,它是发送给我的,and密件抄送至 bcc@gmail.com!

这怎么可能?看来我的模块运行良好,并在 BCC 中将电子邮件发送到 bcc@gmail.com,但为什么 to@gmail.com 所有者可以看到那个事实???

有人可以帮助我吗?

如果有人有兴趣查看模块,请看这里:

https://github.com/forvas/social/tree/8.0

它的名字是mail_bcc.

我最近遇到了同样的问题,我不认为这是模块的错误,而是 Google 的 SMTP 服务器(我假设你配置了一个是因为 @gmail.com 地址)。当我从GMail切换到我们公司的邮件服务器时,BCC字段处理得当,所以邮件发给了BCC收件人,但是TO和CC里的人看不到。