NeteaseMail.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import email
  2. import smtplib
  3. from email.header import Header
  4. from email.mime.text import MIMEText
  5. from nntplib import decode_header
  6. from imapclient import IMAPClient
  7. import email.parser
  8. class NeteaseMail:
  9. # 连接邮箱服务器并登录。
  10. def loginEmail(self, imap_server, from_addr, password, imap_port, isssl=True):
  11. '''第一部分:收件IMAP4********************************************'''
  12. '''登录邮箱IMAP4=========================================================='''
  13. email_server = None
  14. #993 465
  15. try:
  16. email_server = IMAPClient(imap_server, ssl=isssl, port=imap_port)
  17. #email_server = imaplib.IMAP4_SSL(IMAP_SERVER, 993) # 网易企业邮箱服务器及SSL端口
  18. print("imap4 服务器连接成功")
  19. email_server.login(from_addr, password)
  20. email_server.id_({"name": "IMAPClient", "version": "2.1.0"})
  21. #email_server.login(FROM_ADDR, PASSWORD)
  22. print("imap4 账号密码正确,登录成功")
  23. except:
  24. print("imap4 服务器连接失败")
  25. else:
  26. return email_server
  27. #关闭邮箱服务器连接
  28. def closeEmail(self, email_server):
  29. # 关闭select
  30. email_server.shutdown()
  31. print('退出邮箱')
  32. # 关闭连接
  33. # email_server.logout()
  34. #获取邮箱内容、标题、发件人
  35. def getEmailContext(self, email_server):
  36. ''' 邮箱中收到的未读邮件的数量=========================================================='''
  37. #email_server.select_folder('INBOX', readonly=True)
  38. email_server.select_folder('INBOX', readonly=True) # readonly=True表明只读并不修改任何信息
  39. results = email_server.search()
  40. subject_list = []
  41. bodydata_list = []
  42. from_list = []
  43. try:
  44. for uid in results:
  45. msgdict = email_server.fetch(uid, ['Body[]','ENVELOPE'], '(RFC822)')
  46. mailbody = msgdict[uid][b'BODY[]']
  47. envelope = msgdict[uid][b'ENVELOPE']
  48. message = email.message_from_bytes(mailbody)
  49. msgfrom = message['from']
  50. text = message.as_string()
  51. body = email.parser.Parser().parsestr(text)
  52. for part in body.walk():
  53. if part['Subject']:
  54. subject_list.append(decode_header(part['Subject']))
  55. if part['from']:
  56. from_list.append(decode_header(part['from']))
  57. if not part.is_multipart():
  58. name = part.get_param("name") # 如果是附件,这里就会取出附件的文件名
  59. if name:
  60. print('附件')
  61. elif part.get_content_type() == 'text/plain':
  62. con3 = part.get_payload(decode=True).strip()
  63. bodydata_list.append(con3.decode('gbk'))
  64. break
  65. else:
  66. con3 = part.get_payload(decode=True).strip()
  67. bodydata_list.append(con3.decode('utf8'))
  68. break
  69. # print '+'*60 # 用来区别各个部分的输出
  70. except:
  71. print('获取内容出错')
  72. else:
  73. return subject_list, from_list, bodydata_list
  74. # if subject_list and bodydata_list:
  75. # data_unseen = [subject_list, bodydata_list]
  76. # data_unseen1 = pd.DataFrame(data_unseen)
  77. # data_unseen1.to_csv('data_unseen.csv', sep=',', header=True, index=True, encoding='utf_8_sig')
  78. #
  79. # aws_key = "ASIA2E67UIMDTJFRF7UE" # 【你的 aws_access_key】
  80. # aws_secret = "5u6MDvm3Fabdbc6EG9+JPJE3x07peNkrvok76Dqq" # 【你的 aws_secret_key】
  81. # aws_session_token = "FwoGZXIvYXdzEHQaDKQchZxanXOpNJ2UriLoARUmKF/Uf6HZMhB4Bdo1Df4BlirgpqOyXmMULjx1yvqah1+BKIV2rzEoxxaVmvjcvLjHMQamPR7QzLZYP/WgJ6biPTnfqJWy5rCVpIZtD3D2nmGWAf5RSedADILJgBQmrXumFX2jrnm6THbqfdyfT2eitKt5ZD82zvLOaHMWu7mzomzmye8Eimt28Dhj6jsLeZPxOhhHBLUi+gddHAMCQq8HmGbnsXN5OrOBvqreRAxdR/u6vuQHbVpV3b8V5nkAtTVhOCaGRcPETARB8F/jFuFRhW9tAjPZisP/SEa8vUDR32FoMNQeda4o5+7l/gUyKYlem5bIB96gywY6s4C8c1PAa3l09+5tdGNp5laAJf7vMUzMJckR2EgF"
  82. # session = Session(aws_access_key_id=aws_key,
  83. # aws_secret_access_key=aws_secret,
  84. # aws_session_token=aws_session_token,
  85. # region_name="ap-southeast-1") # 此处根据自己的 s3 地区位置改变
  86. # s3 = session.resource("s3")
  87. # client = session.client("s3")
  88. # bucket = "asj-oct-ipc" # 【你 bucket 的名字】 # 首先需要保.证 s3 上已经存在该存储桶,否则报错
  89. # upload_data = open("./././static/log/error.log", "rb")
  90. # upload_key = "86YC8Z192VB1VMKU111A/vod1/test"
  91. # file_obj = s3.Bucket(bucket).put_object(Key=upload_key, Body=upload_data)
  92. #发送邮箱
  93. def faEmail(self,email_server,message,subject,from_addr,to_addr):
  94. if email_server:
  95. print("邮件开始发送")
  96. message = message
  97. msg = MIMEText(message, 'plain', 'gbk')
  98. msg['Subject'] = Header(subject, 'gbk')
  99. msg['From'] = Header(from_addr)
  100. try:
  101. msg['To'] = Header(to_addr, 'utf-8')
  102. email_server.sendmail(from_addr, to_addr, msg.as_string()) # 将msg转化成string发出
  103. print("邮件发送成功")
  104. except Exception as e:
  105. print('Error:', e)
  106. email_server.quit()
  107. def sentemail(self,message,subject,from_addr,to_addr,iemial, ipassword):
  108. host = 'smtp.163.com'
  109. # 设置发件服务器地址
  110. port = 465
  111. # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式,现在一般是SSL方式
  112. sender = iemial
  113. # 设置发件邮箱,一定要自己注册的邮箱
  114. pwd = ipassword
  115. # 设置发件邮箱的授权码密码,根据163邮箱提示,登录第三方邮件客户端需要授权码
  116. receiver = to_addr
  117. # 设置邮件接收人,可以是QQ邮箱
  118. body = message
  119. # 设置邮件正文,这里是支持HTML的
  120. msg = MIMEText(body, 'html')
  121. # 设置正文为符合邮件格式的HTML内容
  122. msg['subject'] = subject
  123. # 设置邮件标题
  124. msg['from'] = from_addr
  125. # 设置发送人
  126. msg['to'] = to_addr
  127. # 设置接收人
  128. try:
  129. s = smtplib.SMTP_SSL(host, port)
  130. # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL
  131. s.login(sender, pwd)
  132. # 登陆邮箱
  133. s.sendmail(sender, receiver, msg.as_string())
  134. # 发送邮件!
  135. print('Done.sent email success')
  136. except smtplib.SMTPException:
  137. print('Error.sent email fail')
  138. # mailto_list = ['xxxxxx@xx.com]
  139. # mail_host = "smtp.163.com"
  140. # mail_user = "xxxxxx"
  141. # mail_pass = "xxxxxxxxxx"
  142. #
  143. # def send_mail(mailto_list, sub, content,mail_user,mail_pass):
  144. # me = "hello" + "<" + mail_user + "@1368035>"
  145. # msg = MIMEText(content, _subtype='plain')
  146. # msg['Subject'] = sub
  147. # msg['From'] = me
  148. # try:
  149. # for mail in mailto_list:
  150. # msg['To'] = mail
  151. # server = smtplib.SMTP()
  152. # server.connect(mail_host)
  153. # server.login(mail_user, mail_pass)
  154. # server.sendmail(me, mail, msg.as_string())
  155. # server.close()
  156. # del msg['To']
  157. # return True
  158. # except Exception, e:
  159. # print
  160. # str(e)
  161. # return False