check_email.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import json
  2. from file_util import FileUtil
  3. from email_client import EmailClient
  4. from notice import PushFactory, PushMessage, MessageType, Email
  5. # email_config_path = "./config/email/"
  6. email_config_path = "/config/email/"
  7. def check_email(config: dict):
  8. """
  9. 检查新邮件
  10. :param config: 邮箱配置
  11. :return:
  12. """
  13. email_config = {
  14. 'email_account': config['account'],
  15. 'email_password': config['password'],
  16. 'connect_type': config['connect_type'],
  17. 'receive_server_address': config['receive_server_addr'],
  18. 'receive_server_port': config['receive_server_port']
  19. }
  20. print(f"正在检查 {email_config['email_account']} 的邮件...")
  21. # 检查新邮件
  22. client = EmailClient(email_config)
  23. try:
  24. new_emails = client.check_new_email(config['last_check_uid'])
  25. print(f"新邮件数量: {len(new_emails)}")
  26. return new_emails
  27. except Exception as e:
  28. print(e)
  29. print(f"检查邮件时出错: {e}")
  30. return []
  31. finally:
  32. client.disconnect()
  33. def to_message(email: dict):
  34. """
  35. 转换为推送消息
  36. :param email:
  37. :return:
  38. """
  39. sender_display = email["sender"].replace(' ', '\n').replace('"', '')
  40. recipient_display = email["recipient"].replace(' ', '\n')
  41. return PushMessage(
  42. title="新邮件通知",
  43. content=f'您有一封来自[{email["sender_name"] if email["sender_name"] else email["sender_email"]}]的邮件',
  44. messageType=MessageType.EMAIL,
  45. email=Email(
  46. sender=sender_display,
  47. recipient=recipient_display,
  48. subject=email['subject'],
  49. sendTime=email['date'],
  50. content=email['content'],
  51. )
  52. )
  53. if __name__ == '__main__':
  54. # 1. 读取所有的配置文件
  55. files = FileUtil.list_files(email_config_path)
  56. print(f"找到 {len(files)} 个配置文件")
  57. if len(files) == 0:
  58. print("没有找到配置文件")
  59. exit(1)
  60. # 2. 遍历所有配置文件
  61. for file in files:
  62. print(f"正在处理 {file}")
  63. config = FileUtil.read_json(file)
  64. # 3. 检查邮件
  65. email_config = config["email"]
  66. try:
  67. emails = check_email(email_config)
  68. print(f"[{email_config['account']}]新邮件数量: {len(emails)}")
  69. if len(emails) < 0:
  70. continue
  71. current_email = None
  72. for email in emails:
  73. current_email = email
  74. message = to_message(email)
  75. PushFactory.create_push(config['push']).send_notification(message)
  76. print(f"[{email_config['account']}]推送结果: 完成")
  77. if current_email and current_email['uid'] > email_config['last_check_uid']:
  78. email_config['last_check_uid'] = current_email['uid']
  79. FileUtil.write_json(file, config)
  80. print(f'[{email_config["account"]}]更新配置文件: {json.dumps(config, indent=4)}')
  81. except Exception as ex:
  82. print(f"[{email_config['account']}]检查邮件时出错: {ex}")