email_client.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # coding:utf-8
  2. # !/user/bin/python2
  3. """
  4. 邮件发送模块
  5. """
  6. import time
  7. import json
  8. import logging
  9. from functools import partial
  10. import threading
  11. import requests
  12. import traceback
  13. from email.header import Header
  14. from email.MIMEText import MIMEText
  15. from email.utils import parseaddr,formataddr
  16. import smtplib,time,os
  17. from aliyun_email import AliEmailClient
  18. logger = logging.getLogger(__name__)
  19. Settings = type('Settings', (object, ),
  20. {'EMAIL_URL': 'https://182.138.102.104/push-gateway/v1/push',
  21. 'EMAIL_USER': 'mail.cetcsc.com',
  22. 'EMAIL_PASSWD': '30sanpush'})
  23. class EmailClient(object):
  24. """
  25. 邮件客户端
  26. """
  27. def __init__(self, url, user, passwd):
  28. self.url = url
  29. self.user = user
  30. self.passwd = passwd
  31. #def send(self, to, subject, content):
  32. # """
  33. # 发送邮件
  34. # :params
  35. # to: 邮件列表
  36. # subject: 主题
  37. # content: 内容
  38. # """
  39. # auth = requests.auth.HTTPDigestAuth(self.user, self.passwd)
  40. # data = self._gen_content(to, subject, content)
  41. # logger.info("send email, raw data: %s", str(data))
  42. # try:
  43. # r = requests.post(self.url, json=data, auth=auth, verify=False)
  44. # print r.json()
  45. # except Exception as e:
  46. # print e
  47. # return False,str(e)
  48. # if r.status_code != requests.codes.OK:
  49. # return False,r.json()
  50. # try:
  51. # logger.info('send email response: %s', str(r.text))
  52. # ret = r.json()
  53. # if ret['mail']['code'] != '0':
  54. # logger.error("send email failed, reason: %s ", str(ret))
  55. # return False,ret
  56. # except Exception as e:
  57. # return False,str(e)
  58. # return True,"success"
  59. #def send(self,to,subject,content):
  60. # """
  61. # """
  62. # from_addr = "cetcsc_swad@163.com"
  63. # password = "AXN4zwIoCd"
  64. # smtp_server = "smtp.163.com"
  65. # #自定义处理邮件收发地址的显示内容
  66. # def _format_addr(s):
  67. # name,addr = parseaddr(s)
  68. # #将邮件的name转换成utf-8格式,addr如果是unicode,则转换utf-8输出,否则直接输出addr
  69. # return formataddr((\
  70. # Header(name,'utf-8').encode(),\
  71. # addr.encode("utf-8") if isinstance(addr,unicode) else addr))
  72. # #邮件正文是MIMEText
  73. # msg = MIMEText(content,'html','utf-8')
  74. # #邮件对象
  75. # msg['From'] = _format_addr(u'网络监测预警事业部 <%s>'%from_addr)
  76. # #msg['to'] = _format_addr(u'管理员<%s>'%to)
  77. # msg['Subject'] = Header(subject,'utf-8').encode()
  78. # msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z")
  79. # #发送邮件
  80. # try:
  81. # server = smtplib.SMTP(smtp_server,25)
  82. # #server.set_debuglevel(1)
  83. # server.login(from_addr,password)
  84. # server.sendmail(from_addr,to,msg.as_string())
  85. # server.quit()
  86. # except Exception as e:
  87. # return False,str(e)
  88. # return True,"success"
  89. def send(self,to,subject,content):
  90. """
  91. """
  92. aliemail_client = AliEmailClient()
  93. to = to[0] if isinstance(to,type([])) else to
  94. res = aliemail_client.send_mail(to,subject,content)
  95. if res and res.get("RequestId") and res.get("EnvId"):
  96. return True,"success"
  97. else:
  98. return False,res.get("Message","fail") if res else "fail"
  99. def _gen_content(self, to, subject, content):
  100. data = {
  101. "emails": to,
  102. "title": subject,
  103. "body": {
  104. "textHTML": content
  105. }
  106. }
  107. return data
  108. email_client = EmailClient(Settings.EMAIL_URL, Settings.EMAIL_USER, Settings.EMAIL_PASSWD)
  109. if __name__ == '__main__':
  110. #测试
  111. to = ["scxiaojincai@163.com"]
  112. to = "496498291@qq.com"
  113. subject = u"删除提醒"
  114. content = u"网站{www.test1.com}在2018-08-30 15:30:10 被用户{xxx}删除,云防御系统将无法继续提供安全防护服务,请予以关注!"
  115. email_client.send(to,subject,content)