email_util.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. # coding=utf-8
  2. from email.mime.text import MIMEText
  3. from email.header import Header
  4. from smtplib import SMTP
  5. from email.mime.multipart import MIMEMultipart
  6. from email.mime.base import MIMEBase
  7. from email.encoders import encode_base64
  8. import traceback
  9. import os, random, sys, requests
  10. from requests_toolbelt.multipart.encoder import MultipartEncoder
  11. from mail_content_text import MailContentText
  12. # https://blog.csdn.net/chuxu8314/article/details/100618710
  13. # https://blog.csdn.net/Angry_Mills/article/details/79067270
  14. class EmailUtil(object):
  15. host_server = 'smtp.exmail.qq.com'
  16. sender_email = 'data_service@elab-plus.com'
  17. pwd = 'elab@123A'
  18. send_name = 'elab'
  19. receiver = ['1285211525@qq.com', 'lijm@elab-plus.com', 'xuanxc@elab-plus.com']
  20. # 线上
  21. # url_online = "http://dm-api.elab-plus.cn/elab-marketing-sms//mail/sendEmailForReport"
  22. url_online = "http://101.132.43.32:5303/mail/sendEmailForReport"
  23. # 开发环境
  24. url_dev = "http://43.254.221.77:5555/elab-marketing-sms//mail/sendEmailForReport" # 接口地址
  25. # 测试环境
  26. url_test = "http://gatewaytest.elab-plus.com/elab-marketing-sms//mail/sendEmailForReport"
  27. # 本地
  28. url_local = "http://localhost:5303/mail/sendEmailForReport"
  29. url = url_online
  30. # 消息头数据
  31. headers = {
  32. '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',
  33. 'Referer': url,
  34. }
  35. def __init__(self):
  36. pass
  37. def send_mail(self,
  38. mail_title,
  39. content,
  40. receivers,
  41. mail_excel
  42. ):
  43. try:
  44. smtp = SMTP(self.host_server, 25)
  45. smtp.set_debuglevel(1)
  46. smtp.ehlo(self.host_server)
  47. smtp.login(self.sender_email, self.pwd)
  48. msg = MIMEMultipart('related')
  49. msg['From'] = self.send_name
  50. msg['Subject'] = Header(mail_title, 'gbk')
  51. msgAlternative = MIMEMultipart('alternative')
  52. msg.attach(msgAlternative)
  53. if content:
  54. textApart = MIMEText(content)
  55. msg.attach(textApart)
  56. if mail_excel:
  57. part = MIMEBase('application', "vnd.ms-excel")
  58. with open(mail_excel, 'rb') as fp:
  59. part.set_payload(fp.read())
  60. encode_base64(part)
  61. print(os.path.split(mail_excel)[1])
  62. part.add_header('Content-Disposition', 'attachment', filename=('gbk', '', os.path.split(mail_excel)[1]))
  63. msg.attach(part)
  64. for receiver in receivers:
  65. msg['To'] = receiver
  66. try:
  67. smtp.sendmail(self.sender_email, receiver, msg.as_string())
  68. except Exception as e:
  69. print(str(e))
  70. smtp.sendmail(self.sender_email, receiver, msg.as_string())
  71. print('Success!')
  72. except Exception as e:
  73. print('Error:{}'.format(str(e)))
  74. traceback.print_exc()
  75. def send_mail_by_admin(self,
  76. mail_title,
  77. content,
  78. receiver,
  79. mail_excel,
  80. file_name,
  81. mail_excel_1=None,
  82. file_name_1=None
  83. ):
  84. if mail_excel_1 is not None:
  85. with open(mail_excel, 'rb') as f:
  86. with open(mail_excel_1, 'rb') as ff:
  87. m = MultipartEncoder(
  88. fields={
  89. "enclosure": ('file', f, 'application/octet-stream'),
  90. "enclosure1": ('file', ff, 'application/octet-stream'),
  91. "mailAddressee": receiver,
  92. "mailContent": content,
  93. "mailEnclosureName": file_name,
  94. "mailEnclosureName1": file_name_1,
  95. "mailTitle": mail_title,
  96. "mailType": "text/html",
  97. "time": ""
  98. }
  99. )
  100. self.headers['Content-Type'] = m.content_type
  101. r = requests.post(self.url, data=m, verify=False, headers=self.headers)
  102. if r and r.json()['success']:
  103. return True
  104. else:
  105. with open(mail_excel, 'rb') as f:
  106. m = MultipartEncoder(
  107. fields={
  108. "enclosure": ('file', f, 'application/octet-stream'),
  109. "mailAddressee": receiver,
  110. "enclosure1": 'null',
  111. "mailContent": content,
  112. "mailEnclosureName": file_name,
  113. "mailEnclosureName1": 'null',
  114. "mailTitle": mail_title,
  115. "mailType": "text/html",
  116. "time": ""
  117. }
  118. )
  119. self.headers['Content-Type'] = m.content_type
  120. r = requests.post(self.url, data=m, verify=False, headers=self.headers)
  121. if r and r.json()['success']:
  122. return True
  123. def send_test(self):
  124. send_email = EmailUtil()
  125. send_email.send_mail('elab_test', '11', ['1285211525@qq.com'],
  126. mail_excel=r'D:\elab-code\elab_mvp\resources\行为与模块分值汇总.xlsx')
  127. if __name__ == '__main__':
  128. send_email = EmailUtil()
  129. 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),
  130. '1285211525@qq.com',
  131. r'D:\elab-code\elab_mvp\resources\建业项目卡片信息合档-补id(1)(1).xlsx',
  132. '建业项目卡片信息合档-补id(1)(1).xlsx',
  133. r'D:\elab-code\elab_mvp\resources\tongce1.xlsx',
  134. 'tongce1.xlsx')
  135. print(result)