mail_xiangyu.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import poplib
  4. import datetime
  5. import time
  6. from email.parser import Parser
  7. from email.header import decode_header
  8. # 输入邮件地址, 口令和POP3服务器地址:
  9. email = ''
  10. password = '' # 注意使用开通POP,SMTP等的授权码
  11. pop3_server = 'pop3.xiangyu.cn'
  12. def decode_str(s): # 字符编码转换
  13. value, charset = decode_header(s)[0]
  14. if charset:
  15. value = value.decode(charset)
  16. return value
  17. def get_att(msg):
  18. import email
  19. attachment_files = []
  20. for part in msg.walk():
  21. file_name = part.get_filename() # 获取附件名称类型
  22. contType = part.get_content_type()
  23. print(file_name)
  24. if file_name:
  25. h = email.header.Header(file_name)
  26. dh = email.header.decode_header(h) # 对附件名称进行解码
  27. filename = dh[0][0]
  28. if dh[0][1]:
  29. filename = decode_str(str(filename, dh[0][1])) # 将附件名称可读化
  30. print(filename)
  31. # filename = filename.encode("utf-8")
  32. data = part.get_payload(decode=True) # 下载附件
  33. # att_file = open('/home/code/python/coal_mail/emailFile/' + filename, 'wb') # 在指定目录下创建文件,注意二进制文件需要用wb模式打开
  34. att_file = open('/Users/xi/Desktop/coal_mail/emailFile/' + filename, 'wb') # 在指定目录下创建文件,注意二进制文件需要用wb模式打开
  35. attachment_files.append(filename)
  36. att_file.write(data) # 保存附件
  37. att_file.close()
  38. return attachment_files
  39. # 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3()
  40. server = poplib.POP3_SSL(pop3_server,'995')
  41. server.set_debuglevel(1)
  42. # 打印POP3服务器的欢迎文字:
  43. print(server.getwelcome().decode('utf-8'))
  44. # 身份认证:
  45. server.user(email)
  46. server.pass_(password)
  47. # 返回邮件数量和占用空间:
  48. print('Messages: %s. Size: %s' % server.stat())
  49. # list()返回所有邮件的编号:
  50. resp, mails, octets = server.list()
  51. # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
  52. print(mails)
  53. index = len(mails)
  54. print(index)
  55. for i in range(index, 0, -1):
  56. # 倒序遍历邮件
  57. resp, lines, octets = server.retr(i)
  58. # lines存储了邮件的原始文本的每一行,
  59. # 邮件的原始文本:
  60. msg_content = b'\r\n'.join(lines).decode('utf-8')
  61. # 解析邮件:
  62. msg = Parser().parsestr(msg_content)
  63. # 获取邮件时间
  64. date1 = time.strptime(msg.get("Date")[0:24], '%a, %d %b %Y %H:%M:%S') # 格式化收件时间
  65. date2 = time.strftime("%Y%m%d", date1) # 邮件时间格式转换
  66. now_time = datetime.datetime.now()
  67. # // 自定义下载附件时间范围
  68. getFileDay = (now_time + datetime.timedelta(days=-1)).strftime("%Y%m%d")
  69. # 邮件最早的时间
  70. print(date1)
  71. # 邮件最近的时间
  72. print(date2)
  73. if date2 < getFileDay:
  74. continue
  75. f_list = get_att(msg) # 获取附件
  76. # print_info(msg)
  77. server.quit()