python3 + mysql查询数据并通过邮件群发excel附件

  

本文实例为大家分享了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附件