由于疫情原因,家庭办公需要每天发邮件打卡,所以定期自动发邮件 我的思路:
- 定时:cron
- 发送邮件:smtp
这是第一次写,中间有很多复制粘贴,修改了很多次才成功,报告了很多错误,但错误的信息没有记录下来
import email import smtplib # 负责发邮件 from apscheduler.schedulers.blocking import BlockingScheduler import datetime import warnings warnings.filterwarnings('ignore') # 创建邮件 def create_email(sender_name, receiver_name, email_Subject, email_text): message = MIMEMultipart() message.attach(MIMEText(email_text, 'plain', 'utf-8')) # 产生发件人名称 message['From'] = Header(sender_name, 'utf-8') # 生成收件人名称 # message['To'] = Header(receiver_name, 'utf-8') message['To'] = receiver_name # 产生邮件主题 message['Subject'] = Header(email_Subject, 'utf-8') # 返回邮件 return message # 发送邮件 def send_email(sender, password, receiver, msg, mail_host = "smtp.126.com"): # 函数输入邮箱、密码、收件人和邮件内容 try: server = smtplib.SMTP_SSL(mail_host) # 发件人邮箱里的SMTP服务器 server.connect(mail_host, 465) # 需要先把邮箱POP3/SMTP服务开启 server.ehlo() #登录您的帐户 server.login(sender, password) # 括号对应于发件人的邮箱账号和邮箱密码 #发送邮件 server.sendmail(sender, receiver.split(, msg.as_string()) # 括号对应于发件人邮箱账号、收件人邮箱账号(列表)、邮件内容 print("邮件发送成功" datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # 关闭SMTP对象 server.quit() # 小知识点:加上as e try except 可以通过as e以错误打印的形式,如果没有,系统报告的错误将被捕获和处理,你看不到的 except Exception as e: # 打印错误 print(e) print(‘邮件发送失败’ datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # 发送工作邮件 def send_work_email(): print('已发送工作邮件') # 这是当时找不到报错加上的 你可以删除 # 发件人邮箱 sender = "xxxxxxxx@126.com" # 我用的是126邮箱 sender_name = "xsm<xxxxxxxx@126.com>" # 邮箱授权码,请注意,这是邮箱密码!! mail_license = "KBQWPHTIQICCRBQD" # 这是我的邮箱授权码,可以登录邮箱查看 # 收件人邮箱(前面的昵称必须是英文的) receiver_name = "longxxxxx@163.com,lixxxxx@h-partners.com,xuxxxx@h-partners.com" # 可以多人 # 邮件主题 subject_content = """xxxx_居家办公_上班签到""" # 邮件正文 body_content = """各位领导,早上好: xxxxx发送工作登录邮件""" message = create_email(sender_name=sender_name,receiver_name=receiver_name,email_Subject=subject_content,email_text=body_content) send_email(sender=sender,password=mail_license,receiver=receiver_name,msg=message) # 下班下班邮件 def send_rest_email(): print('已下班下班邮件') # 这是当时找不到报错加上的 你可以删除 # 发件人邮箱 sender = "xxxxx@126.com" sender_name = "xsm<xxxxx@126.com>" mail_license = "KBQWPHTIQICCRBQD" # 再次提醒 这是我的授权码 receiver_name = "longjietan@163.com,lishuai24@h-partners.com,xuwei36@h-partners.com" # 邮件主题 subject_content = """xxx_居家办公_下班签到""" # 邮件正文 body_content = """各位领导,晚上好: xxx下班后发邮件签到""" message = create_email(sender_name=sender_name,receiver_name=receiver_name,email_Subject=subject_content,email_text=body_content) send_email(sender=sender,password=mail_license,receiver=receiver_name,msg=message) if __name__ == '__main__': # BlockingScheduler scheduler = BlockingScheduler() print(启动定时任务发送邮件,7:30 和 20:30 分别发送上下班邮件') scheduler.add_job(send_work_email, 'cron', day_of_week='mon-fri', hour=7, minute=30, end_date='2022-12-31') scheduler.add_job(send_rest_email, 'cron', day_of_week='mon-fri', hour=20, minute=30, end_date='2022-12-31') scheduler.start()