邮件服务器配置指南

概述

本文档说明如何在 mbe.hi-maker.com 配置邮件服务器,支持 MBE 系统的邮件发送功能。

方案选择

方案一:使用第三方 SMTP 服务(推荐)

优点:

  • ✅ 配置简单,无需维护邮件服务器
  • ✅ 高可靠性,专业服务商保障
  • ✅ 避免被标记为垃圾邮件
  • ✅ 无需配置 DNS 记录(MX、SPF、DKIM 等)

推荐服务商:

  • 阿里云邮件推送(国内推荐)
  • SendGrid(国际推荐)
  • 腾讯企业邮箱
  • 网易企业邮箱

方案二:自建邮件服务器

优点:

  • ✅ 完全控制
  • ✅ 无发送量限制
  • ✅ 可自定义域名邮箱

缺点:

  • ❌ 配置复杂
  • ❌ 需要配置 DNS 记录(MX、SPF、DKIM、DMARC)
  • ❌ 容易被标记为垃圾邮件
  • ❌ 需要维护服务器

推荐方案:使用阿里云邮件推送

📖 详细配置指南:请查看 阿里云邮件推送配置指南 获取完整的配置步骤。

快速开始

1. 开通阿里云邮件推送服务

  1. 登录 阿里云控制台
  2. 搜索并进入 邮件推送 产品
  3. 开通服务(免费版每天 200 封)
  4. 创建发信地址:noreply@mbe.hi-maker.com
  5. 设置 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. 使用场景

  • 用户注册验证
  • 密码重置
  • 系统通知
  • 开发者审核通知
  • 账单提醒

安全建议

  1. 使用强密码:SMTP 密码应足够复杂
  2. 启用 TLS/SSL:始终使用加密连接
  3. 限制发送频率:防止被标记为垃圾邮件
  4. 监控发送状态:跟踪发送成功率和失败原因
  5. 定期更新:保持邮件服务器软件最新

测试验证

测试邮件发送

# 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:

  1. 配置 SPF、DKIM、DMARC 记录
  2. 使用专业的邮件服务商
  3. 避免使用敏感词汇
  4. 保持合理的发送频率

Q: 如何提高邮件送达率?

A:

  1. 使用信誉良好的邮件服务商
  2. 正确配置 DNS 记录
  3. 维护发信地址的白名单
  4. 监控退信率和投诉率

Q: 免费额度不够用怎么办?

A:

  • 阿里云邮件推送:升级到付费版(按量付费)
  • SendGrid:免费版每天 100 封,付费版更多
  • 考虑自建邮件服务器(需要更多维护工作)

参考资源