有时候人不在电脑旁,程序运行中发生了问题,或者程序需要定期发送报告,此时发送电子邮件就是一个方便快捷的方案。python的内置库smtplib就具有发送电子邮件的功能,今天我们以QQ邮箱为例,发送一个带附件的邮件给自己。
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
#设置服务器所需信息
#qq邮箱服务器地址
mail_host = 'smtp.qq.com'
#qq号
mail_user = '2*****5'
#QQ邮箱为授权码)
mail_pass = 'n*****c'
#邮件发送方邮箱地址
sender = '2*****5@qq.com'
#只发送一个人可以用字符串或列表,多于一个人用列表
receivers = ['2*****5@qq.com']
#这表示可以发送带附件的邮件
message = MIMEMultipart()
#设置email信息
#邮件主题
message['Subject'] = '邮件主题'
#发送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
#邮件内容设置
content = MIMEText("这是一个测试邮件", 'html', 'utf-8')
#附件的路径
with open('abc.csv','r',encoding='gbk' ,errors='ignore') as f:
attachment = f.read()
attachment1 = MIMEText(attachment)
attachment1['Content-Disposition'] = 'attachment;filename="abc.csv"'
#将内容和附件附在邮件上
message.attach(content)
message.attach(attachment1)
#发邮件成功后返回时间
send_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
#登录并发送邮件
try:
smtpObj = smtplib.SMTP()
#连接到服务器
smtpObj.connect(mail_host,25)
#登录到服务器
smtpObj.login(mail_user,mail_pass)
#发送
smtpObj.sendmail(
sender,receivers,message.as_string())
#退出
smtpObj.quit()
print(f'邮件已发送,发送时间为{send_time}')
except smtplib.SMTPException as e:
print('邮件发送出现了错误:',e,'请重试后发送') #打印错误信息
返回:邮件已发送,发送时间为2024-01-12 21:19:25
需要注意的是:
1、QQ邮箱的授权码路径:邮箱界面左上角的“设置”——“账号”——“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”——“继续获取授权码”,点开就行了。
2、做完第一条,会出现一个“短信验证”,让我们发短信,先不要发(浪费1毛钱啊)。点击“选择其他方式验证”,然后出现接收验证码或用QQ密保,这两个选一个用就行了。