如何通过 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?

读完你的答案后,让我把话说清楚:

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

  2. 我认为在 django 1.3中 send_mail()有些不受欢迎,而是使用 EmailMessage.send()

220358 次浏览

将电子邮件发送到真正的 SMTP 服务器。如果你不想建立自己的公司,那么你可以找到愿意为你运营的公司,比如谷歌自己。

事实上,我以前就在姜戈这么做过。打开一个合法的 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

我使用 Gmail 作为 Django 的 SMTP 服务器。比处理后缀或其他服务器要容易得多。我的工作不是管理电子邮件服务器。

在设置中. 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 这样的外部服务,或者你可以按照谷歌的教程来降低安全性,但是允许这个选项: < a href = “ https://Support.Google.com/account/answer/6010255”rel = “ norefrer”> https://support.Google.com/accounts/answer/6010255

您需要在 setings.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 值之上。

  1. 创建一个项目: django-admin.py startproject gmail
  2. 使用以下代码编辑 setings.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
    
  3. Run interactive mode: python manage.py shell

  4. Import the EmailMessage module:

    from django.core.mail import EmailMessage
    
  5. Send the email:

    email = EmailMessage('Subject', 'Body', to=['your@email.com'])
    email.send()
    

For more informations, check send_mail and EmailMessage features in documents.

UPDATE for Gmail

Also if you have problems sending email via gmail remember to check this guides from google.

In your Google account settings, go to Security > Account permissions > Access for less secure apps and enable this option.

Also create an App specific password for your gmail after you've turned on 2-step-verification for it.

Then you should use app specific password in settings. So change the following line:

    EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'

此外,如果你有兴趣发送 HTML 电子邮件,看看这个

我的网站是托管在 Godaddy和我有一个私人电子邮件注册在同一个。 这些设置对我有效:

在设置中. 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,如果上述解决方案不工作,然后尝试以下方法

设置中加入

#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的任务

迟到了,但是:

除了其他人提到的 DEFAULT_FROM_EMAIL修复程序,还有允许不太安全的应用程序访问帐户,我必须导航到 https://accounts.google.com/DisplayUnlockCaptcha,同时作为有问题的帐户登录,让 Django 最终进行身份验证。

我通过 SSH 隧道访问到网络服务器的 URL,以确保 IP 地址是相同的; 我不完全确定是否有必要,但这不会有什么坏处。你可以这样做: ssh -D 8080 -fN <username>@<host>,然后设置你的网页浏览器使用 localhost:8080作为 SOCKS 代理。

我发现使用 SendGrid 是用 Django 设置发送电子邮件最简单的方法:

  1. 创建一个 SendGrid 帐户 (并验证您的电子邮件)
  2. 在你的 settings.py中加入以下内容: 电子邮件/主机/ 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 发送电子邮件每月最多可以免费发送12000封电子邮件。

您可以使用 “测试邮件服务器工具”来测试在您的计算机或本地主机上发送电子邮件。谷歌和下载“测试邮件服务器工具”,并设置它。

然后在你的设置中:

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)

对于 SendGrid-Django具体如下:

发送姜戈文档

设置这些变量

设置

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'sendgrid_username'
EMAIL_HOST_PASSWORD = 'sendgrid_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

在视野里

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’

电邮 _ USE _ tLS = True 电邮 _ HOST = ‘ mail.xxxxxxx.xxx’

EMAIL _ PORT = 465

EMAIL _ HOST _ USER = ‘ support@xxxxx.xxx’

EMAIL _ HOST _ PASSWORD = ‘ xxxxxxx’

在 setings.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 设置被忽略了。确保打开不太安全的应用程序访问。您还可以检查过程 给你

然后在视图中发送电子邮件 Mail import send _ mail

def send(request):
send_mail(
‘Email Subject here’,
‘Email content’,
settings.EMAIL_HOST_USER,
[‘emailto@gmail.com’],
fail_silently=False)