在我的 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 pc)来发送电子邮件吗?我认为在 django 1.3 中 send_mail() 有点被弃用,而使用 EmailMessage.send() 代替?
我使用 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'
注意:在 2016 年,Gmail 默认不再允许这样做。您可以使用诸如 Sendgrid 之类的外部服务,也可以按照 Google 的本教程来降低安全性,但允许使用此选项:https://support.google.com/accounts/answer/6010255
将电子邮件发送到真正的 SMTP 服务器。如果您不想建立自己的,那么您可以找到可以为您运行的公司,例如 Google 自己。
创建一个项目: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()
有关详细信息,请查看 documents 中的 send_mail
和 EmailMessage
功能。
Gmail 更新
此外,如果您在通过 gmail 发送电子邮件时遇到问题,请记得检查 Google 的 this guides。
在您的 Google 帐户设置中,转到 Security > Account permissions > Access for less secure apps
并启用此选项。
在您为它turned on 2-step-verification之后也create an App specific password for your gmail。
然后你应该在设置中使用应用程序特定的密码。所以更改以下行:
EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'
此外,如果您有兴趣发送 HTML 电子邮件,check this out。
我的网站托管在 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
在外壳中:
from django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['def@domain.com'])
email.send()
然后我得到“1”作为 O/P 即成功。我也收到了邮件。 :)
domain.com 的含义是什么?
对于 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
最后一行为 django 1.7 做了诀窍
您需要在 settings.py 中使用 smtp 作为后端
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
如果您使用后端作为控制台,您将在控制台中收到输出
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
此外还有以下设置
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'urusername@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
如果您为此使用 gmail,请设置两步验证和应用程序特定密码,然后将该密码复制并粘贴到上述 EMAIL_HOST_PASSWORD 值中。
我发现使用 SendGrid 是使用 Django 设置发送电子邮件的最简单方法。以下是它的工作原理:
创建一个 SendGrid 帐户(并验证您的电子邮件)将以下内容添加到您的 settings.py: EMAIL_HOST = 'smtp.sendgrid.net' EMAIL_HOST_USER = '<您的 sendgrid 用户名>' EMAIL_HOST_PASSWORD = '<您的 sendgrid 密码>' EMAIL_PORT = 587 EMAIL_USE_TLS = 真
你都准备好了!
要发送电子邮件:
from django.core.mail import send_mail
send_mail('<Your subject>', '<Your message>', 'from@example.com', ['to@example.com'])
如果您希望 Django 在出现 500 内部服务器错误时向您发送电子邮件,请将以下内容添加到您的 settings.py
:
DEFAULT_FROM_EMAIL = 'your.email@example.com'
ADMINS = [('<Your name>', 'your.email@example.com')]
使用 SendGrid 发送电子邮件每月最多可免费发送 12k 封电子邮件。
我实际上是在不久前从 Django 完成的。打开一个合法的 GMail 帐户并在此处输入凭据。这是我的代码 -
from email import Encoders
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
def sendmail(to, subject, text, attach=[], mtype='html'):
ok = True
gmail_user = settings.EMAIL_HOST_USER
gmail_pwd = settings.EMAIL_HOST_PASSWORD
msg = MIMEMultipart('alternative')
msg['From'] = gmail_user
msg['To'] = to
msg['Cc'] = 'you@gmail.com'
msg['Subject'] = subject
msg.attach(MIMEText(text, mtype))
for a in attach:
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(a))
msg.attach(part)
try:
mailServer = smtplib.SMTP("smtp.gmail.com", 687)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmail_user, gmail_pwd)
mailServer.sendmail(gmail_user, [to,msg['Cc']], msg.as_string())
mailServer.close()
except:
ok = False
return ok
smtplib
; Django 将为您处理这部分。
send_mail
function &用我自己的...
send_mail()
是您的做法。您仍然需要自己组装消息,但您不必担心 SMTP 位。
您可以使用“测试邮件服务器工具”来测试您的机器或本地主机上的电子邮件发送。谷歌并下载“测试邮件服务器工具”并进行设置。
然后在你的 settings.py 中:
EMAIL_BACKEND= 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
从外壳:
from django.core.mail import send_mail
send_mail('subject','message','sender email',['receipient email'], fail_silently=False)
迟到了,但是:
除了其他人提到的 DEFAULT_FROM_EMAIL
修复,和允许安全性较低的应用访问该帐户,我必须导航到 https://accounts.google.com/DisplayUnlockCaptcha,同时以有问题的帐户登录,让 Django 访问最后进行身份验证。
我通过通往 Web 服务器的 SSH 隧道访问该 URL,以确保 IP 地址相同;我不完全确定这是否有必要,但它不会受到伤害。您可以这样做:ssh -D 8080 -fN <username>@<host>
,然后将您的网络浏览器设置为使用 localhost:8080
作为 SOCKS 代理。
对于 SendGrid - Django 具体来说:
将这些变量设置在
设置.py
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'sendgrid_username'
EMAIL_HOST_PASSWORD = 'sendgrid_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
在views.py中
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False)
以下甲酸盐为我工作
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = True EMAIL_HOST = 'mail.xxxxxxx.xxx' EMAIL_PORT = 465 EMAIL_HOST_USER = 'support@xxxxx.xxx' EMAIL_HOST_PASSWORD = 'xxxxxxx'
在 settings.py 中配置电子邮件如下
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'user@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
在大多数情况下,Gmail 设置都会被遗漏。确保打开不太安全的应用程序访问。您还可以检查程序 here
然后从 django.core.mail import send_mail 在视图中发送电子邮件
def send(request):
send_mail(
‘Email Subject here’,
‘Email content’,
settings.EMAIL_HOST_USER,
[‘emailto@gmail.com’],
fail_silently=False)