如何使用office365和Django发送邮件?

时间:2019-06-01 00:00:14

标签: django office365 digital-ocean

我在ubuntu 16.04 DigitalOcean中使用django send_mail从Office 365(Godaddy)发送邮件时遇到一个问题。

这是我的实际配置:

EMAIL_HOST = 'smtp.office365.com'
EMAIL_HOST_USER = "myuser"
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_USE_TLS = True
EMAIL_PORT = 587

发送邮件:

context = {}
subject = 'Verificación de registro con 1 clic'
txt_ = get_template("registration/emails/verify.txt").render(context)
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = [somemail@somemail.com]
html_ = get_template("registration/emails/verify.html").render(context)
sent_mail = send_mail(
    subject,
    txt_,
    from_email,
    recipient_list,
    html_message=html_,
    fail_silently=False,
)

这是引发的错误:

raise SMTPSenderRefused(code, resp, from_addr)
smtplib.SMTPSenderRefused: (530, b'5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM []', '=?utf-8?q?myuser?= <myemail@myemail.com>')

1 个答案:

答案 0 :(得分:0)

那是由于几个原因。其中更常见的是您的允许安全性较低的应用程序功能已关闭。

https://support.google.com/accounts/answer/6010255对您可能非常有用。

  

Google说»

     

如果您的帐户关闭了“缺乏安全的应用程序访问权限”,则可以turn it back on。我们建议改用more secure apps

这意味着,您只需直接访问https://myaccount.google.com/lesssecureapps并打开即可。

您还可以访问https://myaccount.google.com/security和Ctrl + F / Command + F»Less secure app access,在下面可以看到类似下面的图像。

enter image description here


我该如何解决?

就我而言,集成 django-db-mailer 时遇到错误。

SMTPSenderRefused: (530, b'5.5.1 Authentication Required. Learn more at\n5.5.1  https://support.google.com/mail/?p=WantAuthError z25sm26247003pfn.7 - gsmtp', 'rishikesh0011115067@gmail.com')

我通过更改EMAIL_USER-> EMAIL_HOST_USER设置变量来修复它。

现在,我遇到的下一个错误与您完全一样。

SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials m123sm26024478pfb.133 - gsmtp')

我访问了https://myaccount.google.com/lesssecureapps,发现我的帐户已关闭允许安全程度较低的应用功能。只需切换按钮的状态并运行代码即可。

最终成功。希望对您有所帮助。您还可以检查自己是否在https://devanswers.co/allow-less-secure-apps-access-gmail-account/上挣扎。已经有很多天了,但是我仍然想通过指着你来回答(即使您已经解决了)。