如何通过Django发送邮件?
在我的 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
我的邮件代码:
from django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['user@gmail.com'])
email.send()
当然,如果我通过 python -m smtpd -n -c DebuggingServer localhost:1025
设置一个调试服务器,我可以在终端看到邮件。
但是,我到底该怎么把邮件发送到 user@gmail.com 而不是调试服务器呢?
在看了你们的回答后,我想澄清几点:
难道不能用 localhost(简单的 Ubuntu 电脑)来发送邮件吗?
我以为在 Django 1.3 中,
send_mail()
已经有点过时了,应该用EmailMessage.send()
来代替?
13 个回答
- 创建一个项目:
django-admin.py startproject gmail
用下面的代码编辑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
运行交互模式:
python manage.py shell
导入EmailMessage模块:
from django.core.mail import EmailMessage
发送邮件:
email = EmailMessage('Subject', 'Body', to=['your@email.com']) email.send()
想了解更多信息,可以查看send_mail
和EmailMessage
在文档中的介绍。
关于Gmail的更新
如果你在通过Gmail发送邮件时遇到问题,记得查看这篇指南。
在你的Google账户设置中,去 安全性 > 账户权限 > 对不太安全的应用的访问
,并启用这个选项。
另外,在你开启了两步验证后,为你的Gmail创建一个应用专用密码。
然后你应该在设置中使用这个应用专用密码。所以要修改以下这一行:
EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'
如果你对发送HTML邮件感兴趣,可以看看这个。
我在Django中使用Gmail作为我的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'
注意:从2016年开始,Gmail默认不再允许这样做。你可以选择使用像Sendgrid这样的外部服务,或者按照谷歌的这个教程来降低安全性,但允许这种选项:https://support.google.com/accounts/answer/6010255
把邮件发送到一个真正的SMTP服务器。如果你不想自己搭建一个服务器,可以找一些公司来帮你运行,比如谷歌就提供这样的服务。