自强学堂
自强学堂:学习、分享、让你更强!
Django 教程HTMLCSSJAVASCRIPTJQUERYSQLPHPBOOTSTRAPANGULARXML
 

Django 发送邮件

我们常常会用到一些发送邮件的功能,比如有人提交了应聘的表单,可以向HR的邮箱发邮件,这样,HR不看网站就可以知道有人在网站上提交了应聘信息。

1. 配置相关参数

如果用的是 阿里云的企业邮箱,则类似于下面:

在 settings.py 的最后面加上类似这些

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
 
EMAIL_USE_TLS = False
EMAIL_HOST = 'smtp.tuweizhong.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'mail@tuweizhong.com'
EMAIL_HOST_PASSWORD = 'xxxx'
DEFAULT_FROM_EMAIL = 'mail@tuweizhong.com'

或者

EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com'  # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = 'xxx@qq.com' # 帐号
EMAIL_HOST_PASSWORD = 'p@ssw0rd'  # 密码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True。

DEFAULT_FROM_EMAIL 还可以写成这样:

DEFAULT_FROM_EMAIL = 'tuweizhong <tuweizhong@163.com>'

这样别人收到的邮件中就会有你设定的名称,如下图:

django_sendemail.png

下面是一些常用的邮箱:

163 邮箱    126 邮箱    QQ 邮箱 

其它邮箱参数可能登陆邮箱看寻找帮助信息,也可以尝试在搜索引擎中搜索:"SMTP 邮箱名称",比如:"163 SMTP" 进行查找。

2. 发送邮件:

2.1 官网的一个例子:

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)

2.2 一次性发送多个邮件:

from django.core.mail import send_mass_mail


message1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])


send_mass_mail((message1, message2), fail_silently=False)

备注:send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。


2.3 如果我们想在邮件中添加附件,发送 html 格式的内容

from django.conf import settings
from django.core.mail import EmailMultiAlternatives


from_email = settings.DEFAULT_FROM_EMAIL
# subject 主题 content 内容 to_addr 是一个列表,发送给哪些人
msg = EmailMultiAlternatives(subject, content, from_email, [to_addr])

msg.content_subtype = "html"

# 添加附件(可选)
msg.attach_file('./twz.pdf')

# 发送
msg.send()

上面的做法可能有一些风险,除非你确信你的接收者都可以阅读 html 格式的 邮件。


为安全起见,你可以弄两个版本,一个纯文本(text/plain)的为默认的,另外再提供一个 html 版本的(好像好多国外发的邮件都是纯文本的)

from __future__ import unicode_literals

from django.conf import settings
from django.core.mail import EmailMultiAlternatives

subject = '来自自强学堂的问候'

text_content = '这是一封重要的邮件.'

html_content = '<p>这是一封<strong>重要的</strong>邮件.</p>'

msg = EmailMultiAlternatives(subject, text_content, from_email, [to@youemail.com])

msg.attach_alternative(html_content, "text/html")

msg.send()


自强学堂 源代码下载:https://github.com/twz915/zqxt
服务承诺:2017年03月11日到12日出现了网站不可访问,不少同学发来了邮件关心,感谢大家对自强堂Django教程的支持与厚爱。自强学堂不会关闭,我向大家承诺,我依然会坚持每天答疑,看邮件回复邮件,服务器费用已经缴纳三年,后期会努力提高服务稳定性。我也还至少会再坚持做三年,直到2020年03月12日,我愿意坚持做这件事,是因为我认为这很有意义,2015年劳动节开始写这个教程的时候,我没有想到如今,每天会有5000人来自强学堂看Django教程,我希望能帮助到更多的人。—— 2017年03月12日于北京深夜 涂伟忠