前阵子在几个技术群里连着被人问到同一个问题某主流邮箱服务怎么关闭垃圾邮件过滤问的人身份挺杂——有做运维的告警邮件被吞了半夜没人知道有做独立开发的注册验证码和账单通知收不到也有普通用户等了三天才发现重要通知躺在垃圾箱里。大家的直觉都一样这东西误判这么多干脆给我关了。但真去翻设置页会发现根本找不到一个叫关闭垃圾邮件过滤的开关。这件事的麻烦之处在于垃圾邮件过滤不是一个功能而是一整条链路上的多道关卡叠加出来的结果涉及连接层信誉、身份认证、内容打分、用户反馈任何一环都不是单个按钮能拔掉的。这篇就围绕关闭垃圾邮件过滤这个需求把整条链路拆开讲清楚哪些环节能关、怎么关、关了之后用什么方式兜底以及发送端怎样做才能让自己的邮件压根不进垃圾箱。不管你是被误判烦透的普通用户还是要保证通知送达的开发者都能在这里找到能直接抄的做法。1. 先把需求拆开大家想关的到底是哪一层很多人一上来就问怎么关其实这个问题往下拆至少对应三种完全不同的诉求对应的解法也完全不一样。不先分清自己属于哪一类很容易在设置页里绕半天最后发现改的不是地方。我自己最早也踩过这个坑以为把垃圾邮件文件夹的自删除关掉就万事大吉结果邮件该被拦还是被拦。1.1 三类真实诉求对应三套不同做法第一类是收件方误判。典型场景是银行账单、平台通知、学校或公司发的批量邮件因为发件方用了短链接、图片多文字少、或者 IP 信誉一般被打分模型判进了垃圾箱。这类人的真实诉求其实是我信任的发件人别拦我解法是白名单和过滤器规则属于收件端精细放行。第二类是开发者或运维的告警链路。监控系统发出的告警邮件往往格式极简、正文很短、还带一堆链接正好踩中垃圾邮件的特征画像。凌晨两点数据库挂了告警进了垃圾箱第二天上班才发现这种事故我见过不止一次。这类需求的核心是保证特定来源 100% 到达解法除了收件端放行还要在发送端把认证做干净双管齐下。第三类是发送方视角。做产品通知、营销触达、事务性邮件的人烦恼的是我的邮件在别人的垃圾箱里。这个诉求根本不是关过滤而是让自己的邮件在别人的过滤体系里拿到高分。方向完全反过来是去研究 SPF、DKIM、DMARC、IP 预热、内容规范这些东西。提示动手之前先问自己一句——我是收不到别人的信还是别人收不到我的信这两件事的技术路径几乎没有交集混在一起想会浪费大量时间。1.2 为什么服务商坚决不给一个全局开关从产品设计角度看全局关闭过滤对服务商来说是笔亏本买卖。垃圾邮件里夹杂的钓鱼链接和恶意附件是账号被盗、数据泄露的主要入口之一一旦用户手滑关掉过滤出了事责任很难划清。所以主流邮箱的做法高度一致不提供关闭过滤的开关但提供足够多的局部豁免手段——白名单、过滤器、标记非垃圾、关闭自动清理。这些手段组合起来实际效果接近对我关心的邮件关闭过滤同时把风险控制在你明确指定的范围内。理解了这层设计意图后面的操作思路就顺了不要去对抗整个过滤体系而是用规则把你要的信从体系里捞出来。这个思路转变很关键它决定了你后面是跟设置页较劲还是花十分钟配好规则然后该干嘛干嘛。2. 过滤是怎么工作的知道原理才知道该改哪想精准放行得先知道邮件在到达你收件箱之前经历了什么。很多人以为过滤就是看标题里有没有中奖两个字这个认知偏差会导致大量无效操作。实际上一封邮件从发出到落地至少要过五道关卡每一道都可能独立把你拦下来。2.1 从连接层到内容层的五道关卡连接层是第一道。收件服务器在跟对方建立连接时就会看发送方 IP 的历史信誉、有没有做反向域名解析、单位时间内的连接频率、握手时的身份声明是否规范。一个刚启用、没有任何发送历史的 IP哪怕内容再干净也会被天然打低分。这也是为什么新建的发信服务前几天总是进垃圾箱。身份认证层紧随其后。SPF 校验发信 IP 是否在域名声明的授权列表里DKIM 校验邮件内容的签名有没有被篡改DMARC 则是前两者的策略声明告诉收件方如果校验失败你该怎么处理。这三项如果缺了或者配错了邮件大概率直接判负。名单层包括实时黑名单和灰名单。前者是全网共享的坏 IP 名单后者是第一次来的陌生发件方先延迟几分钟再放行用于对抗群发。很多企业邮箱还会额外接入自己的信誉库。内容层才是大多数人印象里的过滤。关键词命中、贝叶斯概率模型、URL 信誉、附件哈希比对、图片 OCR 识别全在这一层。注意它是打分制而不是一票否决制一封邮件身上可能同时挂着五六个小问题分数累加到阈值以上才判为垃圾。行为层是最容易被忽略的一层。用户点了这是垃圾邮件还是这不是垃圾邮件会反馈进模型影响后续同类邮件的判定。同一发件方短时间内被大量用户标记整个域名的信誉都会掉。所以你会看到一种诡异现象某个通知邮件昨天还能收到今天突然全进垃圾箱了很可能是因为别的用户批量点了举报。2.2 打分模型与阈值正常邮件为什么也会被拦理解了打分制很多看起来很正常却被拦的案例就解释得通了。一封普通的促销通知邮件可能同时具备这些特征发送 IP 较新2 分、正文里全是图片2 分、用了短链接3 分、含限时免费这类高频词1 分、没有纯文本版本1 分。单看每一条都不算致命加起来就越过了阈值。反过来一封标题里带发票、正文只有一行字、附件是个 PDF 的邮件被判垃圾很可能是因为发件域名没配 SPF或者 PDF 里嵌了外链。排查误判的第一步不是改内容而是去看邮件的原始头部信息里面通常有服务商给出的判定原因码。主流邮箱都能在邮件详情里找到原始邮件或显示原始信息的入口点开能看到 SPF、DKIM、DMARC 的校验结果和垃圾分值这比瞎猜高效得多。2.3 白名单和信誉体系最省力的那条路在所有手段里把发件人加入联系人或者白名单是性价比最高的一招。它的作用不是绕过某一层过滤而是直接抬升这个发件人在你账号下的信誉权重很多邮箱会把白名单联系人的邮件直接跳过内容层打分。实测下来同样一封被误判的通知邮件加进通讯录之后基本就稳定进收件箱了。企业邮箱层面还有域级别的白名单和信任列表管理员可以把合作方的整个域名加进信任列表效果比个人白名单更彻底。代价是管理成本高加错了等于给全公司开了个后门所以这块通常需要审批流程。3. 实操方案一用过滤器精准放行风险最小如果你只是某几个发件人的信老被拦这是最推荐的方案。改动范围小、可回滚、不牺牲整体安全性配置一次管很久。我自己的主力邮箱里常驻着七八条这类规则覆盖告警系统、账单通知、几个常用平台的验证码邮件几年下来基本没再漏过。3.1 创建永不进垃圾箱的过滤器主流邮箱的过滤器入口一般藏在设置的规则过滤器收件规则分类下逻辑都是条件 动作的组合。配置思路可以归结成三步定条件发件人地址包含某个域名或者主题包含某个固定前缀或者邮件头部包含某个自定义字段。定动作勾选永不标记为垃圾邮件同时可以附加打上标签标为重要跳过收件箱直接归档。验证发一封测试邮件确认它落在收件箱而不是垃圾箱并且标签正确。条件尽量写具体。如果你写发件人包含 example那所有地址里带 example 的发件人都会被放行范围太宽。更稳的写法是发件人包含 某域名.com用完整域名做锚点。有些服务支持发件人恰好是那就用精确匹配别用包含。3.2 参数细节和几个高频易错点第一过滤器通常只对新到达的邮件生效。历史邮件不会因为你新建了规则就自动从垃圾箱里爬出来需要手动去垃圾箱里搜一次、全选、点非垃圾邮件。这个动作还有一个副作用它会向模型投喂正向反馈帮助后续同类邮件少被误判。第二注意规则顺序。多数邮箱的过滤器是自上而下依次执行的如果上面有一条所有含某关键词的邮件归档的规则下面那条标为重要可能就没机会跑了。新建规则时留意一下它在列表里的位置必要时手动上移。第三不支持正则和通配符。绝大多数消费级邮箱的过滤器只提供包含不包含等于开头是这几种匹配方式指望写复杂表达式是不现实的。遇到需要复杂判断的场景得靠客户端侧规则或者脚本这部分放到第 4 节讲。第四同一发件人可能有多个发信地址。通知类邮件经常用 no-reply 发信、用 bounce 收退信、用 newsletter 发营销域是一样的但前缀不同。用域名做条件能一次覆盖用完整地址就得配好几条。提示配完规则别急着关页面去垃圾箱里翻一遍最近一周的误判邮件看看有没有同类发件人被漏掉。一次性把常驻发件方都收进白名单比以后一封一封捞要省事得多。4. 实操方案二把垃圾箱晾在一边全量收进收件箱有些场景下逐条配过滤器不现实。比如你手上有个邮箱专门用来接各种系统的通知来源极其分散或者你要做邮件数据分析需要拿到全量原始邮件又或者你就是单纯不想再分两个文件夹看。这时候思路要切换成我不指望服务端放行我自己把所有信拉下来处理。4.1 关闭垃圾邮件文件夹的可行做法大部分主流邮箱不提供真正意义上的关闭垃圾邮件文件夹但有几个等效操作设置自动清理规则把垃圾邮件超过 N 天自动删除改成永不删除。这一步是保命的很多人栽在这上面——邮件在垃圾箱里躺了 30 天被系统清掉等发现的时候已经找不回来了。配一条匹配所有邮件的放行规则条件写发件人包含 覆盖面尽量大动作选永不标记为垃圾邮件。部分服务允许这种写法效果接近全局放行。但要注意有些服务会忽略过于宽泛的规则或者干脆不允许保存得试一下。关闭疑似垃圾邮件隔离类功能企业邮箱里常有隔离区的概念管理员可以调整隔离策略把某些域或某些类型的邮件从隔离改为直接投递。需要说清楚的是这些操作的实际效果因服务商而异且随版本更新会变。我的建议是别追求完全关闭而是追求垃圾邮件不会在我不知情的情况下消失。这个目标更现实也更容易实现。4.2 客户端侧过滤把判断权拿回本地真正的关闭服务端过滤做不到但可以做到服务端过滤结果对我不产生影响——方法是让邮件客户端把所有文件夹都拉下来包括垃圾邮件文件夹然后用本地规则重新分类。这样服务端的判断还在但它说了不算。以常见的桌面客户端为例配置要点是账户设置里勾选订阅垃圾邮件文件夹或者把垃圾邮件文件夹映射到一个本地目录然后建本地规则按发件人、主题、头部字段做分类把服务端判为垃圾的信重新捞回收件箱。这个方案的好处是规则完全由你控制支持更复杂的匹配逻辑而且可以跨多个邮箱账号统一处理。代价是客户端必须保持运行才能持续处理手机端和网页端看到的结果仍然是服务端的那一套。所以它更适合那种固定在一台机器上处理邮件的工作方式不适合多设备漫游。4.3 用脚本拉全量邮件适合做监控和数据分析如果你的目标是程序化地拿到全部邮件标准做法是走 IMAP 或者服务商提供的邮件 API。IMAP 的好处是通用、几乎所有邮箱都支持关键是不要只拉收件箱要拉全量或者至少把垃圾邮件文件夹也包含进来。下面是一个最小可用的拉取思路用 Python 的 imaplib 举例只演示连接和遍历文件夹的部分import imaplib, email # 认证信息建议走环境变量别硬编码 M imaplib.IMAP4_SSL(imap.example.com, 993) M.login(userexample.com, app-specific-password) # 列出所有文件夹找出垃圾邮件相关的那个 status, folders M.list() print(folders) # 分别处理收件箱和垃圾邮件文件夹 for box in [INBOX, Junk]: M.select(box, readonlyTrue) status, data M.search(None, ALL) for num in data[0].split()[-50:]: # 先取最近 50 封做验证 _, msg_data M.fetch(num, (RFC822)) msg email.message_from_bytes(msg_data[0][1]) print(box, msg.get(From), msg.get(Subject)) M.logout()几个实操要点认证优先用应用专用密码而不是账号主密码很多服务在开启两步验证后主密码走 IMAP 会直接失败拉取频率控制好SEARCH ALL在大邮箱上很重配合日期条件比如SINCE 01-Jan-2025能显著降低开销fetch的时候如果只关心头部用BODY.PEEK[HEADER]而不是RFC822能少传一大截数据。拿到全量邮件之后怎么处理就是你的事了。我见过有人用这套思路做了一个本地归档库按发件域索引配合关键词搜索比网页端好用得多。也见过有人拿来做退信统计把垃圾箱里的退信捞出来分析发信质量。5. 实操方案三从发送端解决让邮件根本不被判为垃圾前面两节都是收件方视角。如果你自己就是发信方那最彻底的做法不是让收件人给你开白名单——那不现实你不可能要求每个用户都去配规则——而是把自己的发信质量做到位。这部分内容我踩的坑最多也是我认为最值得投入的地方。5.1 SPF、DKIM、DMARC三个 DNS 记录决定生死这三样东西是邮件身份认证的基础设施缺一个都会掉分。它们的配置本质上是往域名 DNS 里加几条 TXT 记录。SPF声明哪些 IP 有权用我这个域名发信。写法大致是这样example.com. TXT vspf1 ip4:203.0.113.10 include:_spf.mailprovider.com -allip4:后面是你自己的发信 IPinclude:引用第三方发信服务的授权段-all表示不在这份名单里的 IP 一律视为伪造。最后这个参数很多人写成~all软失败测试阶段可以用正式上线建议收紧到-all。注意 SPF 记录只能有一条多条会导致校验直接失败这是最经典的低级错误。DKIM是给邮件内容签名。发信服务会给你一对密钥公钥按指定格式挂到 DNS 的selector._domainkey.example.com上私钥由服务端持有用于签名。收件方拿到邮件后用 DNS 里的公钥验签内容被改过就验不过。这个配置通常是发信服务商后台一键生成你只需要把给定的记录贴进 DNS。DMARC是策略声明挂在_dmarc.example.com上_dmarc.example.com. TXT vDMARC1; pnone; ruamailto:dmarcexample.com; pct100pnone是观察模式只收集报告不处置pquarantine是让校验失败的邮件进垃圾箱preject是直接拒收。强烈建议从 none 开始跑两周看看报告里有哪些 IP 在冒用你的域名发信把它们梳理清楚再逐步收紧。直接上 reject 有个风险公司内部可能有一堆老系统在用这个域名发通知你没盘点全一收紧全断了。5.2 内容层面的避坑清单认证配好只是及格线内容层还有一堆细节决定你能不能进收件箱。下面这些是我在实际项目里总结出来的高频雷区雷区具体表现建议做法短链接正文里大量使用短链服务生成的链接用自己的域名做跳转或直接给完整链接图多字少整封邮件是一张大图几乎没有文本保证纯文本版本存在图文比例控制在合理范围附件类型直接发 exe、加密 zip、html 附件改为发链接让对方自行下载标题用语全大写、多个感叹号、夸张促销词平实描述标题长度控制在 50 字符内缺少退订批量邮件没有退订入口加一键退订头List-Unsubscribe字段结构脏HTML 里嵌套一堆内联样式、注释用规范的邮件模板压缩体积还有一条容易被忽略发件人地址和信封发件人Return-Path要保持同域。有的系统用 A 域名做显示名、用 B 域名做实际投递收件方一比对发现不一致直接扣分。这个在自建发信服务里尤其常见。5.3 发送节奏和退信处理新域名别一口气群发再干净的邮件从一个全新域名、全新 IP 上一天发一万封也必然被拦。发信信誉是养出来的行业里的通行做法是预热第一周每天发几百封优先发给最活跃、最可能打开的用户观察打开率和投诉率逐步翻倍两三周后再上到目标量级。退信处理同样重要。硬退信地址不存在要立即从列表里剔除反复往无效地址发信会严重拉低 IP 信誉。软退信对方邮箱满了、临时故障可以重试两三次间隔拉长。投诉率这个指标要盯紧超过千分之一就该停下来检查内容了有些发信平台会直接限流。6. 关掉过滤之后风险怎么兜底聊了这么多放行手段有必要把话说回来垃圾邮件过滤确实烦人但它挡掉的东西也是真的脏。我自己做过一个统计把某个小号邮箱的垃圾箱翻了一遍三百多封里有将近一半带钓鱼链接二十多封带恶意附件。所以任何放行操作都应该配一个兜底机制别把自己裸奔在风险里。6.1 关闭过滤的真实代价最容易中招的是仿冒邮件。攻击者会把发件人显示名改成你熟悉的名字把地址伪装成相似域名比如把字母 o 换成数字 0正文里放一个重新登录验证的链接。如果过滤被完全关掉这类邮件会直接躺进你的收件箱而且看起来跟真的一模一样。SPF 和 DKIM 能在服务端帮你挡掉一大部分但它们不是万能的——攻击者如果用了自己的域名发信认证是完全合法的只是显示名在骗人。第二类风险是附件投毒。带宏的文档、伪装成 PDF 的可执行文件、双重扩展名这些是老套路但仍然有效。放行全部邮件等于把这些东西直接送到用户面前。第三类是账号层面的连锁反应。如果放行规则写得过宽或者在某些场景下把整个域加进了信任列表而这个域里恰好有个被攻陷的账号在往外发垃圾你这边会照单全收。6.2 分级放行的思路只关你不需要的那一层比较稳妥的做法是分层处理而不是一刀切身份认证层永远不要关。SPF、DKIM、DMARC 校验失败的信无论内容看着多正常都应该保持拦截或者至少隔离。这一层挡的是伪造跟误判是两回事。内容层按发件人放行。只对你明确信任的发件人关闭内容打分其他来源保持默认策略。这就是第 3 节讲的过滤器思路。隔离优于删除。能配成进隔离区等人工确认的就别配成直接删除。隔离区虽然麻烦一点但至少留了找回的余地。定期复查放行规则。半年回头看一眼自己配了哪些规则有没有已经不适用的、范围过宽的及时清理。规则是会沉淀的不清理早晚出问题。提示如果放行之后收到的邮件里有从未见过的发件方别急着点链接。把鼠标悬停在链接上看实际地址或者直接把邮件头里的原始信息拉出来看 Return-Path 和 SPF 结果三秒钟的事能省掉很多麻烦。7. 常见问题与排查实录这部分是我这些年被问得最多的问题整理成速查表遇到类似症状可以直接对号入座。7.1 高频问题速查表症状可能原因处理方向配了过滤器邮件还是进垃圾箱规则条件写太窄或发件人用了多个地址把条件放宽到域名级别检查是否有多个发信地址规则建好了历史邮件没变化过滤器只对新邮件生效去垃圾箱手动全选标为非垃圾邮件加进白名单后过几天又进垃圾箱发件方 IP 信誉恶化或内容特征变化结合域名白名单同时联系发件方检查认证配置同一发件人有人能收到有人收不到各账号的反馈数据不同模型判定有差异让收不到的人手动标一次非垃圾喂正面样本邮件在垃圾箱里彻底找不到自动清理已删除或被隔离区拦截检查隔离区、检查自删除设置、联系管理员查日志自己发的邮件全进垃圾箱SPF/DKIM/DMARC 缺失或不一致用在线检测工具跑一遍认证逐项修复换了个发信服务后突然大量退信新 IP 无信誉或未做预热降低发送量分批预热检查是否上了黑名单手机端和网页端看到的结果不一样客户端只同步了部分文件夹检查客户端的文件夹订阅设置7.2 几条踩出来的经验别指望一次配好永久有效。过滤模型是持续学习的发信方的基础设施也在变。我有一条规则用了两年多某天突然失效排查发现是对方把发信服务商换了IP 段全变了原来的域名放行还在但内容层又开始扣分。建议每季度花十分钟过一遍自己常驻的白名单和规则顺手更新。测试邮件要用真实场景。很多人拿一封自己手写的、只有一行test的邮件去测结果当然进收件箱然后误以为修好了。真正该测的是生产环境里的那封邮件——同样的 HTML 结构、同样的链接、同样的附件、同样的发信通道。用真实样本测才能暴露真实问题。原始邮件头是最快的诊断入口。遇到任何为什么进垃圾箱的问题第一步永远是看头部信息找Authentication-Results、X-Spam-Score、X-Spam-Status这类字段。里面会明确写 SPF 是 pass 还是 fail、DKIM 签名有没有验过、垃圾分值是多少、命中了哪些规则。有了这些信息再谈优化否则就是盲猜。发送量的突变比内容更容易触发拦截。一个日发几百封的域名突然发到几万封哪怕内容一字未改也会被当成异常流量处理。做活动、发公告之前提前几天把量级慢慢抬上去比临时抱佛脚有效得多。收件方那边的举报按钮比你想的更有分量。一个用户点举报影响的可能不只是这一封信而是整个发件域在那一批用户里的信誉。所以批量邮件一定要做退订而且要做得显眼、好用让不想收的人能顺利退出而不是被逼着去点举报。聊到最后我个人在实际操作里的体会是所谓关闭垃圾邮件过滤本质上是把判断权从服务商的模型手里拿回到自己手里。模型是给大众平均需求设计的它不认识你的告警系统也不知道那封看起来像广告的邮件其实是你的账单。所以真正有效的做法从来不是找一个开关把它关掉而是用白名单、过滤器、客户端规则、发送端认证这几样工具把自己关心的那条通路单独铺出来。这条通路越窄、越明确风险就越可控用起来也越省心。至于剩下那些你不在乎的邮件让过滤继续帮你挡着其实是件好事。