python实现QQ邮箱定时发送带附件的邮件

python实现QQ邮箱定时发送带附件的邮件

获取授权码

该功能需要配置qq邮箱授权码,下面先展示如何获取该授权码:

  1. 登陆qq邮箱点击设置
    在这里插入图片描述
  2. 点击账号然后直接往下翻可以看到管理服务
    在这里插入图片描述
    然后用手机号验证之后就可以获取授权码
    在这里插入图片描述

代码实现

该功能实现是可以支持调节执行频率和指定时间点执行发送

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)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值