近期有定时发送邮件的需要,刚好学了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()
感谢阅读,下次再见