123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- # 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": ('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)
|