1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import os from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders import smtplib from email.header import Header from email.mime.multipart import MIMEMultipart from email.utils import parseaddr, formataddr import pandas as pd import sqlalchemy as sql import json
with open('./config.json','rb')as js: config=json.load(js)
host = config['email']['host'] port = config['email']['port']
s = smtplib.SMTP_SSL(host)
s.connect(host, port)
def _format_addr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr))
pngs = os.listdir(f'./Screenshots')
engine = sql.create_engine(f"mysql+pymysql://{config['sql']['user']}:{config['sql']['password']}@{config['sql']['host']}:{config['sql']['port']}/{config['sql']['database']}")
sql='select * from user_info'
df=pd.read_sql(sql,engine)
send_list_dict={}
for row in df.itertuples(index=True,name='Pandas'): send_list_dict[getattr(row,'username')]=getattr(row,'email')
from_addr = config['email']['from_addr']
password =config['email']['from_pwd']
s.login(user=from_addr, password=password)
for png in pngs: msg = MIMEMultipart() msg.attach(MIMEText('<html><body style:"margin:0 auto;"><h1>结果截图:</h1>' + '<p><img src="cid:0"></p>' + '</body></html>', 'html', 'utf-8')) msg.attach(MIMEText('打卡结果', 'plain', 'utf-8')) with open(f'./Screenshots/{png}', 'rb') as f: mime = MIMEBase('image', 'png', filename=png) mime.add_header('Content-Disposition', 'attachment', filename=png) mime.add_header('Content-ID', '<0>') mime.add_header('X-Attachment-Id','0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) to_addr = send_list_dict[png.split('.')[0]] msg['From'] = _format_addr('打卡小助手 <%s>' % from_addr) msg['To'] = _format_addr('管理员 <%s>' % to_addr) msg['Subject'] = Header('今日打卡结果反馈:', 'utf-8').encode() s.sendmail(from_addr, [to_addr], msg.as_string())
s.quit()
|