python实现QQ邮箱定时发送带附件的邮件
获取授权码
该功能需要配置qq邮箱授权码,下面先展示如何获取该授权码:
- 登陆qq邮箱点击设置
- 点击账号然后直接往下翻可以看到管理服务
然后用手机号验证之后就可以获取授权码
代码实现
该功能实现是可以支持调节执行频率和指定时间点执行发送
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import schedule
import time
def job():
# 调用发送邮件函数
msg_from = '123124124234@qq.com' # 写你的邮箱账号
passwd = '1234234krjlybiab' # 需要改成你的授权码
to = ['234234214@gmail.com'] # 这个是写你发送对象的邮箱账号
subject = "定时通过邮件发送任务" # 这个是邮件的主题
content = "测试定时任务发送邮件" # 邮件的正文内容
attachment_path = "C:/Users/user/Desktop/test.xls"
attachment_name = "result.xlsx"
send_email(msg_from, passwd, to, subject, content, attachment_path, attachment_name)
def send_email(msg_from, passwd, to, subject, content, attachment_path, attachment_name):
"""
发送邮件函数
:param msg_from: 发送方邮箱地址
:param passwd: 发送方邮箱密码
:param to: 接受方邮箱地址列表
:param subject: 邮件主题
:param content: 邮件正文内容
:param attachment_path: 附件路径
:param attachment_name: 附件名称
"""
# 创建一个 MIMEMultipart 对象
msg = MIMEMultipart()
# 设置邮件内容
msg.attach(MIMEText(content, 'plain', 'utf-8'))
# 添加附件
with open(attachment_path, 'rb') as attachment_file:
att = MIMEText(attachment_file.read(), 'base64', 'utf-8')
att['Content-Type'] = 'application/octet-stream'
att['Content-Disposition'] = f'attachment;filename={attachment_name}'
msg.attach(att)
# 设置邮件主题
msg['Subject'] = subject
# 设置发送方信息
msg['From'] = msg_from
# 通过SSL方式发送,服务器地址和端口
try:
with smtplib.SMTP_SSL("smtp.qq.com", 465) as server:
# 登录邮箱
server.login(msg_from, passwd)
# 发送邮件
server.sendmail(msg_from, to, msg.as_string())
print("邮件发送成功")
except Exception as e:
print(f"邮件发送失败: {e}")
schedule.every(20).seconds.do(job) # 每20秒执行一次任务
# schedule.every().day.at("10:30").do(job) # 每天的10:30执行任务 你到时候可以用这种方式定点发送邮件
while True:
schedule.run_pending()
time.sleep(1)