mail.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 = 'pop.qiye.aliyun.com'
  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. attachment_files.append(filename)
  35. att_file.write(data) # 保存附件
  36. att_file.close()
  37. return attachment_files
  38. # 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3()
  39. server = poplib.POP3_SSL(pop3_server)
  40. server.set_debuglevel(1)
  41. # 打印POP3服务器的欢迎文字:
  42. print(server.getwelcome().decode('utf-8'))
  43. # 身份认证:
  44. server.user(email)
  45. server.pass_(password)
  46. # 返回邮件数量和占用空间:
  47. print('Messages: %s. Size: %s' % server.stat())
  48. # list()返回所有邮件的编号:
  49. resp, mails, octets = server.list()
  50. # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
  51. print(mails)
  52. index = len(mails)
  53. print(index)
  54. for i in range(index, 0, -1):
  55. # 倒序遍历邮件
  56. resp, lines, octets = server.retr(i)
  57. # lines存储了邮件的原始文本的每一行,
  58. # 邮件的原始文本:
  59. msg_content = b'\r\n'.join(lines).decode('utf-8')
  60. # 解析邮件:
  61. msg = Parser().parsestr(msg_content)
  62. # 获取邮件时间
  63. date1 = time.strptime(msg.get("Date")[0:24], '%a, %d %b %Y %H:%M:%S') # 格式化收件时间
  64. date2 = time.strftime("%Y%m%d", date1) # 邮件时间格式转换
  65. now_time = datetime.datetime.now()
  66. # // 自定义下载附件时间范围
  67. getFileDay = (now_time + datetime.timedelta(days=-1)).strftime("%Y%m%d")
  68. # 邮件最早的时间
  69. print(date1)
  70. # 邮件最近的时间
  71. print(date2)
  72. if date2 < getFileDay:
  73. continue
  74. f_list = get_att(msg) # 获取附件
  75. # print_info(msg)
  76. server.quit()