邮件协议、签名与推送
协议
协议 | 全称 | 作用 | 方向 | 端口 | 是否仍常用 |
---|---|---|---|---|---|
SMTP | Simple Mail Transfer Protocol | 发送邮件 | 客户端 ➜ 邮件服务器;服务器 ➜ 服务器 | 25 / 465(SSL)/ 587(STARTTLS) | ✅ 非常常用 |
POP3 | Post Office Protocol v3 | 拉取邮件(只拉,默认会删除服务器邮件) | 邮件服务器 ➜ 客户端 | 110 / 995(SSL) | ✅ 次常用 |
IMAP | Internet Message Access Protocol | 同步邮件(支持多设备) | 邮件服务器 ➜ 客户端 | 143 / 993(SSL) | ✅ 推荐使用 |
HTTP / HTTPS | Gmail/Outlook 等 WebMail 协议(基于 Web UI) | 网页交互 | 浏览器 ➜ 邮件服务器 | 80 / 443 | ✅ 很常用 |
MTA/MDA | Mail Transfer Agent / Mail Delivery Agent | 邮件中继 / 分发 | 内部服务 |
当你用 Gmail / Spark / iCloud 添加其他邮箱时,其实后台做了以下几件事:
✉️ 收邮件
- 用 IMAP(或 POP3)去第三方邮箱「拉」邮件
- 保证你能看到别人发到 you@other.com 的邮件
📤 发邮件
- 用你配置的 SMTP 发信,伪装 From 为你要整合的邮箱地址
🔁 整合 = 一个邮箱壳子(客户端)用别人的账号密码登录并同步数据
Gmail 网页是 Webmail,它底层仍然:
- 发邮件 ➜ 服务器内部还是 SMTP(或自研传输服务)
- 收邮件 ➜ 服务器通过 IMAP/POP3 或其他协议获取
📌 你看到的 HTTPS 只是前端网页浏览的UI层协议,不是邮件实际发送用的协议!
[发送者]|SMTP|[收件人MX记录(DNS)]|SMTP 25端口|[收件人邮箱服务器]|----------- -----------| | | |POP3 IMAP HTTP(S) APP| | | |老客户端 多端同步 Web UI 手机客户端
邮件获取
❓Spark / Apple Mail 等客户端是如何收邮件的?是 Gmail 主动推?还是客户端主动拉?
✅ 答案是:主动拉取(Polling 或 IDLE),不是 Gmail 主动推送。
📨 一、客户端如何获取 Gmail 的邮件?
✅ 1.POP3 模式(老旧)
- 客户端定时主动去 Gmail 拉邮件。
- 特点:
- 通常拉取后会删除服务器上的邮件(除非设置保留)。
- 不支持多设备同步。
- 一般用于移动设备或嵌入式应用。
- 缺点:不能“即刻”同步,容易滞后。
✅ 2.IMAP 模式(主流)
🟢 两种方式:
- Polling(轮询)模式:
- 客户端每 X 分钟连接 Gmail,检查有没有新邮件。
- 非实时,可能延迟几分钟。
- IDLE 模式(推送感)✅:
- IMAP 协议支持 IDLE 命令。
- 客户端保持一个长连接,Gmail 一旦有新邮件就通过这个连接“通知”客户端拉邮件。
- 这不是严格意义的“推送”,而是长连接 + 通知机制。
- 类似 SSE / WebSocket。
⚠️ 注意:Gmail 对 IMAP IDLE 有连接数和时间限制(如每 29 分钟断一次)
🔄 二、Spark/Apple Mail 是壳子,做了哪些事?
- 添加 Gmail 时,你授权 Spark 获取 IMAP/SMTP 权限(或通过 App Password)
- Spark 就是用 IMAP IDLE 跟 Gmail 保持“实时同步”
- 然后 Spark 就能在你手机或电脑“实时”收到邮件
所以:
- 📥 收邮件:通过 IMAP 拉(轮询或 IDLE)
- 📤 发邮件:通过 SMTP 发,伪装你的邮箱地址为 xxx@*.me
- ✅ Gmail 并不会主动通知 Spark/Spark 也不是被动监听,而是“保持连接”监听 Gmail 变动
❓Apple Mail 应用关闭了,没有长连接,为什么我手机还能收到邮件推送?
✅ 因为这时不是 Apple Mail 在收邮件,而是系统(iOS)通过 APNs 收到了 Gmail 发来的“你有新邮件”的推送通知。
🔒 情况一:你用 Apple Mail 收 Gmail 邮件
苹果系统本身与 Gmail 达成了深度集成:
- 你在系统中配置了 Gmail(比如 iOS 的「邮件、联系人、日历」设置里添加 Gmail)。
- Gmail 会通过 Google 的服务器把新邮件信息发送给 Apple 的 APNs 服务器。
- APNs 把通知“推”到你的手机上(哪怕 Apple Mail 没打开)。
- 你点开通知或打开 App,Apple Mail 才去真正拉邮件。
⚠️ 所以这里:
- 邮件内容并没有提前拉,只是“你有邮件”的推送先到了。
- 真正的邮件内容还是后面拉取的(IMAP)。
- Gmail 在你授权 Apple 访问时,会允许 Apple 注册一个 “push token”
- Gmail 有个专门的服务叫 Gmail Push Notification for iOS,会定期把新邮件变化通过 Apple 的 APNs 发出去。
🔁 非 Apple Mail 的应用(如 Spark)的处理方式
Spark 有两种模式:
1. App 在后台活跃 → 使用 IMAP IDLE(保持连接)
- 实时收到邮件变化。
2. App 被系统冻结或关闭 → Spark 服务器代收邮件 + 发推送
- Spark 公司维护一套 IMAP 连接服务,在云端长期连着你的邮箱。
- Spark 云端收到邮件后,通过 Firebase(FCM)或 APNs 把推送消息发给你的设备。
✅这种方式对 Gmail、Outlook 等第三方邮箱都适用。
邮件收发签名
❓1. DKIM 签名是改不了的吗?
你不能控制 Gmail 生成的 DKIM 签名,因为你使用了 Gmail 的 SMTP 服务器(smtp.gmail.com)发送邮件,所以:
- 签名者是 Gmail
- Gmail 会用自己的域名(如 gmail.com)作为 DKIM 的 d= 字段
- 你在 DNS 上看到的 cf2024-1._domainkey.*.me 是 Cloudflare 的转发系统使用的 DKIM,仅在接收邮件时验证用
💡 也就是说,你*不是用 .me 的发信服务器发出去的邮件
❓2. 发信服务器是谁来控制的?
发信时,控制权在 SMTP 服务提供商手里。在你的案例中:
- 你使用的是 Gmail 的 SMTP 服务
- 所以邮件是由 smtp.gmail.com 发出的
- Gmail 会自动添加 SPF、DKIM、DMARC 等头部信息来证明邮件“可信”
你无法控制 Gmail 的 DKIM 密钥、签名策略、SPF 记录,也就无法用你自己的 *.me 来做这部分认证。
❓3. 收件方如何判断邮件是不是垃圾邮件?
收件方会根据以下几项“发信域名的可信度”来判断:
项目 | 是否可控 | 说明 |
---|---|---|
SPF | ❌(由 Gmail 设置) | 发信 IP 是否被允许发这个域的邮件 |
DKIM | ❌(由 Gmail 生成) | 邮件内容是否被伪造,发信域名可信不 |
DMARC | ❌(由 Gmail 控制) | 配合 SPF/DKIM 的验证策略 |
发信 IP 是否被列入黑名单 | ❌ | 比如腾讯邮箱常常黑名单小服务商 |
发件人邮箱域名与 DKIM/Return-Path 是否一致 | 部分可控 | 如果伪装过头或不一致,会被判为可疑 |
所以你说得对:
✅ 用 Gmail 来发送,可信度非常高,因为:
- 发信 IP 是 Gmail 的
- DKIM 是 Gmail 的签名
- SPF 是 Gmail 的记录
- 收件方信任 Gmail,不容易误判为垃圾
❓4. 为什么很多人用自定义域名发邮件会进垃圾箱?
因为这些人是自己搭了 SMTP 邮件服务器(比如用 mailgun、postfix、腾讯企业邮),这时候:
- 发信 IP 很可能不在 SPF 白名单里
- DKIM 签名没配好或域名和邮件内容不一致
- Return-Path、From、Reply-To 不一致
- 没有正确配置反向解析(PTR Record)
- 域名新注册、无历史,容易被误判为 Spam
🧨 很多腾讯邮箱、Outlook、QQ 邮箱会特别敏感,对小邮件服务器不信任。
✅ Gmail 负责发信 → 可信
✅ Cloudflare MX 接收邮件 → Gmail 转发接收
✅ *你只是伪装成 .me 作为发件人,但 Gmail 帮你背书和签名 → 安全 + 高送达率
邮箱整合与身份归属
✅ 场景一(如 iCloud+ / Spark 邮箱):
- 添加外部邮箱账号只需填账号密码(IMAP/SMTP)
- 系统自动整合收发功能
🚫 场景二(国内邮箱整合,如 QQ/网易):
- 需要配置 SMTP/POP3,生成专用密码
- 往往还要短信验证等
🔐 本质区别:谁是发件人?谁是服务器?
内容 | iCloud+ / Spark | 国内邮箱整合(QQ邮箱、自建邮箱等) |
---|---|---|
发件人(From) | you@yourdomain.com | you@yourdomain.com |
发信服务器 | 你设置的 SMTP,比如 Gmail、Outlook | 同样是你设置的 SMTP |
谁签名(DKIM) | 由 SMTP 所属服务商签名(如 Gmail) | 同样由 SMTP 服务商签名 |
这些邮件客户端的角色 | ✅ 只是“客户端”和“代理” | ✅ 同样是客户端,负责调用 SMTP 发信 |
只要你配置了谁的 SMTP,邮件就是由“谁”发出去的!
- 你配置的是 Gmail 的 SMTP → 邮件由 smtp.gmail.com 发出 → Gmail 生成 DKIM、SPF → 收件人“信 Gmail”
- 你配置的是 QQ 的 SMTP(比如 smtp.qq.com)→ 邮件由 QQ 发出 → DKIM 是 QQ 签名 → 信任度依赖于 QQ 的信誉
这些客户端(Spark、iCloud Mail、Apple Mail)本质上只是调用发信服务器的一个“壳子”:
- ✔️ 负责 UI、合并收件箱、多账号管理
- ❌ 不会自行创建 DKIM 签名,也不持有发信 IP
- ✔️ 调用你设置的 SMTP 并发出去
你用的 SMTP | DKIM 签名域名 | SPF IP 来源 | 邮件真实性信任度 |
---|---|---|---|
smtp.gmail.com | d=gmail.com | Gmail IP | 高 |
smtp.qq.com | d=qq.com | QQ IP | 一般 |
自建 SMTP | d=*.me(需你配置 DKIM) | 自建 IP | 低~高,取决于配置 |
❗国内 SMTP 的“账号密码”和“短信验证”
这只是防止账号被滥用的额外验证机制,与 DKIM / SPF 无直接关系,它是:
- 对“第三方客户端登录行为”的风控
- 尤其因为国内很多 SMTP 不支持 OAuth,所以通过“专用授权码”来规避真实密码暴露
问题 | 回答 |
---|---|
✉️ 邮件签名是谁的? | 永远是你配置的 SMTP 所属服务商的签名 |
🧰 Spark / iCloud Mail / Apple Mail 是谁? | 它们只是“客户端壳子”,不会影响 DKIM |
🧾 为什么国内邮箱配置麻烦? | 因为安全策略更严格 + 无 OAuth 标准统一登录流程 |
🎯 最重要的角色是谁? | SMTP 服务商,决定邮件是否可信、签名、是否进垃圾箱 |
第三方邮件App
但是可以信任apple mail
✅ 第三方邮件 App(如 Spark)的基本做法是:
- 你在 App 内输入邮箱和密码(或 OAuth 授权)。
- Spark 的 云端服务器 登录你的 Gmail/Outlook/Yahoo 帐号。
- Spark 的服务器通过 IMAP 协议长期与你的邮箱保持连接。
- 收到新邮件时,他们的服务器先获取邮件内容。
- 再通过 APNs 或 Firebase 发推送,客户端打开后再读取邮件正文。
💥 这意味着什么?
- 他们的服务器可以读取你全部邮件。
- 甚至可以读取你发送的邮件内容、附件、联系人、元数据。
- 有些还会分析邮件内容来「智能分类」、「提醒账单」、「提醒快递」。
风险 | 说明 |
---|---|
邮件可被扫描 | 如果你没使用端到端加密,他们就能看到邮件明文。 |
内容分析 | 有些 App(如 Edison)会对邮件做数据挖掘,甚至训练模型。 |
数据泄露 | 万一他们被黑或存储泄露,你的邮件也可能泄露。 |
没有 GMail 的隐私保护机制 | 比如 Google 提供了安全日志、OAuth 应用限制,这些第三方工具未必有。 |
Apple Mail 跟 Spark、Edison 等第三方邮件 App 最大的区别就是——它不走自家中转服务器,而是由设备自己直连邮箱服务器,确实更注重隐私。
🍎 Apple Mail 的工作机制:
🔐 隐私原则
- 不会中转你的邮件。
- 不会读取或分析邮件内容。
- 一切连接(IMAP/SMTP)都是由 你的设备(iPhone、iPad、Mac) 直接与 Gmail、Outlook 等邮箱服务器通信。
- 使用 APNs(Apple Push Notification service) 实现低功耗推送通知。
🧠 Apple 是怎么实现「推送通知」的?
Gmail、Outlook 等大型邮件服务商支持一种叫做 IMAP IDLE 或 Push-IMAP 的协议,允许设备注册一个“空闲监听”:
- Apple Mail 客户端在后台运行时,通过 IMAP 连接到邮箱服务器。
- 使用 IDLE 命令让连接“挂起”,等待新邮件事件。
- 当新邮件到达时,服务器主动通知客户端。
- 客户端通过 APNs 把通知发给你。
🟡 如果设备被锁屏或关闭 Mail App 呢?
- iOS 会中止 IMAP 连接。
- 不再轮询或保持连接(节省电池)。
- 当你重新打开 Mail App 时再同步更新。
所以 Apple 不保留长连接在云端,也不缓存你的邮件——一切都在本地设备上进行,符合他们的“隐私至上”理念。
功能/机制 | Apple Mail | Spark / Edison 等第三方 |
---|---|---|
邮件连接 | 本地 IMAP/SMTP | 通过自家云服务器 |
内容读取 | 设备本地处理 | 云端读取、分析、转发 |
推送方式 | APNs + 本地监听 | 云端分析 + 自己推送通知 |
安全性 | 高(本地控制) | 中等或低(邮件中转) |
广告分析 | 无 | 有些会分析内容投广告 |
隐私等级 | 🍏 极高 | ❗存在隐私风险 |
隐私推送与邮件中转
🟡 设备锁屏 / Mail App 被关闭时,Apple 是怎么做到邮件提醒的?
✅首先明确:Apple Mail 不会保持后台 IMAP 长连接。
- iOS 出于省电目的,会终止所有非必要的长连接。
- 所以 Apple Mail 在后台时不会主动轮询 Gmail 等邮箱。
- 那么问题来了:新邮件到了,怎么推送? → 就是靠下面这套机制。
📬 Apple 是怎么「知道」你有新邮件的?
📡 情况 1:邮箱服务商支持
Push(IMAP Push Extensions 或 Exchange ActiveSync)
像 Gmail、Outlook 这样的邮件服务商:
- 和 Apple 有配合机制。
- Gmail 自己在服务器端会“通知 Apple 的服务器”——“你这个 *.me 邮箱有新邮件了”。
- 然后 Apple 通过自己的 APNs(Apple Push Notification Service) 把推送发给你手机。
✅ 也就是说:
你手机虽然没有连接 Gmail,Gmail 是告诉 Apple,然后 Apple 告诉你。
🔒 重点隐私区别 vs. 第三方 App:
对比点 | Apple Mail | Spark / Edison 等第三方 |
---|---|---|
谁接收 Gmail 的邮件提醒? | Apple 的 APNs 系统(只推状态) | 自己的服务器(收下完整邮件内容) |
谁控制你的邮件内容? | 你自己,邮件内容只在你设备上 | 他们的服务器可以缓存分析 |
隐私保障 | 极高 | 有泄露风险 |
🤔 如果 Gmail 没有跟 Apple 做这种配合会怎样?
那 Apple Mail 就没法接收到 APNs 推送,用户只能在:
- 手动打开 Mail App
- 或者系统唤醒时,重新连接 IMAP 去同步邮件
🔴 Gmail App 与 QQ 邮箱联动行为:
❌ Gmail 是不能收 QQ 的邮件推送的:
- Gmail App 只会在 你打开 Gmail App 时主动发起 IMAP 连接 去拉邮件
- Gmail 自己服务器不会代表你去和 QQ 建长连接或监听邮件(不像 Spark / Outlook 那样的中转模式)
所以:
- ✅ Gmail 打开时会拉 QQ 邮件
- ❌ Gmail 没打开、手机锁屏时,不会收到 QQ 邮件推送(除非你设置转发)
邮件客户端/服务 | 第三方邮箱是否中转? | 是否存储在自己服务器? | 隐私特点 |
---|---|---|---|
Apple Mail (原生) | ❌ 不中转 | ❌ 不存储 | ✅ 真正本地直连 + APNs 推送 |
Gmail (网页/App) | ❌ 不中转 | ❌ 不存储 | ✅ 不中转第三方邮箱内容 |
Outlook (桌面/移动) | ✅ 中转 | ✅ 存储 | ⚠️ 微软中转,隐私受其约束 |
Spark | ✅ 中转 | ✅ 存储在 Readdle 服务器 | ❌ 明确声明其服务器中转 |
Notion Mail | ✅ 中转 | ✅ 存储 | ❌ 走 Notion 基础设施(未知风险) |
Canary Mail | ⚠️ 分情况(默认中转) | ⚠️ 存储或可 E2EE | 中转但标榜支持 PGP |
Edison Mail | ✅ 中转 | ✅ 存储并用于 AI 建模 | ❌ 明确用于数据学习 |
QQ 邮箱、网易邮箱大师 | ✅ 中转 | ✅ 存储 | ⚠️ 多数国内邮箱默认中转 |
🔍 举个例子:Spark 如何处理第三方邮箱?
- 你添加 QQ、163 邮箱到 Spark 时,它会:
- 在 Spark 自己的服务器(Readdle)上存储凭证
- 用他们自己的服务器和 IMAP/SMTP 连接你 QQ 邮箱
- 然后将邮件同步副本到他们的中转服务
- 再推送通知给你设备
- 所以即使你手机关机,Spark 服务器还是能“帮你接收邮件”