700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 用python自动化定时发送邮件(普通文本 html 图片 附件等)_亲测有效

用python自动化定时发送邮件(普通文本 html 图片 附件等)_亲测有效

时间:2021-08-12 04:35:12

相关推荐

用python自动化定时发送邮件(普通文本 html 图片 附件等)_亲测有效

这周有需求将Bi报表每天定时,自动的群发给team成员,今天搜集资料完成了这个需求,可以发送普通文本,图片,附件已经html形式将其展现出来,整套代码如下;已亲测可行,相关信息已脱敏~

写完脚本后登陆控制面板->管理工具->任务计划程序 可以给脚本设定定时执行的任务,相关操作步骤可以参考如下:

如何在windows服务器上面创建定时任务 - 施勇 - CSDN博客

#!/usr/bin/python# -*- coding: UTF-8 -*-# smtplib是Python 用来发送邮件的模块import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.multipart import MIMEMultipart # 构建邮件头信息,包括发件人,接收人,标题等from email.mime.text import MIMEText # 构建邮件正文,可以是text,也可以是HTMLfrom email.mime.application import MIMEApplication # 构建邮件附件,理论上,只要是文件即可,一般是图片,Excel表格,word文件等from email.header import Header # 专门构建邮件标题的,这样做,可以支持标题中文from email.mime.image import MIMEImage # 处理图片信息import timeimport pandas as pdimport pymysql.cursorsimport timetime_start = time.time()def get_data():"""从数据库中取数:return:"""config = {'host': '101.132.***.***','port': 3306,'user': '***','password': '***'}conn = pymysql.connect(**config)cursor = conn.cursor()sql_app = """select*from***.***limit100;"""df_a = pd.read_sql(sql_app, conn)return df_adef plot_data(data):"""输入原始数据进行分析,并输出Bi报表存放地址(自定义化):param data: 从get_data()函数中取到的原始数据:return:"""# 定义一个字符串,内容就是HTML代码def get_simple_html_msg(df):"""一般需求将图片和超链接放到里面(用于非动态数据,直接发送处理好的图片和网页链接):param df::return:"""html_msg = \"""<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><h1>这是一封python写的邮件,使用的是HTML格式构造正文</h1><h2>可以为文字添加超链接,比如:<a href="https://***">**</a></h2><hr><h3>还可以添加图片,比如下面这张</h3><img src="E:\code\_sample\_picture\***.jpg"><h4>还可以添加第二章图片,比如下面这张</h4><img src="E:\code\_sample\_picture\***.jpg"></body></html>"""return html_msgdef send_email(html_msg):"""发送邮件的脚本,在邮件中可添加text文本,html文本和附件:return:"""# 邮件服务信息,公司mail_host = "smtp.***.com" # 设置服务器mail_user = "***@***.com" # 用户名mail_pass = "***" # 密码# 邮件发送和接收人sender = mail_userreceiver = ['***@***.com', '***@']# 邮件头信息message = MIMEMultipart('related')message['From'] = sendermessage['To'] = ','.join(receiver)message['Subject'] = Header('【Python Test】邮件测试')# ①普通文本内容添加到邮件content_text = MIMEText('Python 定时邮件发送测试成功...', 'plain', 'utf-8')# message.attach(content_text)# ②html 形式的内容添加到邮件(如果有② 则文本和图片不会显示在邮件正文中)content_html = MIMEText(html_msg, "html", "utf-8")message.attach(content_html)# ③图片 形式的内容添加到邮件(包含在②中,否咋上传的是图片附件)# fp = open(r'E:\code\_sample\_picture\***.jpg', 'rb')# content_image = MIMEImage(fp.read())# fp.close()# content_image.add_header('Content-ID', '')# message.attach(content_image)# ④ 附件 形式的内容添加到邮件excel_file_path = r'E:\***\***\3_Excel文档\1_AI开源项目调研_.10.29.xlsx'attach_table = MIMEApplication(open(excel_file_path, 'rb').read())attach_table.add_header('Content-Disposition', 'attachment', filename='我的附件.xlsx')# 这样的话,附件名称就可以是中文的了,不会出现乱码attach_table.set_charset('utf-8')message.attach(attach_table)# 发送邮件,测试成功,流程都是固定的:创建客户端,登陆,发送,关闭try:smtpObj = smtplib.SMTP() # 实例化smtpObj.connect(mail_host, 25) # 25为 SMTP 端口号smtpObj.login(mail_user, mail_pass) # 邮箱登录print('登录成功!')smtpObj.sendmail(mail_user, receiver, message.as_string()) # 发送邮件smtpObj.quit() # 邮件退出print("恭喜:邮件发送成功!")except smtplib.SMTPException:print("错误:无法发送邮件")if __name__ == '__main__':# 从数据库取数并分析,输出dataframedata = get_data()# 将dataframe转化成html格式html_msg = get_simple_html_msg(data)# 发送邮件send_email(html_msg)# 计算耗时time_end = time.time()time_cost = str(round((time_end - time_start), ndigits=2))print('time_cost:', time_cost + 's')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。