一:SMTP介绍
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件
二:发送邮件实列
在这里我们使用企业邮箱263发送邮件,由于找不到设置smtp服务的密码,然后向客服询问,263企业邮箱默认smtp服务是开启的,密码就是对应发送邮箱账号的密码;
[Python]
纯文本查看
复制代码
1 2 3 4 | # 发信服务器smtp_server = 'smtp.263.net'# 服务器端口--加密port = 465 |
纯文本邮件:
[Python]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | import smtplib # smtp服务器from email.mime.text import MIMEText # 邮件文本# 邮件构建sender = "*******@itcast.cn" # 发送方password = "*****" # smtp服务密码subject = "滴滴答答" # 邮件标题content = "新年快乐!" # 文本内容recver = "*******@itcast.cn" # 接收方# content 发送内容 "plain"文本格式 utf-8 编码格式message = MIMEText(content, "plain", "utf-8")message['Subject'] = subject # 邮件标题message['To'] = recver # 收件人message['From'] = sender # 发件人smtp = smtplib.SMTP_SSL("smtp.263.com", 465) # 实例化smtp服务器smtp.login(sender, password) # 发件人登录smtp.sendmail(sender, [recver], message.as_string()) # as_string 对 message 的消息进行了封装smtp.close() |
发送带附件的邮件:
[Python]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import smtplib # smtplib 用于邮件的发信动作from email.mime.text import MIMEText # email 用于构建邮件内容from email.header import Header # Header 用来构建邮件头from email.mime.multipart import MIMEMultipart # 用于实例化附件(处理多种形态的邮件主体我们需要 MIMEMultipart 类)# 邮件构建sender = "*******@itcast.cn" # 发送方password = "*****" # smtp服务密码subject = "滴滴答答" # 邮件标题content = "新年快乐!" # 文本内容recver = "*******@itcast.cn" # 接收方# content 发送内容 "plain"文本格式 utf-8 编码格式message = MIMEText(content, "plain", "utf-8")message['Subject'] = subject # 邮件标题message['To'] = recver # 收件人message['From'] = sender # 发件人# 构造文件附件1attr1 = MIMEText(open(files, 'rb').read(), 'base64', 'utf-8')attr1["content_Type"] = 'application/octet-stream'# attr1["Content-Disposition"] = "attachment; filename=Header({}, 'utf-8').encode()".format('你好') # 表示这是附件,名字是啥# 解决附件中文名称乱码问题attr1.add_header('Content-Disposition', 'attachment', filename=Header(file_name, 'utf-8').encode())message.attach(attr1)# 构造图片附件2att2 = MIMEText(open('./1.png', 'rb').read(), 'base64', 'utf-8')att2["Content-Type"] = 'application/octet-stream'att2["Content-Disposition"] = 'attachment; filename="12.jpg"'message.attach(att2)# 构造html附件3att3 = MIMEText(open('./2.html', 'rb').read(), 'base64', 'utf-8')att3["Content-Type"] = 'application/octet-stream'att3["Content-Disposition"] = 'attachment; filename="boke.html"'message.attach(att3)smtp = smtplib.SMTP_SSL("smtp.263.com", 465) # 实例化smtp服务器smtp.login(sender, password) # 发件人登录smtp.sendmail(sender, [recver], message.as_string()) # as_string 对 message 的消息进行了封装smtp.close() |
注意点:使用smtp服务发送带附件的邮件,附件的名称不能直接用中文,否则发送过去文件名会是乱码
[Python]
纯文本查看
复制代码
1 2 | # 解决附件中文名称乱码问题attr1.add_header('Content-Disposition', 'attachment', filename=Header(file_name, 'utf-8').encode()) |