Django的发送邮件
django 中内置了许多方法可以使开发者方便的进行邮件发送,发送邮件还是很方便的,下面我们就来详细的介绍一下发送邮件的详细流程,简单易懂。
邮件的配置
发送邮件,首先需要在项目的 settings.py 文件下配置邮件服务器连接等信息,配置代码如下
EMAIL_USE_SSL = True # Secure Sockets Layer 安全套接层, 取决于邮件服务器是否开启加密协议
EMAIL_HOST = 'smtp.qq.com' # 邮件服务器地址
EMAIL_PORT = 465 # 邮件服务器端口
EMAIL_HOST_USER = '12345678@qq.com' # 登陆邮件服务器的账号
EMAIL_HOST_PASSWORD = 'xasdgdfhsdfnjk' # 登陆邮件服务器的密码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER # 邮件的发送者
注意: EMAIL_HOST_PASSWORD 所设置的登陆邮件服务器的密码为邮件客户端后台所设置的第三方客户端登陆密码,这个值并不是直接账号密码
开通QQ邮箱第三方客户端:登录QQ邮箱>账户>开启POP3/SMTP服务|IMAP/SMTP服务
发送文本邮件
发送普通邮件可以使用django.core.mail模块下的send_mail函数进行
send_mail(subject, message, from_email, recipient_list, fail_silently=False,
html_message=None)
将邮件发送至 recipient_list 中的每一个收件人处
subject :发送邮件标题
message :发送邮件正文
from_email :发件人邮箱地址
recipient_list :一个字符串列表,每一个数据为接收者的邮箱地址
html_message :如果指定该值,则发送的内容类型为 text/html 为一个 html 邮件内容
代码如下
from django.core.mail import send_mail
def email(request):
subject = '芦苇打代码'
message = '人生苦短,及时行乐'
send_mail(subject = subject,message = message,from_email = 'from@qq.com',
recipient_list = ['recv@qq.com','recv1@qq.com'])
return HttpResponse('邮件发送完成')
发送HTML邮件
发送 html 格式邮件还可以使用 django.core.mail 模块下的 EmailMultiAlternatives 类进行邮件体的构造,然后进行邮件发送
EmailMultiAlternatives(subject=’’, body=’’, from_email=None, to=None)
subject :邮件标题
body :邮件内容
from_email :邮件发送者
to :邮件接收人列表
EmailMultiAlternatives.attach_alternative(content, mimetype)
向 EmailMultiAlternatives 实例中添加 mimetype 支持的邮件内容
content :添加的邮件内容
mimetype :添加内容的 mime 类型
EmailMultiAlternatives.send() 发送邮件
from django.core.mail import EmailMultiAlternatives
def send_email(request):
subject = '芦苇打代码'
text_message = '一个专心打代码的芦苇'
html_message = '<a href="http://www.hahaha.com">熬夜打代码</a>'
email = EmailMultiAlternatives(subject = subject,body = text_message,from_email = '123456789@qq.com',
to = ['456789@qq.com'])
email.attach_alternative(html_message,'text/html') # 添加HTML部分
email.send() # 发送邮件
return HttpResponse('邮件发送完成')
发送富文本邮件
EmailMessage(subject=’’, body=’’, from_email=None, to=None)
`subject :邮件标题
body :邮件内容
from_email :邮件发送者
to :邮件接收人列表
代码如下
from sendmailpro.settings import STATICFILES_DIRS
import os
from email.mime.image import MIMEImage
from django.core.mail import EmailMessage
def send_email(request):
subject = '芦苇打代码'
file_1 = os.path.join(STATICFILES_DIRS[0],'img/1.png')
with open(file_1, 'rb') as fp:
# 打开第一张图片
img_1 = MIMEImage(fp.read())
file_2 = os.path.join(STATICFILES_DIRS[0],'img/2.png')
with open(file_2, 'rb') as fp:
# 打开第二张图片
img_2 = MIMEImage(fp.read())
body = "<img src='cid:first_id'><br><img src='cid:sec_id'>"
# 发送邮件主体内容
image_1.add_header('Content-ID','<%s>' % 'first_id')
# 通过 CID 对称图片在邮件内容中的位置
image_2.add_header('Content-ID','<%s>' % 'sec_id')
message = EmailMessage( # 构建发送的邮件主体
subject=subject,
body=body,
from_email='from@qq.com',
to=['recv@qq.com','recv1@qq.com'])
message.content_subtype = 'html'
message.attach(image_1) # 添加两张图片
message.attach(image_2)
message.send() # 发送邮件
return HttpResponse('邮件发送完成')
附件邮件
attach(filename=None, content=None, mimetype=None)
添加附件内容
filename :附件文件名称
content :附件内容
mimetype : 附件的 MIME 类型
attach_file(path, mimetype=None)
直接通过路径添加附件
path :附件路径
mimetype :附件的 MIME 类型
from sendmailpro.settings import STATICFILES_DIRS
import os
from email.mime.image import MIMEImage
from django.core.mail import EmailMessage
def send_email(request):
subject = '芦苇打代码'
email = EmailMessage(subject=subject,body='一个附件邮件',from_email='from@qq.com',
to=['recv@qq.com','recv1@qq.com'])
file_1 = os.path.join(STATICFILES_DIRS[0],'img/1.png')
image_1 = open(file_1,'rb').read()
email.attach('1.png',image_1,'image/png')
file_2 = os.path.join(STATICFILES_DIRS[0],'img/2.png')
email.attach_file(file_2,mimetype='image/png') # 使用attach_file实例函数添加附件路径
email.send()
return HttpResponse('邮件发送完成')
这就是四种发送邮件的方法,简单实用,希望可以帮助到大家,别忘了发送邮件之前一定要开通好邮箱的第三方端口,不然是发送不了的哦。
另外发送邮需要注意,如果是个人邮箱的话千万不能频繁的发送邮件,频繁发送有几率会被邮件的官方查到,容易封邮箱。这里只是告诉大家发送邮件方法,如果需要大规模的频繁发送邮件最好还是使用商业级的邮箱(专门发送邮件的邮箱,需要购买)