get_email_code.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import time
  2. import re
  3. from config import Config
  4. import requests
  5. class EmailVerificationHandler:
  6. def __init__(self):
  7. self.username = Config().get_temp_mail()
  8. self.session = requests.Session()
  9. self.emailExtension = "@mailto.plus"
  10. def get_verification_code(self):
  11. code = None
  12. try:
  13. print("正在处理...")
  14. # 等待并获取最新邮件
  15. code, first_id = self._get_latest_mail_code()
  16. # 清理邮件
  17. self._cleanup_mail(first_id)
  18. except Exception as e:
  19. print(f"获取验证码失败: {str(e)}")
  20. return code
  21. # 手动输入验证码
  22. def _get_latest_mail_code(self):
  23. # 获取邮件列表
  24. mail_list_url = f"https://tempmail.plus/api/mails?email={self.username}{self.emailExtension}&limit=20&epin="
  25. mail_list_response = self.session.get(mail_list_url)
  26. mail_list_data = mail_list_response.json()
  27. time.sleep(0.5)
  28. if not mail_list_data.get("result"):
  29. return None, None
  30. # 获取最新邮件的ID
  31. first_id = mail_list_data.get("first_id")
  32. if not first_id:
  33. return None, None
  34. # 获取具体邮件内容
  35. mail_detail_url = f"https://tempmail.plus/api/mails/{first_id}?email={self.username}{self.emailExtension}&epin="
  36. mail_detail_response = self.session.get(mail_detail_url)
  37. mail_detail_data = mail_detail_response.json()
  38. time.sleep(0.5)
  39. if not mail_detail_data.get("result"):
  40. return None, None
  41. # 从邮件文本中提取6位数字验证码
  42. mail_text = mail_detail_data.get("text", "")
  43. code_match = re.search(r"\b\d{6}\b", mail_text)
  44. if code_match:
  45. return code_match.group(), first_id
  46. return None, None
  47. def _cleanup_mail(self, first_id):
  48. # 构造删除请求的URL和数据
  49. delete_url = "https://tempmail.plus/api/mails/"
  50. payload = {
  51. "email": f"{self.username}{self.emailExtension}",
  52. "first_id": first_id,
  53. "epin": "",
  54. }
  55. # 最多尝试5次
  56. for _ in range(5):
  57. response = self.session.delete(delete_url, data=payload)
  58. try:
  59. result = response.json().get("result")
  60. if result is True:
  61. return True
  62. except:
  63. pass
  64. # 如果失败,等待0.5秒后重试
  65. time.sleep(0.5)
  66. return False
  67. if __name__ == "__main__":
  68. email_handler = EmailVerificationHandler()
  69. code = email_handler.get_verification_code()
  70. print(code)