You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试环境Sandbox/catch(catchall)邮件配置:拦截外发邮件至指定邮箱

测试环境邮件自动转发到单个邮箱的解决方案

当然可以!这种测试场景太普遍了——既不想让测试邮件跑到真实用户手里,又得验证邮件的目标地址、内容是不是完全正确,包括你输入真实邮箱的情况。给你几个实用的方案:

1. 邮件服务器层面重定向(最推荐)

如果你们测试环境用的是自建邮件服务器(比如Postfix、Exim),直接在服务器上配置规则,就能让所有 outgoing 邮件不管目标是谁,最终都转发到你的测试邮箱,而且原始收件人信息会完整保留(你能在邮件的To:字段看到原本要发的地址)。

举个Postfix的配置例子:

  • 打开main.cf,添加或修改:
    virtual_alias_maps = hash:/etc/postfix/virtual
    
  • 编辑/etc/postfix/virtual文件,添加一行全局匹配规则:
    /.+/ your-test-email@example.com
    
  • 执行命令让配置生效:
    postmap /etc/postfix/virtual
    postfix reload
    

这样所有测试环境发出的邮件都会自动转到你的测试邮箱,你能完整验证邮件的生成逻辑,完全不用担心泄露。

2. 应用层拦截替换(适合没法改邮件服务器的场景)

如果没法操作邮件服务器,可以在应用代码里加个测试环境专属的拦截逻辑:发送邮件时,把原始收件人、抄送人信息放到邮件正文或自定义邮件头里,再把实际收件人换成测试邮箱。

比如用Python的示例代码:

import smtplib
from email.mime.text import MIMEText

def send_email(to_address, subject, body, env="production"):
    if env == "test":
        # 测试环境:保留原始收件人信息,转发到测试邮箱
        modified_body = f"⚠️ 测试环境邮件 | 原始收件人: {to_address}\n\n{body}"
        actual_to = "your-test-email@example.com"
        subject = f"[测试] {subject}"
    else:
        # 生产环境:正常发送
        modified_body = body
        actual_to = to_address

    # 构建并发送邮件
    msg = MIMEText(modified_body)
    msg['Subject'] = subject
    msg['To'] = actual_to

    # 这里替换成你的邮件服务器配置
    with smtplib.SMTP('your-smtp-server', 587) as server:
        server.starttls()
        server.login('your-username', 'your-password')
        server.send_message(msg)

这样你收到测试邮件时,一眼就能看到原本要发送的真实地址,同时不会真的发给用户。

3. 用邮件测试工具捕获邮件

还有个更省心的办法:用Mailhog或Mailcatcher这类工具,它们会在测试环境搭建一个本地的“假邮件服务器”,所有应用发送的邮件都会被捕获到工具的Web界面里,你可以在界面里查看每封邮件的原始收件人、内容、附件,完全不会发送到真实邮箱。

配置也很简单:只需要把应用的SMTP服务器地址改成这些工具的地址(比如Mailhog默认是localhost:1025),就能自动捕获所有测试邮件了。

最后提醒

  • 一定要通过环境变量控制这些逻辑的开关,确保只在测试环境启用,千万别误用到生产环境!
  • 如果是团队测试,可以把测试邮箱设为共享邮箱,方便大家一起查看验证。

内容的提问来源于stack exchange,提问作者realbart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:06:56