初始化提交,包含完整的邮件系统代码
This commit is contained in:
284
test_core_features.py
Normal file
284
test_core_features.py
Normal file
@@ -0,0 +1,284 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import requests
|
||||
import smtplib
|
||||
import time
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
import logging
|
||||
import sys
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
logger = logging.getLogger('CoreFeatureTest')
|
||||
|
||||
# API配置
|
||||
API_BASE_URL = "http://localhost:5000/api"
|
||||
SMTP_HOST = "localhost"
|
||||
SMTP_PORT = 3825
|
||||
|
||||
def print_divider(title=""):
|
||||
"""打印分隔线"""
|
||||
line = "=" * 80
|
||||
if title:
|
||||
print(f"\n{line}\n{title.center(80)}\n{line}\n")
|
||||
else:
|
||||
print(f"\n{line}\n")
|
||||
|
||||
def get_all_domains():
|
||||
"""获取所有域名"""
|
||||
try:
|
||||
response = requests.get(f"{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(domain_name, description=""):
|
||||
"""创建新域名"""
|
||||
try:
|
||||
data = {
|
||||
"name": domain_name,
|
||||
"description": description
|
||||
}
|
||||
response = requests.post(f"{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():
|
||||
"""获取所有邮箱"""
|
||||
try:
|
||||
response = requests.get(f"{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(domain_id, address):
|
||||
"""创建新邮箱"""
|
||||
try:
|
||||
data = {
|
||||
"domain_id": domain_id,
|
||||
"address": address
|
||||
}
|
||||
response = requests.post(f"{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(mailbox_id):
|
||||
"""获取指定邮箱的所有邮件"""
|
||||
try:
|
||||
response = requests.get(f"{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 send_email(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(SMTP_HOST, 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 test_create_multiple_domains():
|
||||
"""测试创建多个域名"""
|
||||
print_divider("测试创建多个域名")
|
||||
|
||||
# 创建3个不同的域名
|
||||
domains = []
|
||||
test_domains = [
|
||||
{"name": "example1.com", "desc": "测试域名1"},
|
||||
{"name": "example2.com", "desc": "测试域名2"},
|
||||
{"name": "example3.com", "desc": "测试域名3"}
|
||||
]
|
||||
|
||||
for domain_info in test_domains:
|
||||
domain = create_domain(domain_info["name"], domain_info["desc"])
|
||||
if domain:
|
||||
domains.append(domain)
|
||||
|
||||
# 验证域名是否创建成功
|
||||
all_domains = get_all_domains()
|
||||
print(f"\n当前系统中共有 {len(all_domains)} 个域名:")
|
||||
for domain in all_domains:
|
||||
print(f" - {domain.get('name')} (ID: {domain.get('id')})")
|
||||
|
||||
return domains
|
||||
|
||||
def test_create_multiple_mailboxes(domains):
|
||||
"""测试为每个域名创建多个邮箱"""
|
||||
print_divider("测试创建多个邮箱")
|
||||
|
||||
mailboxes = []
|
||||
|
||||
# 为每个域名创建多个邮箱
|
||||
for domain in domains:
|
||||
domain_id = domain.get('id')
|
||||
domain_name = domain.get('name')
|
||||
|
||||
print(f"\n为域名 {domain_name} 创建邮箱:")
|
||||
|
||||
# 为每个域名创建2个邮箱
|
||||
users = ["user1", "user2"]
|
||||
for user in users:
|
||||
mailbox = create_mailbox(domain_id, user)
|
||||
if mailbox:
|
||||
mailboxes.append(mailbox)
|
||||
print(f" - 创建了邮箱: {mailbox.get('full_address')} (ID: {mailbox.get('id')})")
|
||||
|
||||
# 验证邮箱是否创建成功
|
||||
all_mailboxes = get_all_mailboxes()
|
||||
print(f"\n当前系统中共有 {len(all_mailboxes)} 个邮箱:")
|
||||
for mailbox in all_mailboxes:
|
||||
print(f" - {mailbox.get('full_address')} (ID: {mailbox.get('id')})")
|
||||
|
||||
return mailboxes
|
||||
|
||||
def test_email_receiving(mailboxes):
|
||||
"""测试邮件接收功能"""
|
||||
print_divider("测试邮件接收功能")
|
||||
|
||||
if not mailboxes:
|
||||
print("没有可用的邮箱,无法测试邮件接收功能")
|
||||
return False
|
||||
|
||||
# 选择第一个邮箱作为发件人
|
||||
sender_mailbox = mailboxes[0]
|
||||
from_addr = sender_mailbox.get('full_address')
|
||||
|
||||
# 发送邮件到其他所有邮箱
|
||||
for recipient_mailbox in mailboxes[1:]:
|
||||
to_addr = recipient_mailbox.get('full_address')
|
||||
subject = f"测试邮件 - 从 {from_addr} 发送到 {to_addr}"
|
||||
body_text = f"""
|
||||
你好!
|
||||
|
||||
这是一封测试邮件,发送时间:{time.strftime('%Y-%m-%d %H:%M:%S')}
|
||||
|
||||
此邮件用于测试邮件系统的接收功能。
|
||||
|
||||
来自: {from_addr}
|
||||
"""
|
||||
|
||||
success = send_email(from_addr, to_addr, subject, body_text)
|
||||
if success:
|
||||
print(f"成功发送邮件: {from_addr} -> {to_addr}")
|
||||
else:
|
||||
print(f"发送邮件失败: {from_addr} -> {to_addr}")
|
||||
|
||||
# 等待邮件处理
|
||||
print("\n等待5秒钟,让系统处理邮件...")
|
||||
time.sleep(5)
|
||||
|
||||
# 检查每个邮箱是否收到邮件
|
||||
print("\n检查邮箱收件情况:")
|
||||
for mailbox in mailboxes[1:]: # 跳过发件人邮箱
|
||||
mailbox_id = mailbox.get('id')
|
||||
mailbox_address = mailbox.get('full_address')
|
||||
|
||||
emails = get_mailbox_emails(mailbox_id)
|
||||
if emails:
|
||||
print(f" - 邮箱 {mailbox_address} 收到了 {len(emails)} 封邮件")
|
||||
for email in emails:
|
||||
print(f" * 邮件ID: {email.get('id')}, 主题: {email.get('subject')}")
|
||||
print(f" 发件人: {email.get('sender')}, 时间: {email.get('received_at')}")
|
||||
else:
|
||||
print(f" - 邮箱 {mailbox_address} 没有收到任何邮件")
|
||||
|
||||
return True
|
||||
|
||||
def main():
|
||||
try:
|
||||
print_divider("邮件系统核心功能测试")
|
||||
print("此脚本将测试以下功能:")
|
||||
print(" 1. 创建多个不同的域名")
|
||||
print(" 2. 为每个域名创建多个邮箱")
|
||||
print(" 3. 测试邮件接收功能")
|
||||
|
||||
# 测试创建多个域名
|
||||
domains = test_create_multiple_domains()
|
||||
|
||||
# 测试创建多个邮箱
|
||||
if domains:
|
||||
mailboxes = test_create_multiple_mailboxes(domains)
|
||||
|
||||
# 测试邮件接收功能
|
||||
if mailboxes:
|
||||
test_email_receiving(mailboxes)
|
||||
else:
|
||||
print("邮箱创建失败,无法测试邮件接收功能")
|
||||
else:
|
||||
print("域名创建失败,无法测试邮箱创建和邮件接收功能")
|
||||
|
||||
print_divider("测试完成")
|
||||
|
||||
except Exception as e:
|
||||
print(f"测试过程中发生错误: {str(e)}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user