前言
Google 从 2023 年开始就提醒用户, 即将停用 Gmail 账户的直接 SMTP, IMAP 和 POP3 在内的访问权限, 终于在 2025 年 1 月份开始完全停止了这类 "Less Secure Apps (LSAs, 低安全性的应用)" 的访问, Google 推荐用户使用 OAuth 继续登录应用.
那么是不是意味着传统的通过传统邮件协议使用账号密码访问 Gmail 就变得不可能了呢?
并不, 其实 Google 也不敢完全一刀切, 因为还有大量客户的办公设备和其他自动化程序永远不会按照 Google 的意愿实现 OAuth 登录, 于是 Google 还留下了一个「应用密码」登录方式, 允许用户为这些通用协议单独设置身份验证密码以继续使用.
于是今天依旧可以通过 SMTP, IMAP 和 POP3 在你喜欢的任何邮件客户端上使用 Gmail, 即使它没有实现 OAuth 登录. 也包括了通过 CardDAV 访问 Google 账户里的联系人, 通过 CalDAV 访问 Google 日历.
本文将立足在 2025 年 2 月初这个 Google 已经实施 LSAs 策略之后的时间点, 为读者解析一系列传统协议的在 Google 和 Gmail 账户中的使用方式.
应用密码
在 LSAs 策略实施之前, 都是直接使用 Google 账户账户名和密码直接登录的这些传统协议, 导致了一些安全问题. 于是 Google 现在只允许用户通过创建专用的应用密码继续访问这些协议.
但是应用密码的创建入口被 Google 从账户设置页中隐藏, 普通用户如果不擅长查阅文档就完全没有办法创建. 下面是直接导航至 Google 账户应用密码管理页的入口:
Google 账户 - 应用密码: https://myaccount.google.com/apppasswords
启用了二步验证的账户才能创建应用密码.
再次验证账户身份后就可以直接创建专用应用密码了, 如果可能, 建议为每个协议或者每个设备的单独创建一个应用密码.
SMTP, IMAP 和 POP3
下面是 Gmail 使用的服务器地址和端口:
协议 | 地址 | 明文端口 | 加密端口 (SSL) | 加密端口 (TLS) |
---|---|---|---|---|
SMTP | smtp.gmail.com | 25[1] | 465 | 587 |
IMAP | imap.gmail.com | \ | 993 | \ |
POP3 | pop.gmail.com | \ | 995 | \ |
首先必须要在 Gmail 的设置页 "转发和 POP/IMAP" 中打开 POP3 或者 IMAP 协议访问权限才能使用对应协议, SMTP 则没有单独的开关, Google 看起来默认是给 Gmail 用户打开 SMTP 权限的.
SMTP 限制
重度邮箱用户是非常在意这些限制的, 某些邮箱只有在通过 OAuth 登录后使用 API 发送邮件才会有正常的速率或者次数配额. 但是 Gmail 还不会因为用户使用的是 SMTP 就去限制, 不管使用的是 OAuth 还是传统协议发送邮件, 每个 Gmail 账户(个人版)每天都能发送 500 封邮件.
如果是商业版本的 Google Workspace 中的 Gmail, 则允许每个账户每天发送最多 2000 封邮件.
Gmail sending limits in Google Workspace - Google Workspace Admin Help
CardDAV
CardDAV 是一个开放的联系人和通讯录同步协议, 基于 WebDAV 扩展而来.
众所周知的, Google 是有通讯录的, 而且还专门有一个在线应用, Android 上则直接和联系人应用集成在一起.
Google 通讯录: https://contacts.google.com/
那么其实是可以通过 CardDAV 来在任何支持该同步协议的地方使用 Google 通讯录里面的联系人的.
Google CardDAV 服务器地址:1
https://www.googleapis.com/carddav/v1/principals/example@gmail.com/lists/default
把其中的 example@gmail.com
更换为你自己的 Gmail 账户即可.
本来常规 CardDAV 允许在一个账户里面有多个通讯录, 但 Google 的通讯录只允许用户使用默认创建的那个通讯录(名称是 "Address Book"), 如果直接列出 /lists
并尝试创建新的通讯录就会提示 HTTP:400 错误, 所以 API 路径其实直接写到 /lists/default
就好了.
CalDAV
CalDAV 是一个开放的日历和日程同步协议, 也是基于 WebDAV 扩展而来.
用过 Google 日历的都知道它非常好用, 有网页版在线应用, Android 上的日历应用也是设计得很不错.
Google 日历: https://calendar.google.com/
要使用 CalDAV 连接到 Google 日历, 要使用下面的服务器地址:1
https://apidata.googleusercontent.com/caldav/v2/example@gmail.com/user
如果要直接同步账户下的所有日历就只需要把其中的 example@gmail.com
更换为你自己的 Gmail 账户即可.
其中的 /user
部分指示服务器使用账户集合为起始点, 如果需要日历集合为起始点则可以使用 /events
.
如果要同步特定的日历, 则需要把 example@gmail.com
部分替换为日历 ID, 关于日历 ID 请参照下一小节.
Google 日历 ID
登录到 Google 日历网页端, 打开设置, 在侧边栏 "我的日历设置" 栏目下找到你想要查询 ID 的日历, 点击进入对应日历设置, 此时浏览器地址栏就会刷新成如下的格式:1
https://calendar.google.com/calendar/u/0/r/settings/calendar/qzpWmjRwV8Avfo9DEB6f1vinbBv9yq7LZ64ln28A4UJXjBmPcxD0vMsbfoWfvmTE?pli=1
其中的 /calendar
路径后的下一级路径 /qzpWmjRwV8Avfo9DEB6f1vinbBv9yq7LZ64ln28A4UJXjBmPcxD0vMsbfoWfvmTE
的路径名称既是对应日历的 "日历 ID".
另一种已弃用的 API 端点
除了在本节开头使用的 API 端点之外, Google 在此之前还有一个已经被标记为弃用的端点:1
https://www.google.com/calendar/dav/example@gmail.com/user
同理, 需要把其中的 example@gmail.com
更换为你自己的 Gmail 账户, 使用 /user
和 /events
切换不同的起始点.
这个端点已经被 Google 标记为已弃用, 但目前依旧没有被删除.
存在的问题
Google 的 CalDAV 端点不管是哪一个都存在问题, 可以查看一个开源日历下面的 issue:
Calendar does not work with Google account · Issue #712 · elementary/calendar
笔者只有在使用弃用的端点的时候才能同步出日历来, 但使用 Android 上的 DAVx⁵ 的时候会直接把 Google 账户下的通讯录和日历都一起同步出来, 这到底是算特性还是 bug 呢?
注释
SMTP 的 25 端口只适用于 Google Workspace (Gmail 商业版), 需要管理员将发信 IP 手动添加到管理中心并设置正确的 SPF 记录, 具体详见文档《Send email from a printer, scanner, or app - Google Workspace Admin Help 》中的第三节 "Option 3: Send email with the restricted Gmail SMTP server". ↩︎