使用Django发送邮件
Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、QQ,下面以163邮件为例。
(1) 选择免费服务器,开启收发邮件功能。
foxmail邮箱具体方法请参考:http://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac25c12dcb3d46222b6
outlook邮箱具体方法请参考: http://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac27535b97f102eda26
(2) 在Django配置文件中,设置邮箱的配置信息
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.163.com' # 如果是qq邮箱请更换为'smtp.qq.com' # EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True。 EMAIL_USE_SSL = True EMAIL_PORT = 25 #发送邮件的邮箱 EMAIL_HOST_USER = 'hahaha@163.com' #在邮箱中设置的客户端授权密码 EMAIL_HOST_PASSWORD = '我是客户端授权码' #收件人看到的发件人 EMAIL_FROM = '夕颜<xiyan@163.com>'
(3) 使用Django提供的模块发送邮件
1、在django.core.mail
模块提供了send_mail
来发送邮件。
send_mail
(subject, message, from_email, recipient_list,html_message=None)
- subject 邮件标题
- message 普通邮件正文, 普通字符串
- from_email 发件人
- recipient_list 收件人列表
- html_message 多媒体邮件正文,可以是html字符串
from django.conf import settings from django.core.mail import send_mail def send_verify_email(to_email, verify_url): """ 发送验证邮箱邮件 :param to_email: 收件人地址 :param verify_url:验证链接 :return:None """ subject = "夕颜邮箱验证" html_message = '<p>尊敬的用户您好!</p>' \ '<p>感谢您使用夕颜微博。</p>' \ '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \ '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url) send_mail(subject, "", "xiyan@163.com", [to_email], html_message=html_message)
2、在django.core.mail
模块提供了send_mass_mail来一次性发送多个邮件。
from django.core.mail import send_mass_mail def send_verify_email(to_email, verify_url): """ 发送验证邮箱邮件 :param to_email: 收件人地址 :param verify_url:验证链接 :return:None """ message1 = ('Subject here', 'Here is the message', 'from@example.com', ["to_email"]) message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second_to_email']) send_mass_mail((message1, message2), fail_silently=False) # 注:send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
3、在邮件中添加附件,发送 html 格式的内容或者纯文本(text/plain)
from __future__ import unicode_literals from django.conf import settings from django.core.mail import EmailMultiAlternatives def send_verify_email(to_email, verify_url): """ 发送验证邮箱邮件 :param to_email: 收件人地址 :param verify_url:验证链接 :return:None """ subject = "夕颜邮箱验证" text_content = '这是一封重要的邮件.' html_message = '<p>尊敬的用户您好!</p>' \ '<p>感谢您使用夕颜微博。</p>' \ '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \ '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url) msg = EmailMultiAlternatives(subject, text_content, from_email, [to_email]) msg.attach_alternative(html_message, "text/html") msg.send()
如果想通过异步任务实现Django发送邮件,可参考博客:https://www.cnblogs.com/caijunchao/p/13081564.html