文章作者:易明
个人博客:https://yiming1012.github.io
简书主页:https://www.jianshu.com/u/6ebea55f5cec
邮箱地址:1129079384@qq.com
简介
在工作中可能会遇到将生成的文件以邮件的方式发送给他人。通过SMTP(Simple Mail Transfer Protocol)简单邮件传输协议来发送邮件。这里主要用到Python中两个库:
1. smtplib #对smtp协议进行了封装
2. email #用来创建邮件
SMTP服务
以QQ邮箱为例,首先需要开启SMTP服务,并获取授权码(程序中需要用到
)。步骤是:设置-账户-开启服务-生成授权码
导入相关库
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
参数说明
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "1129079384@qq.com" # 用户名
mail_pass = "XXXX" # 授权码而非邮箱密码
receivers = ['1129079384@qq.com', '123456789@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
创建邮件
标准邮件一般需要三个头部信息: From、To和Subject。先创建一个带附件的实例,然后分别设置各个信息。
msg = MIMEMultipart() # 创建一个带附件的实例
msg["Subject"] = "Tomorrow is another day" #指定邮件主题
msg["From"] = mail_user #邮件发送人
msg["To"] = ','.join(receivers) #邮件接收人,如果存在多个收件人,可用join连接
编辑邮件
# ---文字部分---
part = MIMEText("请查收,谢谢!")
msg.attach(part)
# ---附件部分---
part = MIMEApplication(open('test.xlsx', 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename="test.xlsx")
msg.attach(part)
发送邮件
通过实例化smtplib模块的SMTP对象来连接到SMTP访问,并使用sendmail方法来发送信息。
try:
s = smtplib.SMTP("smtp.qq.com", timeout=30) # 连接smtp邮件服务器,端口默认是25
s.login(mail_user, mail_pass) # 登陆服务器
s.sendmail(mail_user, receivers, msg.as_string()) # 发送邮件
s.close()
except Exception as e:
print("error:", e)