如何通过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设置debugging服务器,我可以在terminal上看到电子邮件。

但是,我怎样才能真正发送电子邮件到debugging服务器,而不是user@gmail.com?

看完你的答案后,让我直截了当地说:

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

  2. 我想在Django的1.3 send_mail()是有点不赞同和EmailMessage.send()被用来代替?

发送电子邮件到一个真正的SMTP服务器。 如果你不想build立你自己的公司,那么你可以find一些公司为你自己,比如Google自己。

我使用Gmail作为我的SMTP服务器用于Django。 比处理后缀或其他任何服务器更容易。 我不是在pipe理电子邮件服务器的业务。

在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默认情况下不再允许使用此function。 您可以使用像Sendgrid这样的外部服务,也可以按照Google的这个教程来降低安全性,但是允许使用以下选项: https : //support.google.com/accounts/answer/6010255

  1. 创build一个项目: django-admin.py startproject gmail
  2. 用下面的代码编辑settings.py:

     EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'youremail@gmail.com' EMAIL_HOST_PASSWORD = 'yourpassword' EMAIL_PORT = 587 
  3. 运行交互模式: python manage.py shell

  4. 导入EmailMessage模块:

     from django.core.mail import EmailMessage 
  5. 发送电子邮件:

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

对于Django版本1.7,如果上述解决scheme不工作,请尝试以下操作

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做了诀窍

我的网站托pipe在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即成功。 我也收到了邮件。 🙂

您需要在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 ,请设置两步validation特定应用程序的密码 ,然后将该密码复制并粘贴到上面的EMAIL_HOST_PASSWORD值中。

我实际上是从Django做起的。 打开一个合法的GMail帐户并在这里input凭据。 这是我的代码 –

 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 

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

  1. 创build一个SendGrid帐户 (并validation您的电子邮件)
  2. 将以下内容添加到您的settings.pyEMAIL_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封电子邮件。

晚了,但是:

除了其他人提到的DEFAULT_FROM_EMAIL修复程序, 以及允许安全性较低的应用程序访问该帐户之外,我必须导航到https://accounts.google.com/DisplayUnlockCaptchalogin时才能使用Djangoauthentication。;

我通过一个SSH隧道到达了这个URL,以确保IP地址是一样的; 我不完全确定这是否有必要,但不能伤害。 你可以这样做: ssh -D 8080 -fN <username>@<host> ,然后设置你的web浏览器使用localhost:8080作为SOCKS代理。

您可以使用“testing邮件服务器工具”来testing您的机器或本地主机上的电子邮件发送。 Google和下载“testing邮件服务器工具”并进行设置。

然后在你的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)