Python的邮件发送
实现邮件发送功能,则需要smtplib和email两个模块。
smtplib模块主要和smtp邮件服务器进行交互,如登录、退出、发送邮件等。
email模块主要封装邮件消息,如普通邮件、HTML邮件、图片邮件或附件邮件等。
一、smtplib模块
Python中主要通过smtplib模块实现邮件的发送,通过它可以连接smtp邮件服务器。
1.1 导包
import smtplib
1.2 创建smtp对象
创建smtp有两种方式,即安全性和非安全性。类似于HTTP和HTTPs两种协议。
1.2.1 普通方式
smtp = smtplib.SMTP("smtp.aliyun.com", 25) # 创建非安全的smtp对象,普通方式
1.2.2 安全方式
smtp = smtplib.SMTP_SSL("smtp.aliyun.com",465) # 创建安全的smtp对象,依赖smtp服务器的安全配置
1.3 Debug模式
在smtp进行不同操作时,可以开启debug模式,显示与服务器交互的报文信息:
# 设置debug级别,如果为True或1表示开启debug模式
smtp.set_debuglevel(True)
1.4 登录操作
smtp在发送邮件之间,必须先登录。
# 登录邮件服务器, username是账号,pwd是口令,在部分SMTP服务器是授权码。
smtp.login(username,pwd)
1.5 发送邮件
# 发送邮件
# from是发送邮件的email
# to是接收人的email,可以是多个,使用()或[]
# message 是邮件的内容,需要email模块的相关MIME类封装
smtp.sendmail(from,to, message)
1.6 退出登录
邮件发送成功后,可以登录服务器登录。
smtp.quit()
二、email模块
2.1 普通邮件
2.1.1 导包
from email.mime.text import MIMEText
from email.header import Header
2.1.2 封装文本邮件
# 发送文本信息
message = MIMEText("您申请的Python学习资源已发送,请查收,谢谢!","plain","utf-8")
message["From"] = Header("Disen教育服务中心","utf-8")
message["To"] = Header("VIP用户","utf-8")
message["Subject"] = Header("申请Python学习资源","utf-8")
2.1.3 发送邮件
smtp.sendmail(sender,["610039018@qq.com"], message.as_string())
2.2 HTML邮件
2.2.1 封装邮件
html_msg = '''
<p>Python邮件发送测试...</p>
<p><a href="http://www.qfedu.com">千锋教育</a></p>
'''
message = MIMEText(html_msg,"html","utf-8")
message["From"] = Header("千锋教育","utf-8")
message["To"] = Header("VIP高级客户","utf-8")
message["Subject"] = Header("助力学习", "utf-8")
2.2.2 发送邮件
smtp.sendmail(sender,receivers,message.as_string())
2.3 图片邮件
2.3.1 导包
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
2.3.2 封装邮件
msgRoot = MIMEMultipart("related") # related 表示内嵌资源的邮件体
msgRoot["From"] = Header("Disen","utf-8")
msgRoot["To"] = Header("VIP用户","utf-8")
msgRoot["Subject"] = Header("年度最优学生奖","utf-8")
msgAlternative = MIMEMultipart("alternative") # alternative选择性邮件体
msgRoot.attach(msgAlternative)
mail_msg = """
<p style="font-size:20pt">Disen教育平台</p>
<p>恭喜您,成为2018年度最佳优秀学员奖<p>
<p>详情请点击 <a href="www.codingke.com"> 查看</a><p>
<p>如图所示:<p>
<p> <img src="cid:image1"> </p>
"""
msgAlternative.attach(MIMEText(mail_msg,"html","utf-8"))
imgFile = open("mm6.jpg","rb")
msgImage = MIMEImage(imgFile.read()) # 创建图片邮件体
imgFile.close()
# 定义图片的Content-ID, 此ID在 html中引入了
msgImage.add_header("Content-ID","<image1>")
msgRoot.attach(msgImage)
2.3.3 发送邮件
smtp.sendmail(sender,receivers, msgRoot.as_string())
2.4 附件邮件
2.4.1 封装邮件
# 创建带附件的实例
message = MIMEMultipart()
message["From"] = Header("Disen","utf-8")
message["To"] = Header("VIP用户","utf-8")
message["Subject"] = Header("在线学习卡", "utf-8")
# 邮件正文
message.attach(MIMEText("您好,您申请的5000元的学习卡已通过快递的方式发送了,感谢您的使用,祝早日学有所成!", "plain", "utf-8"))
# 构造附件(Attachment)1
att1 = MIMEText(open("send_mail.py","rb").read(),"base64","utf-8")
att1["Content-Type"] = "application/octet-stream" # 设置附件1的数据类型为八位字节流
# 设置附件的文件名信息
att1["Content-Disposition"] = "attachment;filename='send_mail.py'"
message.attach(att1)from email.mime.multipart import MIMEMultipart
2.4.2 发送邮件
smtp.sendmail(sender,receivers,message.as_string())