Django:通过Office365发送电子邮件

时间:2019-10-09 13:40:35

标签: django smtp office365

我所拥有的:

  • 在webs.com上购买的域(我将其称为contoso.com);
  • 连接到该域的Office 365帐户(我的电子邮件地址类似于john@contoso.com);
  • Azure中托管的Django应用程序;

我想要的:

我想配置Django,以便使用我的john@contoso.com地址发送电子邮件。

我所做的事情:

我尝试了以下Django配置:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.office365.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'john@contoso.com'
EMAIL_HOST_PASSWORD = 'xxxxxx'

但是没有用。因此,为了测试,我尝试了免费的Google SMTP服务器:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'john@gmail.com'
EMAIL_HOST_PASSWORD = 'yyyyyy'

这次可以使用,但是很明显,电子邮件是从john@gmail.com发送的,而不是从john@contoso.com发送的。

以前的配置有什么问题?还是我需要在Office 365帐户中进行一些更改?


更新

到目前为止,我已经尝试通过设置Django的ADMINS变量来接收电子邮件:

ADMINS = [('Admin Name', 'admin@gmail.com')]

然后我使用日志记录对象发送电子邮件:

logging.error("Hello admin!!")

如上所述,这仅在我使用smtp.gmail.com时有效。今天,我尝试使用send_mail函数:

send_mail(
    'Subject here',
    'Here is the message.',
    'john@gmail.com',
    ['mail@gmail.com'],
    fail_silently=False,
)

并且它同时使用smtp.gmail.comsmtp.office365.com配置。不幸的是,这对我来说不是一个有效的解决方案,因为如果发生错误或异常,我需要通知管理员。那么,为什么send_mail函数可以与smtp.office365.com一起使用而ADMIN设置却不能呢?

3 个答案:

答案 0 :(得分:1)

它不是Django,但只需确认SMTP中继正在使用PowerShell运行即可。确保“发件人”地址与用于身份验证的帐户相同。也可以尝试使用SSL来查看。

https://i.imgur.com/bS04QMh.png

https://i.imgur.com/sERhkKg.png

答案 1 :(得分:0)

要使用Office365 smtp服务器发送电子邮件,“发件​​人”用户和“主机”用户必须相同。所以我在Django中添加了此设置,以便向管理员发送电子邮件:

SERVER_EMAIL = EMAIL_HOST_USER

答案 2 :(得分:0)

尝试了几天后,唯一对我有用的是:

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER