0

我可以毫无问题地发送电子邮件并设置大多数标题。

但这已经给了我很长一段时间以来的奇怪结果。

这是我目前所在的位置:

email = EmailMessage(
    'My foobar subject!!',
    render_to_string(
        'emails/new_foobar_email.txt',
        {
            'foo': foo.something,
            'bar': bar.something,
        }
    ),
    'notify@foobar.com',
    [the_user.email, ],
    headers={'From ': 'Darth Vader <darth@vader.com>'},
)
email.send(
    fail_silently=False
)

当电子邮件到达时,它说它来自“notify@foobar.com”而不是“Darth Vader”。

我试过这样设置标题:

# this way worked but was inconsistent. Some email clients showed it was from "unknown sender".
headers={'From ': 'Darth Vader'},

我已经仔细研究了这份关于Internet 消息格式 (RFC 2822)的文档,但我不清楚我是否遵循了最佳实践。

我也看到了这个SO Question,但它适用于 send_mail() 函数。它可能是相似的,但它不同的。

我不关心我的电子邮件客户端是否正确显示(它可能会受到污染,因为我一直在尝试很多不同的方式,并且可能缓存了我做错的方式之一......)但我关心的是遵循最佳实践因此它适用于大多数电子邮件客户端。

问题

使用 EmailMessage 类在电子邮件中设置“发件人”标头的正确方法是什么?而且,与电子邮件客户端最兼容的方式是什么?

4

2 回答 2

1

您可以将详细信息直接放在from参数中:

email = EmailMessage(
    'My foobar subject!!',
    body,
    'Darth Vader <notify@foobar.com>',
    [the_user.email])
于 2014-09-30T17:26:26.463 回答
0
email = EmailMessage(
    'My foobar subject!!',
    render_to_string(
        'emails/new_foobar_email.txt',
        {
            'foo': foo.something,
            'bar': bar.something,
        }
    ),
    'darth@vader.com',
    [the_user.email, ],
    headers={'From': 'Darth Vader <darth@vader.com>'},
)
email.send(
    fail_silently=False
)

我做错的关键是在“From”之后有一个尾随空格。所以这会起作用。

然而。我将简化代码并按照@Daniel Roseman 的建议进行操作,并将显示名称放在 from 参数中,而不使用 headers 关键字。

于 2014-09-30T17:31:30.637 回答