邮件服务器配置指南
概述
本文档说明如何在 mbe.hi-maker.com 配置邮件服务器,支持 MBE 系统的邮件发送功能。
方案选择
方案一:使用第三方 SMTP 服务(推荐)
优点:
- ✅ 配置简单,无需维护邮件服务器
- ✅ 高可靠性,专业服务商保障
- ✅ 避免被标记为垃圾邮件
- ✅ 无需配置 DNS 记录(MX、SPF、DKIM 等)
推荐服务商:
- 阿里云邮件推送(国内推荐)
- SendGrid(国际推荐)
- 腾讯企业邮箱
- 网易企业邮箱
方案二:自建邮件服务器
优点:
- ✅ 完全控制
- ✅ 无发送量限制
- ✅ 可自定义域名邮箱
缺点:
- ❌ 配置复杂
- ❌ 需要配置 DNS 记录(MX、SPF、DKIM、DMARC)
- ❌ 容易被标记为垃圾邮件
- ❌ 需要维护服务器
推荐方案:使用阿里云邮件推送
📖 详细配置指南:请查看 阿里云邮件推送配置指南 获取完整的配置步骤。
快速开始
1. 开通阿里云邮件推送服务
- 登录 阿里云控制台
- 搜索并进入 邮件推送 产品
- 开通服务(免费版每天 200 封)
- 创建发信地址:
noreply@mbe.hi-maker.com - 设置 SMTP 密码
2. 配置 DNS 记录(提高送达率)
在 hi-maker.com 的 DNS 管理中添加:
SPF 记录:
类型: TXT
主机记录: @
记录值: v=spf1 include:spf1.dm.aliyun.com include:spf2.dm.aliyun.com ~all
DKIM 记录: 从阿里云控制台获取并添加(详见详细指南)
DMARC 记录(可选):
类型: TXT
主机记录: _dmarc
记录值: v=DMARC1; p=none; rua=mailto:admin@hi-maker.com
3. 配置 MBE 系统
在 .env 文件中添加:
SMTP_HOST=smtpdm.aliyun.com
SMTP_PORT=465
SMTP_USE_TLS=true
SMTP_USER=noreply@mbe.hi-maker.com
SMTP_PASSWORD=your-smtp-password
SMTP_FROM_EMAIL=noreply@mbe.hi-maker.com
SMTP_FROM_NAME=MBE系统
4. 测试配置
python scripts/test_email.py
配置 MBE 系统
1. 更新环境变量
编辑 .env 文件,添加邮件配置:
# ==================== 邮件配置 ====================
SMTP_HOST=smtpdm.aliyun.com
SMTP_PORT=465
SMTP_USE_TLS=true
SMTP_USER=noreply@mbe.hi-maker.com
SMTP_PASSWORD=your-smtp-password
SMTP_FROM_EMAIL=noreply@mbe.hi-maker.com
SMTP_FROM_NAME=MBE系统
2. 更新配置文件
邮件配置已添加到 src/config.py,系统会自动读取环境变量。
3. 测试邮件发送
使用提供的测试脚本验证配置:
python scripts/test_email.py
方案二:自建邮件服务器(Postfix + Dovecot)
如果选择自建邮件服务器,可以使用 Docker 部署:
1. 添加邮件服务器到 Docker Compose
# 在 docker-compose.prod.yml 中添加
mailserver:
image: tvial/docker-mailserver:latest
container_name: mbe-mailserver
hostname: mail.mbe.hi-maker.com
domainname: hi-maker.com
ports:
- "25:25" # SMTP
- "143:143" # IMAP
- "465:465" # SMTPS
- "587:587" # Submission
- "993:993" # IMAPS
volumes:
- maildata:/var/mail
- mailstate:/var/mail-state
- ./mailserver/config:/tmp/docker-mailserver
environment:
- ENABLE_SPAMASSASSIN=1
- ENABLE_CLAMAV=1
- ENABLE_FAIL2BAN=1
- ENABLE_POSTGREY=1
- ONE_DIR=1
- PERMIT_DOCKER=network
cap_add:
- NET_ADMIN
- SYS_PTRACE
restart: always
networks:
- mbe-network
2. 配置 DNS 记录
MX 记录
类型: MX
主机记录: @
记录值: mail.mbe.hi-maker.com
优先级: 10
TTL: 600
A 记录
类型: A
主机记录: mail
记录值: (服务器IP地址)
TTL: 600
SPF 记录
类型: TXT
主机记录: @
记录值: v=spf1 mx a:mail.mbe.hi-maker.com ~all
TTL: 600
DKIM 记录
从邮件服务器生成 DKIM 密钥后添加。
3. 配置防火墙
开放邮件服务器端口:
- 25 (SMTP)
- 465 (SMTPS)
- 587 (Submission)
- 143 (IMAP)
- 993 (IMAPS)
邮件发送功能实现
1. 创建邮件服务模块
系统已包含邮件发送功能的基础配置,需要实现具体的发送逻辑。
2. 使用场景
- 用户注册验证
- 密码重置
- 系统通知
- 开发者审核通知
- 账单提醒
安全建议
- 使用强密码:SMTP 密码应足够复杂
- 启用 TLS/SSL:始终使用加密连接
- 限制发送频率:防止被标记为垃圾邮件
- 监控发送状态:跟踪发送成功率和失败原因
- 定期更新:保持邮件服务器软件最新
测试验证
测试邮件发送
# scripts/test_email.py
import asyncio
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
from dotenv import load_dotenv
load_dotenv()
async def test_email():
smtp_host = os.getenv("SMTP_HOST")
smtp_port = int(os.getenv("SMTP_PORT", "465"))
smtp_user = os.getenv("SMTP_USER")
smtp_password = os.getenv("SMTP_PASSWORD")
smtp_from = os.getenv("SMTP_FROM_EMAIL", smtp_user)
msg = MIMEMultipart()
msg['From'] = smtp_from
msg['To'] = "test@example.com" # 替换为你的测试邮箱
msg['Subject'] = "MBE 邮件服务器测试"
body = """
这是一封测试邮件。
如果您收到此邮件,说明邮件服务器配置成功!
MBE 系统
"""
msg.attach(MIMEText(body, 'plain', 'utf-8'))
try:
if smtp_port == 465:
server = smtplib.SMTP_SSL(smtp_host, smtp_port)
else:
server = smtplib.SMTP(smtp_host, smtp_port)
server.starttls()
server.login(smtp_user, smtp_password)
server.send_message(msg)
server.quit()
print("✅ 邮件发送成功!")
except Exception as e:
print(f"❌ 邮件发送失败: {e}")
if __name__ == "__main__":
asyncio.run(test_email())
常见问题
Q: 邮件被标记为垃圾邮件怎么办?
A:
- 配置 SPF、DKIM、DMARC 记录
- 使用专业的邮件服务商
- 避免使用敏感词汇
- 保持合理的发送频率
Q: 如何提高邮件送达率?
A:
- 使用信誉良好的邮件服务商
- 正确配置 DNS 记录
- 维护发信地址的白名单
- 监控退信率和投诉率
Q: 免费额度不够用怎么办?
A:
- 阿里云邮件推送:升级到付费版(按量付费)
- SendGrid:免费版每天 100 封,付费版更多
- 考虑自建邮件服务器(需要更多维护工作)