| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | # coding=utf-8from email.mime.text import MIMETextfrom email.header import Headerfrom smtplib import SMTPfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email.encoders import encode_base64import tracebackimport os, random, sys, requestsfrom requests_toolbelt.multipart.encoder import MultipartEncoderfrom mail_content_text import MailContentText# https://blog.csdn.net/chuxu8314/article/details/100618710# https://blog.csdn.net/Angry_Mills/article/details/79067270class 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": ('file', None, 'application/octet-stream'),                        "mailContent": content,                        "mailEnclosureName": file_name,                        "mailEnclosureName1": None,                        "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('移动案场订阅日报',                                           '报表内容请查收',                                           '1285211525@qq.com',                                           r'D:\elab\elab_mvp\resources\report_data\2020-04-14\移动案场订阅周报_ltt_集团_2020-03-12至2020-03-13.xls',                                           '移动案场订阅周报_ltt_集团_2020-03-12至2020-03-13.xls'                                           )    print(result)
 |