在项目开发时,我们往往会需要配置邮箱发送服务。但是在这之前,我们得要有一部分准备工作:
- 一个域名(任意服务商,有管理权限即可)
- 一个阿里云账号(开通服务时要用)
一、邮箱推送服务开通
进入邮箱推送的产品页面,点击申请开通:

之后点击右下角的立即开通,即可开通成功。
二、邮箱配置
进入邮件推送控制台,可以看到如下页面:
按照步骤一步步开通即可:
- 创建发信域名
- 创建发信地址
- 发送邮件

2.1 创建发信域名
点击控制台左边的“邮箱设置-发信域名”,然后点击右上角的“新建域名”,输入你要使用的域名。

这里建议使用主域名的二级域名:比如域名为 example.com,那么这里可以填写子域名 notify.example.com 。这样不会影响主域名企业邮箱的使用。
填写好之后,点击控制台里刚刚填写的域名右边的“配置”按钮,会出现如下界面:

你需要前往你购买域名的 DNS 控制台(如阿里云“云解析DNS”或腾讯云“DNSPod”),手动添加这 5条记录。
主机记录怎么填? 如果你的发信域名是
notify.你的域名.com,主机记录只需要填前缀(如notify或aliyundm.notify)。如果你填了notify.你的域名.com,最终会变成notify.你的域名.com.你的域名.com,导致验证失败。关于生效时间: 配置完成后,DNS 解析通常需要 5~10 分钟 才能生效(最慢可能需要 48 小时,但极少见)。
- 回到邮件推送控制台,点击 “验证”。
- 如果提示“验证失败”,请不要焦虑,喝杯水等 10 分钟后再试。
- 只有当状态变为 “验证通过” 后,才能进行下一步。
依次添加记录,添加完成之后,页面显示如下:

验证通过之后,该项完成
2.2 创建发信地址
点击邮件推送控制台左侧的“发信地址”,然后点击右侧的“新建发信地址”,填写如下信息:
- 发信域名:填写刚刚配置的域名
- 账号:自由配置
- 回信地址:选填,可以接受用户返回的邮箱信息
- 发信类型:选择触发邮件

配置之后,点击刚刚配置的项目的右侧的“设置SMTP密码”:密码需要记住,待会要用

3. 发送邮件
完成上述步骤就可以发送邮箱啦。这里我们使用Python来测试发送。
🛡️ 安全提示:在实际生产环境中,绝不建议将密码硬编码在代码里(如直接写在
.py文件中),防止代码泄露导致账号被盗。建议使用 环境变量 或 配置文件 来管理敏感信息。
下面是一个生产级可用的发送脚本,增加了详细的异常捕获,帮你快速定位问题:
import smtplib
import os
from email.mime.text import MIMEText
from email.utils import formataddr
# === 配置区域 ===
SMTP_SERVER = "smtpdm.aliyun.com" # 阿里云邮件推送专用服务器
SMTP_PORT = 465 # 必须使用 465 (SSL加密),阿里云云服务器默认封禁 25 端口
# 建议从环境变量获取密码,或者在本地测试时临时填入
# 在终端设置环境变量:export MAIL_PWD='你的密码'
SENDER_PASSWORD = os.getenv("MAIL_PWD", "在此处填入你的SMTP密码")
SENDER_EMAIL = "no-reply@notify.egooaia.com" # 你的发信地址
RECEIVER_EMAIL = "user@example.com" # 接收测试邮件的邮箱
def send_test_email():
try:
# 1. 构建邮件内容
msg = MIMEText("恭喜!你的邮件推送服务配置成功了。\n这是测试验证码:888888", "plain", "utf-8")
msg['From'] = formataddr(["EgooAI 安全中心", SENDER_EMAIL])
msg['To'] = formataddr(["测试用户", RECEIVER_EMAIL])
msg['Subject'] = "【EgooAI】服务开通测试"
# 2. 连接服务器并发送 (使用 SMTP_SSL)
print(f"正在连接 {SMTP_SERVER}:{SMTP_PORT} ...")
server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
# 3. 登录验证
print("正在验证身份...")
server.login(SENDER_EMAIL, SENDER_PASSWORD)
# 4. 发送邮件
server.sendmail(SENDER_EMAIL, [RECEIVER_EMAIL], msg.as_string())
server.quit()
print("✅ 邮件发送成功!请检查收件箱(若未收到请检查垃圾箱)")
except smtplib.SMTPAuthenticationError:
print("❌ 认证失败:用户名或密码错误。")
print(" -> 请检查控制台‘发信地址’是否设置了 SMTP 密码,注意不是阿里云登录密码。")
except smtplib.SMTPConnectError:
print("❌ 连接失败:无法连接到服务器。")
print(" -> 请检查是否使用了 465 端口(不要用 25)。")
except Exception as e:
print(f"❌ 发送发生未知错误: {e}")
print(" -> 常见原因:1. 域名解析未生效;2. 控制台未配置 IP 白名单(如有)。")
if __name__ == "__main__":
send_test_email()
代码关键点解析:
- 端口选择 (
465):代码使用了smtplib.SMTP_SSL配合465端口。这是因为阿里云(以及大多数云厂商)为了防止滥发垃圾邮件,默认封禁了传统的25端口。如果你尝试用 25 端口,代码会一直卡住直到超时。 - 环境变量 (
os.getenv):示例展示了如何从系统环境变量读取密码,这是一种更安全的开发习惯。当然,你在本地快速测试时,也可以直接将默认值替换为真实密码。 - 异常处理 (
try-except):- SMTPAuthenticationError:专门捕获密码错误,提示你去重置 SMTP 密码。
- SMTPConnectError:专门捕获网络不通,提示你检查端口。
三、开发者避坑指南
配置完成只是第一步,在实际业务上线前,请务必关注以下 3 个关键点,否则可能会导致验证码延迟或发送失败。
1. 严选“触发邮件”类型
在创建发信地址时,务必选择“触发邮件”,千万不要选“批量邮件”。
- 触发邮件:拥有最高优先级,适合验证码、订单通知、密码重置等,系统会极速推送。
- 批量邮件:主要用于营销推广,优先级低,可能会进入阿里云的发送队列排队,导致用户过了几分钟才收到验证码,严重影响体验。
2. 留意每日发送额度
新开通的邮件推送服务,默认每日发送额度通常为 2000 封。每日免费额度200封,如有需要可进行购买。
- 机制:阿里云会根据你的发信质量(无效地址率、垃圾邮件举报率)动态调整这个额度。质量越高,额度涨得越快。
- 建议:如果你的业务上线初期预估量级很大,请提前在控制台查看额度,或者通过工单申请提额,以免业务高峰期邮件发不出去。
3. “回信地址”不要留空
虽然“回信地址”是选填项,但强烈建议填入一个真实的客服邮箱(如 support@example.com)。
- 原因:你发出去的邮件发件人通常是
no-reply,但依然会有很多用户遇到问题时直接点击“回复”。 - 后果:如果你不填回信地址,用户的回复会直接丢失;填了之后,阿里云会自动把用户的回复转发到你填写的这个客服邮箱里,让你不错过任何用户反馈。
Comments NOTHING