本文实例为大家分享了python3邮件群发excel附件的具体代码,供大家参考,具体内容如下
连接,查询mysql,导入到excel文件,定时群发邮件与附件。
smtplib,主要用到pymysql xlwt
# 1,导入模块
进口pymysql # Python3的mysql模块,Python2是mysqldb 进口操作系统 进口datetime #定时发送,以及日期 进口shutil #文件操作 进口smtplib #邮件模块 从email.mime。文本导入MIMEText 从email.mime。多部分进口MIMEMultipart 从电子邮件。头导入头 导入的时间 进口xlwt # excel写入 >之前# 2,连接并查询mysql
def eMysql (mysql_host mysql_port、mysql_user mysql_password, mysql_db, sql): 试一试: db=pymysql。连接(主机=mysql_host端口=mysql_port用户=mysql_user密码=mysql_password db=mysql_db charset=use utf8) #连接数据库编码注意是utf8,不然中文结果输出会乱码 打印(“MYSQL连接。”)#连接数据库 光标=db.cursor() #使用光标()方法获取操作游标 cursor.execute (sql) #执行sql语句 print (SQL执行) 结果=cursor.fetchall() #结果 返回结果 打印(“执行结果”) db.close() #关闭数据库连接 print (MYSQL关闭) 除了: print (SQL失败) >之前# 3,写入excel
def eWrite (fLocate,结果,file_sheet、file_subject style0): 试一试: 如果os.path.exists (fLocate): os.remove (fLocate) #如果文件存在,则删除 f=xlwt.Workbook(编码=皍tf - 8”) #打开excel文件 fs=f.add_sheet (file_sheet) #表名 主题=列表(file_subject) #列表化 因为我在范围(len(主题):#找到日期列 如果日期”主题(我): col_num=我 因为我在范围(len(主题):#表标题 fs。写(0,我,[我]) 我的范围(len(结果)):#表数据,日期列格式为日期 j的范围(len(结果[0])): 如果j==col_num: fs。写(i + 1, j,结果[我][j], style0) 其他: fs。写(i + 1, j,结果[我][j]) 因为我在范围(10):#单元格宽度为 fs.col (i) .width=3333 print(写完) f.save (fLocate) 除了: 打印(“写失败”) >之前# 4,发送邮件
def eSend(发送方、接收方、用户名、密码、smtpserver主题,e_content, file_path, file_name): 试一试: #邮件头 消息=MIMEMultipart () 消息发送者['从']=#发送 消息[',']="、" . join(接收器)#收件 消息(“主题”)=头(主题、“utf - 8”) 消息。附加(MIMEText (e_content,“普通”,“utf - 8”)) #邮件正文 #构造附件 att1=MIMEText (open (file_path + file_name, rb) .read (),“base64”、“utf - 8”) att1(“内容类型”)='应用程序/八进制的 att1[“附加”]="附件;文件名=" + file_name message.attach (att1) #执行 smtp=smtplib.SMTP () smtp.connect (smtpserver) #连接服务器 smtp。登录(用户名、密码)#登录 smtp。sendmail(发送方、接收方、message.as_string()) #发送 smtp.quit () 打印(“发送”) 除了: 打印(“发送失败”) >之前# 5,配置与执行
而真正的: #配置 # __time_____ ehour=5 #定时小时 艾敏=21 #定时分钟 esec=41 #定时秒 当前时间=time.localtime (time.time()) #当前时间 cur_time=trftime (% H % M, time.localtime (time.time())) #当前时间str # __mysql_____ mysql_host=mysql_host #登录主机 mysql_port=mysql_port #登录端口 mysql_user=mysql_user #登录名 mysql_password=mysql_password #登录密码 mysql_db=mysql_db #数据库 sql=sql.encode (utf - 8) # sql查询语句编码 # __email_____ 发送方=发送方#发件人邮箱 接收机=(“453032441 @qq.com”) #收件人邮箱,可以多个(列表形式)群发 # 用户名=用户名#发件人姓名 密码=# smtp密密码码,qq是给你分配一串,163年是自己设置 smtpserver=smtpserver #邮箱服务器 主题="嘿,这里有一些有趣的事”#邮件标题 e_content=' {0: ^ 27} \ n {1: ^ 27} \ n {25} 2: ^ \ n {3: ^ 25}’。格式(“我”、“/\ \”,“(——)”、“(- - - - - - - - - -)”)#邮件正文#邮件正文 # __file_____ file_path=" D:/" #文件位置 file_name="大便。xls”#文件名 fLocate=file_path + file_name #文件路径 file_subject=?‘你’,‘“,“块”、“的”、“大便。“#表标题 file_sheet='好的' #表名 style0=xlwt.XFStyle () style0.num_format_str=' YYYY-MM-DD ' #操作 如果(当前时间。tm_hour==ehour)和(当前时间。tm_min==emin)和(当前时间。tm_sec==esec)): 打印(“开始”) 结果=eMysql (mysql_host mysql_port、mysql_user mysql_password, mysql_db, sql) eWrite (fLocate,结果,file_sheet、file_subject style0) eSend(发送方、接收方、用户名、密码、smtpserver主题,e_content, file_path, file_name) 打印(cur_time) time . sleep (1)python3 + mysql查询数据并通过邮件群发excel附件