发布时间:2026-07-21阅读(1)
业务需求:1.读取SQL中的统计数据,我来为大家科普一下关于python从邮箱获取指定邮件?以下内容希望对你有帮助!

python从邮箱获取指定邮件
业务需求:
1.读取SQL中的统计数据
2.将统计数据导出CSV
3.把CSV发送指定邮箱
引入需要处理的包:csv(或xlwt),smtplib,mysql
python版本: 3.9
在输出表头时使用2个数组,以顺序建立对应关系输出,还有其他的巧妙的方法吗?
话不多说,直接上代码
DB建表就不贴了,一个user表(name,phone,sex)
# -*- coding: utf-8 -*-# 导入CSV安装包import csv# 日期import datetime# 邮件import smtplibfrom email.header import Headerfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText# mysqlimport pymysql.cursors# excel处理import xlwt# 连接数据库connect = pymysql.Connect( host=127.0.0.1, port=3306, user=test_db, passwd=dbmima, db=test, charset=utf8mb4, cursorclass=pymysql.cursors.DictCursor)# 第三方 SMTP 服务# 设置服务器mail_host = "smtp.exmail.qq.com"# 用户名mail_user = "76079901@qq.com"# 口令mail_pass = "mima"# 查询数据sql = select * from user # 定义表头array = [ name, phone, sex]title = [用户名, 手机号, 性别]def process(): export_csv() send_email()def export_excel(): # 获取游标 cursor = connect.cursor() book = xlwt.Workbook() sheet = book.add_sheet("sheet1") cursor.execute(sql) result = cursor.fetchall() # 输出表头 for z, t in enumerate(title): sheet.write(0, z, t) # 输出数据 for x, row in enumerate(result): for y, field in enumerate(array): # print(x 1, y, row[field]) sheet.write(x 1, y, get_value(str(row[field]))) bookName = UR_Record_%s.xls % datetime.datetime.now().strftime(%Y%m%d) # 保存Excel book.save(bookName) # 关闭连接 cursor.close() connect.close()def export_csv(): cursor = connect.cursor() cursor.execute(sql) result = cursor.fetchall() print("数据量: " str(len(result))) book_name = Record_%s.csv % datetime.datetime.now().strftime(%Y%m%d) # 1. 创建文件对象 解决表情符乱码,设置utf-8-sig,且数据库链接改为utf8mb4 f = open(book_name, w, encoding=utf-8-sig, newline=) # 2. 基于文件对象构建 csv写入对象 csv_writer = csv.writer(f) # 3. 构建列表头 csv_writer.writerow(title) # 4. 写入csv文件内容 for x, row in enumerate(result): r = [init] * len(array) for y, field in enumerate(array): r[y] = row[field] # 保存单条记录,使用writerow(result)即可 # print(r) # csv_writer.writerow([row[mobile], row[join_at], row[source]]) csv_writer.writerow(r) print("导出完成") # 关闭连接 f.close()def get_value(val): if val == None: return else: return valdef send_email(): sender = mail_user # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 receivers = [76079901@qq.com] # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEMultipart() # 发送者 message[From] = Header("FROM", utf-8) # 接收者 message[To] = Header("To", utf-8) # 主题 message[Subject] = Header(【Header Content】, utf-8) # 邮件正文内容 message.attach(MIMEText( 正文 , plain, utf-8)) # 附件 curDay = datetime.datetime.now().strftime(%Y%m%d) att1 = MIMEText(open(Record_%s.csv % curDay, rb).read(), base64, utf-8) att1["Content-Type"] = application/octet-stream # filename = 文件名 att1["Content-Disposition"] = attachment;filename="Record_%s.csv" % curDay message.attach(att1) try: smtp_obj = smtplib.SMTP_SSL(mail_host, 465) smtp_obj.login(mail_user, mail_pass) smtp_obj.sendmail(sender, receivers, message.as_string()) smtp_obj.quit() print("send success!!!") except smtplib.SMTPException as e: print("Error: send Fail!!! ", e)if __name__ == __main__: process()
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图