如何通过Django发送电子邮件?

Der*_*rek 145 python email django smtp

在我settings.py,我有以下内容:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

# Host for sending e-mail.
EMAIL_HOST = 'localhost'

# Port for sending e-mail.
EMAIL_PORT = 1025

# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False
Run Code Online (Sandbox Code Playgroud)

我的邮箱代码:

from django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['user@gmail.com'])
email.send()
Run Code Online (Sandbox Code Playgroud)

当然,如果我通过设置调试服务器python -m smtpd -n -c DebuggingServer localhost:1025,我可以看到终端中的电子邮件.

但是,我如何实际将电子邮件发送到调试服务器而不是user@gmail.com?

在阅读完答案后,让我直截了当:

  1. 你不能使用localhost(简单的ubuntu pc)发送电子邮件吗?

  2. 我认为django 1.3 send_mail()有点弃用,EmailMessage.send()而是用来代替?

Jor*_*dan 162

我使用Gmail作为Django的SMTP服务器.比处理postfix或其他任何服务器容易得多.我不是在管理电子邮件服务器.

在settings.py中:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'me@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
Run Code Online (Sandbox Code Playgroud)

注意:2016年,Gmail不再允许此操作.您可以使用Sendgrid等外部服务,也可以按照Google提供的本教程降低安全性,但允许使用此选项:https://support.google.com/accounts/answer/6010255

  • 把它放在一个环境变量中.然后,EMAIL_HOST_PASSWORD = os.environ ['MY_PASSWORD_THAT_YOU_CANT_KNOW'] (27认同)
  • 有没有办法将密码保留为明文? (8认同)
  • SMTPAuthenticationError,我收到一封电子邮件"**登录尝试被阻止......来自不符合现代安全标准**的应用程序".看起来像[这](http://i.stack.imgur.com/HdOwJ.png).解决方法"[打开安全性较低的应用的访问权限](https://support.google.com/accounts/answer/6010255)".那[工作](http://i.imgur.com/YoaUCSG.png). (8认同)

Ign*_*ams 52

将电子邮件发送到真正的SMTP服务器.如果您不想自己设置,那么您可以找到可以为您运行的公司,例如Google自己.

  • 哪篇文章?可以再链接一下吗? (4认同)
  • 真棒,我只是一封电子邮件!miku提到的上述文章是完美的.请注意文章评论中的小错字修正.(我只是使用我的常规计算机/ localhost.我手头没有设置任何其他东西.) (3认同)

Ale*_*lig 34

  1. 创建一个项目: django-admin.py startproject gmail
  2. 使用以下代码编辑settings.py:

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = 'youremail@gmail.com'
    EMAIL_HOST_PASSWORD = 'email_password'
    EMAIL_PORT = 587
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行交互模式: python manage.py shell

  4. 导入EmailMessage模块:

    from django.core.mail import EmailMessage
    
    Run Code Online (Sandbox Code Playgroud)
  5. 发送电子邮件:

    email = EmailMessage('Subject', 'Body', to=['your@email.com'])
    email.send()
    
    Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请检查send_mailEmailMessage在功能的文件.

Gmail更新

此外,如果您通过Gmail发送电子邮件时遇到问题,请记得从谷歌查看此指南.

在您的Google帐户设置中,转到 Security > Account permissions > Access for less secure apps并启用此选项.

为其启用两步验证后,还要为您的Gmail建立一个应用专用密码.

然后,您应该在设置中使用应用专用密码.因此,请更改以下行:

    EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'
Run Code Online (Sandbox Code Playgroud)

此外,如果您有兴趣发送HTML电子邮件,请查看此信息.

  • 我按照你的步骤,我无法发送,至电子邮件没有收到电子邮件/ (2认同)

小智 13

我的网站托管在Godaddy上,我在同一个网站上注册了私人电子邮件.这些设置对我有用:

在settings.py中:

EMAIL_HOST = 'mail.domain.com'
EMAIL_HOST_USER = 'abc@domain.com'
EMAIL_HOST_PASSWORD = 'abcdef'
DEFAULT_FROM_EMAIL = 'abc@domain.com'
SERVER_EMAIL = 'abc@domain.com'
EMAIL_PORT = 25
EMAIL_USE_TLS = False
Run Code Online (Sandbox Code Playgroud)

在shell中:

from django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['def@domain.com'])
email.send()
Run Code Online (Sandbox Code Playgroud)

然后我得到"1"作为O/P即成功.我也收到了邮件.:)


Cog*_*cis 13

对于Django 1.7版,如果以上解决方案不起作用,请尝试以下方法

settings.py中添加

#For email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

EMAIL_USE_TLS = True

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'sender@gmail.com'

#Must generate specific password for your app in [gmail settings][1]
EMAIL_HOST_PASSWORD = 'app_specific_password'

EMAIL_PORT = 587

#This did the trick
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
Run Code Online (Sandbox Code Playgroud)

最后一行为django 1.7做了诀窍


小智 10

您需要在settings.py中使用smtp作为后端

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Run Code Online (Sandbox Code Playgroud)

如果您使用后端作为控制台,您将在控制台中收到输出

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Run Code Online (Sandbox Code Playgroud)

另外还有以下设置

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'urusername@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
Run Code Online (Sandbox Code Playgroud)

如果您使用gmail,请设置两步验证特定应用程序的密码,并将该密码复制并粘贴到上面的EMAIL_HOST_PASSWORD值中.


ynd*_*lok 5

我发现使用 SendGrid 是使用 Django 设置发送电子邮件的最简单方法。这是它的工作原理:

  1. 创建一个 SendGrid 帐户(并验证您的电子邮件)
  2. 将以下内容添加到您的settings.py: EMAIL_HOST = 'smtp.sendgrid.net' EMAIL_HOST_USER = '<your sendgrid username>' EMAIL_HOST_PASSWORD = '<your sendgrid password>' EMAIL_PORT = 587 EMAIL_USE_TLS = True

你已经准备好了!

发送电子邮件:

from django.core.mail import send_mail
send_mail('<Your subject>', '<Your message>', 'from@example.com', ['to@example.com'])
Run Code Online (Sandbox Code Playgroud)

如果您希望 Django 在出现 500 内部服务器错误时向您发送电子邮件,请将以下内容添加到您的settings.py:

DEFAULT_FROM_EMAIL = 'your.email@example.com'
ADMINS = [('<Your name>', 'your.email@example.com')]
Run Code Online (Sandbox Code Playgroud)

使用 SendGrid 发送电子邮件每月最多可免费发送 12k 封电子邮件。