在我的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()
代替?
答案 0 :(得分:158)
我使用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
答案 1 :(得分:49)
将电子邮件发送到真正的SMTP服务器。如果您不想自己设置,那么您可以找到可以为您运行的公司,例如Google自己。
答案 2 :(得分:26)
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
和documents功能。
Gmail更新
如果您在通过Gmail发送电子邮件时遇到问题,请记得从谷歌检查this guides。
在您的Google帐户设置中,转到Security > Account permissions > Access for less secure apps
并启用此选项。
create an App specific password for your gmail之后再turned on 2-step-verification。
然后您应该在设置中使用应用专用密码。因此,请更改以下行:
EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'
如果您有兴趣发送HTML电子邮件,check this out。
答案 3 :(得分: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
最后一行为django 1.7做了诀窍
答案 4 :(得分:12)
我的网站托管在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
在shell中:
from django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['def@domain.com'])
email.send()
然后我得到了" 1"作为O / P即成功。我也收到了邮件。 :)
答案 5 :(得分:10)
您需要在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中值。
答案 6 :(得分:4)
我发现使用SendGrid是设置使用Django发送电子邮件的最简单方法。以下是它的工作原理:
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'])
如果您希望Django在出现500内部服务器错误时向您发送电子邮件,请将以下内容添加到settings.py
:
DEFAULT_FROM_EMAIL = 'your.email@example.com'
ADMINS = [('<Your name>', 'your.email@example.com')]
使用SendGrid发送电子邮件每月最多可免费发送12k封电子邮件。
答案 7 :(得分:3)
我实际上曾经从Django那里做过这件事。打开一个合法的GMail帐户&amp;在此处输入凭据。这是我的代码 -
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
答案 8 :(得分:2)
迟到了,但是:
除了其他人提到的DEFAULT_FROM_EMAIL
修正,和允许安全性较低的应用访问该帐户,我必须在登录时导航至https://accounts.google.com/DisplayUnlockCaptcha有问题的帐户让Django最终验证。
我通过SSH隧道访问该网址,以确保IP地址相同;我不完全确定是否有必要,但它不会受到伤害。您可以这样做:ssh -D 8080 -fN <username>@<host>
,然后将您的Web浏览器设置为使用localhost:8080
作为SOCKS代理。
答案 9 :(得分:2)
您可以使用&#34;测试邮件服务器工具&#34; 来测试您的计算机或localhost上的电子邮件发送。谷歌和下载&#34;测试邮件服务器工具&#34;并设置它。
然后在你的settings.py中:
EMAIL_BACKEND= 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
来自shell:
from django.core.mail import send_mail
send_mail('subject','message','sender email',['receipient email'], fail_silently=False)
答案 10 :(得分:1)
对于 SendGrid - Django 具体来说:
在
中设置这些变量<强> settings.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)
答案 11 :(得分:1)
您可以使用 Gmail 服务接收邮件。
<块引用>在 Django 中使用 Gmail 作为电子邮件服务(免费)的步骤:
1:为您的联系人创建一个虚拟 Google 帐户。 2:在settings.py底部添加如下代码。
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = "yourdummy@gmail.com"
EMAIL_HOST_PASSWORD = "dummypassword"
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
3: 现在在 views.py 添加:
from django.core.mail import EmailMessage
# now in your function add this code
messageContent = yourcontent
msg = EmailMessage(heading, messageContent, settings.EMAIL_HOST_USER,[list of senders email])
msg.send()
4:首先为虚拟 Gmail 帐户启用这些功能:
a:转到 https://myaccount.google.com/lesssecureapps 并启用它。 注意:首先检查您是否以虚拟帐户身份登录启用此功能。 b: 现在转到 https://accounts.google.com/DisplayUnlockCaptcha 并点击继续。
5:您已准备好为您的联系页面使用 Gmail 电子邮件服务。
<块引用>奖励:
如果您想在 Django 中使用 HTML 模板发送邮件,请在 views.py 中使用此代码。
from django.template.loader import get_template
from django.core.mail import EmailMessage
# add this code in function:
ctx = {
'subject': subjectin,
'userMsg': messagein,
}
heading = Your heading
messageContent = get_template('yourTemplate.html').render(ctx) #sending value on HTML page through context
msg = EmailMessage(heading, messageContent, settings.EMAIL_HOST_USER,
[list of emails ])
msg.content_subtype = 'html'
msg.send()
答案 12 :(得分:0)
以下格式为我工作
<块引用>EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = 真 EMAIL_HOST = 'mail.xxxxxxx.xxx'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'support@xxxxx.xxx'
EMAIL_HOST_PASSWORD = 'xxxxxxx'