#!/usr/bin/env python # -*- coding: utf-8 -*- import requests import re import json import logging from datetime import datetime import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger('EmailAnalyzer') class EmailAnalyzer: """邮件分析类,用于操作邮箱系统并分析邮件内容""" def __init__(self, api_base_url="http://localhost:5000/api", smtp_host="localhost", smtp_port=3825): """初始化邮件分析器""" self.api_base_url = api_base_url self.smtp_host = smtp_host self.smtp_port = smtp_port logger.info(f"初始化邮件分析器: API={api_base_url}, SMTP={smtp_host}:{smtp_port}") # API相关方法 def get_all_domains(self): """获取所有域名""" try: response = requests.get(f"{self.api_base_url}/domains") if response.status_code == 200: domains = response.json().get('domains', []) logger.info(f"获取到 {len(domains)} 个域名") return domains else: logger.error(f"获取域名失败: HTTP {response.status_code}") return [] except Exception as e: logger.error(f"获取域名出错: {str(e)}") return [] def create_domain(self, domain_name, description=""): """创建新域名""" try: data = { "name": domain_name, "description": description } response = requests.post(f"{self.api_base_url}/domains", json=data) if response.status_code in (200, 201): result = response.json() domain = result.get("domain", {}) logger.info(f"成功创建域名: {domain_name} (ID: {domain.get('id')})") return domain else: logger.error(f"创建域名失败: HTTP {response.status_code} - {response.text}") return None except Exception as e: logger.error(f"创建域名出错: {str(e)}") return None def get_all_mailboxes(self): """获取所有邮箱""" try: response = requests.get(f"{self.api_base_url}/mailboxes") if response.status_code == 200: mailboxes = response.json().get('mailboxes', []) logger.info(f"获取到 {len(mailboxes)} 个邮箱") return mailboxes else: logger.error(f"获取邮箱失败: HTTP {response.status_code}") return [] except Exception as e: logger.error(f"获取邮箱出错: {str(e)}") return [] def create_mailbox(self, domain_id, address): """创建新邮箱""" try: data = { "domain_id": domain_id, "address": address } response = requests.post(f"{self.api_base_url}/mailboxes", json=data) if response.status_code in (200, 201): result = response.json() mailbox = result.get("mailbox", {}) logger.info(f"成功创建邮箱: {mailbox.get('full_address')} (ID: {mailbox.get('id')})") return mailbox else: logger.error(f"创建邮箱失败: HTTP {response.status_code} - {response.text}") return None except Exception as e: logger.error(f"创建邮箱出错: {str(e)}") return None def get_mailbox_emails(self, mailbox_id): """获取指定邮箱的所有邮件""" try: response = requests.get(f"{self.api_base_url}/mailboxes/{mailbox_id}/emails") if response.status_code == 200: emails = response.json().get('emails', []) logger.info(f"获取到邮箱ID={mailbox_id}的 {len(emails)} 封邮件") return emails else: logger.error(f"获取邮件失败: HTTP {response.status_code}") return [] except Exception as e: logger.error(f"获取邮件出错: {str(e)}") return [] def get_email_detail(self, email_id): """获取指定邮件的详细信息""" try: response = requests.get(f"{self.api_base_url}/emails/{email_id}") if response.status_code == 200: email = response.json().get('email', {}) logger.info(f"获取到邮件ID={email_id}的详细信息") return email else: logger.error(f"获取邮件详情失败: HTTP {response.status_code}") return {} except Exception as e: logger.error(f"获取邮件详情出错: {str(e)}") return {} # SMTP相关方法 def send_email(self, from_addr, to_addr, subject, body_text="", body_html=""): """发送邮件""" try: # 创建邮件 msg = MIMEMultipart('alternative') msg['From'] = from_addr msg['To'] = to_addr msg['Subject'] = subject # 添加文本内容 if body_text: msg.attach(MIMEText(body_text, 'plain')) # 添加HTML内容 if body_html: msg.attach(MIMEText(body_html, 'html')) # 连接SMTP服务器并发送 server = smtplib.SMTP(self.smtp_host, self.smtp_port) server.set_debuglevel(1) # 开启调试 server.sendmail(from_addr, to_addr, msg.as_string()) server.quit() logger.info(f"成功发送邮件: {from_addr} -> {to_addr}, 主题: {subject}") return True except Exception as e: logger.error(f"发送邮件失败: {str(e)}") return False def send_verification_code(self, to_addr, code_length=6): """发送验证码邮件""" # 生成随机验证码 import random import string code = ''.join(random.choices(string.digits, k=code_length)) # 邮件主题 subject = f'您的验证码 - {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' # 邮件HTML内容 html = f'''
您好!
您的验证码是:
此验证码将在30分钟内有效。
如果这不是您请求的,请忽略此邮件。
谢谢!