python实现定时批量发送邮件

近期有定时发送邮件的需要,刚好学了python的办公自动化,可以用python来帮我完成

先上效果图
在这里插入图片描述

准备工作:
配置环境,安装相关第三方库,这里主要指schedule库,可以实现定时执行某个函数

pip install schedule

然后,需要去开通邮箱的smtp服务,授权邮件收发功能,以qq邮箱为例,大概是这样的,不会没关系,csdn里有很多相关教程,这里不赘述
在这里插入图片描述
然后,准备工作就差不多了,思路是这样的,编写一个发送邮件的函数,用schedule库定期执行函数就能达到效果,复杂一点的可能需要几个函数,同时也能实现批量发送,收件人那里给个列表就能实现。

上代码了,改改账号、授权码、收件人、标题、内容就能用


'''
准备工作:首先你需要去邮箱开通smtp的服务,得到登录授权码,我这里以qq邮箱为例,csdn里相关的教程很多,我就不做介绍了
然后,安装相关的库,这里是schedule库,用pip install schedule 就可完成,
发送邮件的库用的是python自带的,不需要再安装,缺点是代码量比较大,但是套路固定
之后就是复制代码,修改账号、授权码、正文内容、标题为自己的
'''

# 定义一个函数用于发送邮件
def job():
    import time
    from smtplib import SMTP_SSL
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header

    # smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
    # email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

    try:
        host_server = 'smtp.qq.com'  #qq邮箱smtp服务器
        sender_qq = '***@qq.com' #发件人邮箱
        pwd = '你的授权码'
        receiver = ['***@qq.com','***@qq.com' ]#收件人邮箱
        #receiver = '910456393@qq.com'
        mail_title = 'Python自动发送的邮件' #邮件标题
        mail_content = "您好,这是使用python登录QQ邮箱发送邮件的测试——hello" + str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) #邮件正文内容
        # 初始化一个邮件主体
        msg = MIMEMultipart()
        msg["Subject"] = Header(mail_title,'utf-8')
        msg["From"] = sender_qq
        # msg["To"] = Header("测试邮箱",'utf-8')
        msg['To'] = ";".join(receiver)
        # 邮件正文内容
        msg.attach(MIMEText(mail_content,'plain','utf-8'))



        smtp = SMTP_SSL(host_server) # ssl登录

        # login(user,password):
        # user:登录邮箱的用户名。
        # password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。
        smtp.login(sender_qq,pwd)

        # sendmail(from_addr,to_addrs,msg,...):
        # from_addr:邮件发送者地址
        # to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'
        # msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
        smtp.sendmail(sender_qq,receiver,msg.as_string())
        print('邮件发送成功')
    except Exception as e:
        print(e)
        print('邮件发送失败')

    # quit():用于结束SMTP会话。
    smtp.quit()



def run():
    import schedule
    import time
    # 每分钟执行一次job函数
    schedule.every(1).minute.do(job)
    # schedule.every().day.at('09:04').do(job)
    # schedule.every(2).minutes.do(job)
    i = 0
    while True:
        i = i + 1
        schedule.run_pending()
        time.sleep(1)

if __name__ == '__main__':
    run()

感谢阅读,下次再见

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Celery可以很方便地实现定时任务和批量推送邮件。以下是一个示例代码,演示如何使用Celery定时发送批量邮件: 1. 安装Celery和Redis ```bash pip install celery redis ``` 2. 创建Celery实例 ```python # tasks.py from celery import Celery app = Celery('tasks', broker='redis://localhost:6379/0') ``` 3. 编写发送邮件的函数 ```python # tasks.py import smtplib from email.mime.text import MIMEText @app.task def send_email(recipient, subject, body): # 创建邮件内容 message = MIMEText(body) message['From'] = 'sender@example.com' message['To'] = recipient message['Subject'] = subject # 连接邮件服务器 server = smtplib.SMTP('smtp.example.com', 587) server.starttls() server.login('username', 'password') # 发送邮件 server.sendmail('sender@example.com', recipient, message.as_string()) # 关闭连接 server.quit() ``` 4. 编写定时任务 ```python # tasks.py from datetime import datetime, timedelta @app.task def send_batch_emails(): # 构造邮件列表 recipients = ['user1@example.com', 'user2@example.com', 'user3@example.com'] subject = 'Test Email' body = 'This is a test email.' # 发送邮件 for recipient in recipients: send_email.apply_async(args=[recipient, subject, body]) @app.task def send_periodic_emails(): # 每天10点发送一次邮件 schedule_time = datetime.now().replace(hour=10, minute=0, second=0) if schedule_time < datetime.now(): schedule_time += timedelta(days=1) send_batch_emails.apply_async(eta=schedule_time) ``` 5. 启动Celery ```bash celery -A tasks worker --loglevel=info ``` 6. 定时发送邮件 ```python # 在任意位置调用 send_periodic_emails() 函数即可 from tasks import send_periodic_emails send_periodic_emails.delay() ``` 在上面的代码中,我们使用Celery创建了一个异步任务send_email(),用于发送单个邮件。然后,我们创建了一个异步任务send_batch_emails(),用于批量发送邮件。send_batch_emails()函数遍历收件人列表,为每个收件人创建一个send_email任务,并异步发送邮件。 最后,我们创建了一个定时任务send_periodic_emails(),用于每天10点发送一次邮件。我们使用Celery的apply_async()方法设置任务的执行时间,并在启动Celery后调用该函数即可。 您可以根据自己的需要修改邮件内容、收件人列表和定时任务的时间,并使用类似的方法来实现定时发送批量邮件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值