如何通过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?
看完你的答案后,让我直截了当地说:
-
你不能使用localhost(简单的ubuntu pc)发送电子邮件?
-
我想在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
- 创build一个项目:
django-admin.py startproject gmail
-
用下面的代码编辑settings.py:
EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'youremail@gmail.com' EMAIL_HOST_PASSWORD = 'yourpassword' EMAIL_PORT = 587
-
运行交互模式:
python manage.py shell
-
导入EmailMessage模块:
from django.core.mail import EmailMessage
-
发送电子邮件:
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设置发送电子邮件的最简单的方法。 这是如何工作的:
- 创build一个SendGrid帐户 (并validation您的电子邮件)
- 将以下内容添加到您的
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封电子邮件。
晚了,但是:
除了其他人提到的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)