outis:通过生成并发送伪造的"用户不存在"退信邮件来对抗 AI 垃圾邮件

Lobsters Hottest 工具

摘要

Outis 是一款开源工具,通过生成符合 RFC 3464 标准的伪造"用户不存在"退信消息,并经由你自己的域名 SMTP 服务器发送,来对抗 AI 生成的垃圾邮件,诱使发件人将你的地址从他们的列表中移除。

<p>Outis 会生成并发送一封伪造的"用户不存在"退信邮件,让你收到的那封邮件的发件人误以为你的地址并不存在。这并不是什么新想法:我在 1998–1999 年间就写过一个类似的程序,但我决定把它重新复活,因为它应该很适合应对最近由 AI 自动生成邮件的趋势——在这种场景下,发件人可能正期待收到回复;这有助于将你的邮件地址从他们的列表中移除。</p> <p>关于如何改进它,有什么建议吗?:)</p> <p><a href="https://lobste.rs/s/1h7qzj/outis_fight_ai_spam_by_generating_sending">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/10/01 16:28

dtonon/outis

来源:https://github.com/dtonon/outis

Outis

Outis 通过为收到的邮件生成一封伪造的“用户不存在“退信来对抗垃圾邮件,让发件人误以为你的地址不存在。对于近期 AI 自动生成的自动化邮件趋势,这种方式应该很有效——发件人往往期望收到回复,而 Outis 能帮助你从他们的名单中被清除。

Outis(Οὖτις)在希腊语中意为“无人“。在《奥德赛》中,奥德修斯在独眼巨人波吕斐摩斯面前自称“No one“,这样当失明的巨人呼救并大喊“有人在伤害我“时,其他独眼巨人便离开了。这个工具对你的邮箱做了同样的事:它告诉每一个询问的人,这里“没有人“。

退信是一封基于 RFC 3464 的投递状态通知,其格式仿照 Postfix:multipart/report,包含一个人类可读的部分、一个状态为 5.1.1 的 message/delivery-status 部分,以及作为 message/rfc822 附加的原始邮件。它会从 MAILER-DAEMON@ 以空信封发件人发送到原始邮件的 Return-Path(前提是 SMTP 服务器允许)。

已知限制

与 SMTP 会话中的真正 550 拒收不同,这封退信是在消息已被接收之后发出的,因此发件人的日志会显示投递成功,收件箱对任何重试仍然可用,而实际效果只会作用于收到并处理了该通知的那一个发件人。

要求

只有当退信来自你控制的域名时,它才具有可信度。如果可能,请使用该域名下的 SMTP 账号,以便你可以以 MAILER-DAEMON@... 的身份发信。消费级服务商(Gmail、iCloud 等)会改写 From 头,从而暴露你。

用法

go build -o outis cmd/outis/main.go

./outis init [domain]    # 添加或更新账号;密码存入系统钥匙串
./outis accounts         # 列出所有账号
./outis message.eml      # 预览,然后确认
./outis -c               # 从剪贴板读取邮件
./outis -n message.eml   # 演练运行,只打印输出
./outis -y -r [email protected] message.eml
./outis -a example.com -c   # 强制使用指定账号,而非匹配收件人
./outis inbox/           # 处理目录中的每个文件,整批只需一次确认
./outis -n -o out/ inbox/   # 演练运行,将每封退信写入 out/.bounce.eml
./outis -d inbox/        # 每封退信发送成功后删除对应文件

批量模式

参数可以是文件和目录的任意组合。目录会展开为其可见的常规文件(任意扩展名,不递归)。每个文件会各自匹配一个账号;无法解析或无法匹配的文件会被报告并跳过,其余文件继续处理;只要有任何失败,退出码就非零。

当输入超过一个时,不再显示完整的预览,而是为每个文件显示一行摘要,随后只需一次确认。

多账号

每个账号对应一个域名。退信会使用与原始邮件的某个收件人(Delivered-To、To 或 Cc)域名相匹配的账号来构建,因此发件人、邮件主机和 SMTP 服务器都归属于该域名。

如果没有账号匹配,或有多个账号匹配,请使用 --account。

[[accounts]]
domain = "example.com"
mta_host = "mail.example.com"
[accounts.smtp]
host = "smtp.example.com"
port = 587
username = "[email protected]"

[[accounts]]
domain = "other.org"
mta_host = "mx.other.org"
[accounts.smtp]
host = "smtp.other.org"
port = 465
username = "[email protected]"

共享抑制列表的服务商

某些服务商,尤其是 Amazon SES,维护着一份在其所有客户之间共享的抑制列表:一次硬退信会导致所有 SES 发件人在一段时间内无法向你的地址发送邮件。

对于 reply_to_from_domains 中列出的 Return-Path 域名,退信会改为发送到 From 头中的地址。默认值为 ["amazonses.com"],子域名同样匹配。设为 [] 可禁用此功能。

reply_to_from_domains = ["amazonses.com"]

配置

账号上的 envelope_from 可强制指定 SMTP 信封发件人,而不是依次尝试空发件人、MAILER-DAEMON@domain 和账号用户名。

配置文件位于 os.UserConfigDir()/outis/config.toml(macOS 上为 ~/Library/Application Support/outis,Linux 上为 ~/.config/outis)。可通过环境变量 OUTIS_CONFIG 覆盖。

相似文章

AI Emaily

Product Hunt

AI Emaily 是一个 AI 驱动的收件箱,能模仿你的风格自动撰写和回复。

7万AI智能体发送160万封邮件事件

Reddit r/artificial

iLands平台的AI智能体发送了超百万封未经请求的邮件,引发垃圾邮件投诉与法律担忧,同时引发了关于智能体责任机制与基础设施解决方案的讨论。