# coding=utf-8 from email.mime.text import MIMEText from email.header import Header from smtplib import SMTP from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.encoders import encode_base64 import traceback import os, random, sys, requests from requests_toolbelt.multipart.encoder import MultipartEncoder from mail_content_text import MailContentText # https://blog.csdn.net/chuxu8314/article/details/100618710 # https://blog.csdn.net/Angry_Mills/article/details/79067270 class EmailUtil(object): host_server = 'smtp.exmail.qq.com' sender_email = 'data_service@elab-plus.com' pwd = 'elab@123A' send_name = 'elab' receiver = ['1285211525@qq.com', 'lijm@elab-plus.com', 'xuanxc@elab-plus.com'] # 线上 # url_online = "http://dm-api.elab-plus.cn/elab-marketing-sms//mail/sendEmailForReport" url_online = "http://101.132.43.32:5303/mail/sendEmailForReport" # 开发环境 url_dev = "http://43.254.221.77:5555/elab-marketing-sms//mail/sendEmailForReport" # 接口地址 # 测试环境 url_test = "http://gatewaytest.elab-plus.com/elab-marketing-sms//mail/sendEmailForReport" # 本地 url_local = "http://localhost:5303/mail/sendEmailForReport" url = url_online # 消息头数据 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36', 'Referer': url, } def __init__(self): pass def send_mail(self, mail_title, content, receivers, mail_excel ): try: smtp = SMTP(self.host_server, 25) smtp.set_debuglevel(1) smtp.ehlo(self.host_server) smtp.login(self.sender_email, self.pwd) msg = MIMEMultipart('related') msg['From'] = self.send_name msg['Subject'] = Header(mail_title, 'gbk') msgAlternative = MIMEMultipart('alternative') msg.attach(msgAlternative) if content: textApart = MIMEText(content) msg.attach(textApart) if mail_excel: part = MIMEBase('application', "vnd.ms-excel") with open(mail_excel, 'rb') as fp: part.set_payload(fp.read()) encode_base64(part) print(os.path.split(mail_excel)[1]) part.add_header('Content-Disposition', 'attachment', filename=('gbk', '', os.path.split(mail_excel)[1])) msg.attach(part) for receiver in receivers: msg['To'] = receiver try: smtp.sendmail(self.sender_email, receiver, msg.as_string()) except Exception as e: print(str(e)) smtp.sendmail(self.sender_email, receiver, msg.as_string()) print('Success!') except Exception as e: print('Error:{}'.format(str(e))) traceback.print_exc() def send_mail_by_admin(self, mail_title, content, receiver, mail_excel, file_name, mail_excel_1=None, file_name_1=None ): if mail_excel_1 is not None: with open(mail_excel, 'rb') as f: with open(mail_excel_1, 'rb') as ff: m = MultipartEncoder( fields={ "enclosure": ('file', f, 'application/octet-stream'), "enclosure1": ('file', ff, 'application/octet-stream'), "mailAddressee": receiver, "mailContent": content, "mailEnclosureName": file_name, "mailEnclosureName1": file_name_1, "mailTitle": mail_title, "mailType": "text/html", "time": "" } ) self.headers['Content-Type'] = m.content_type r = requests.post(self.url, data=m, verify=False, headers=self.headers) if r and r.json()['success']: return True else: with open(mail_excel, 'rb') as f: m = MultipartEncoder( fields={ "enclosure": ('file', f, 'application/octet-stream'), "mailAddressee": receiver, "enclosure1": 'null', "mailContent": content, "mailEnclosureName": file_name, "mailEnclosureName1": 'null', "mailTitle": mail_title, "mailType": "text/html", "time": "" } ) self.headers['Content-Type'] = m.content_type r = requests.post(self.url, data=m, verify=False, headers=self.headers) if r and r.json()['success']: return True def send_test(self): send_email = EmailUtil() send_email.send_mail('elab_test', '11', ['1285211525@qq.com'], mail_excel=r'D:\elab-code\elab_mvp\resources\行为与模块分值汇总.xlsx') if __name__ == '__main__': send_email = EmailUtil() result = send_email.send_mail_by_admin('移动案场订阅日报', MailContentText.text_1.format(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), '1285211525@qq.com', r'D:\elab-code\elab_mvp\resources\建业项目卡片信息合档-补id(1)(1).xlsx', '建业项目卡片信息合档-补id(1)(1).xlsx', r'D:\elab-code\elab_mvp\resources\tongce1.xlsx', 'tongce1.xlsx') print(result)