SMTP(587端口)AUTH登录凭证生成算法及GMAIL对接方法问询
SMTP(587端口)AUTH认证的登录凭证生成机制
SMTP 587端口默认通过STARTTLS升级为加密连接,在此基础上的AUTH认证主要有几种主流机制,对应的登录凭证生成方式如下:
1. PLAIN 认证(最常用)
这是最简单的明文认证机制,因传输已通过STARTTLS加密,安全性有保障:
- 拼接规则:
\0{用户名}\0{密码}(开头为ASCII空字符\0) - 生成步骤:将拼接后的字符串做Base64编码,结果即为发给服务器的认证内容
- 示例:
用户名user@gmail.com、密码mySecurePass123,拼接后为\0user@gmail.com\0mySecurePass123,Base64编码后为AHVzZXJAZ21haWwuY29tAG15U2VjdXJlUGFzczEyMw==
2. LOGIN 认证
分两步完成认证,同样基于Base64编码:
- 第一步:单独对用户名做Base64编码并发送给服务器
- 第二步:单独对密码做Base64编码并发送给服务器
- 示例:
用户名Base64:dXNlckBnbWFpbC5jb20=
密码Base64:bXlTZWN1cmVQYXNzMTIz
3. CRAM-MD5 认证(基于哈希的安全认证)
挑战-响应式认证,无需明文传输密码:
- 服务器先返回Base64编码的随机挑战字符串(如
PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+) - 客户端解码挑战字符串,以密码为密钥、挑战字符串为消息,用HMAC-MD5算法生成十六进制哈希值
- 拼接规则:
{用户名} {哈希值},再对整个字符串做Base64编码后发送给服务器 - 示例:
挑战解码后为<1896.697170952@postoffice.reston.mci.net>,密码myPass,计算HMAC-MD5得到0a3815f9441b23f70c59566027b8445e,拼接后为user 0a3815f9441b23f70c59566027b8445e,Base64编码后为dXNlciAwYTM4MTVmOTQ0MWIyM2Y3MGM1OTU2NjAyN2I4NDQ1ZQ==
自研邮件应用对接GMAIL的AUTH凭证创建方案
GMAIL已禁用普通密码直接用于SMTP AUTH(开启“不太安全的应用访问”不推荐),目前合规方案有两种:
1. 应用密码(App Password)—— 个人/单用户场景
- 前提:GMAIL账号已开启两步验证(2FA)
- 创建步骤:
- 登录Google账号安全设置页,找到“应用密码”选项
- 选择应用类型为“邮件”,设备类型选“其他(自定义名称)”,输入自研应用名称
- 系统生成16位无空格应用密码,将此密码作为SMTP登录密码,用户名仍为GMAIL邮箱地址,用PLAIN或LOGIN认证即可对接
2. OAuth2.0 认证—— 多用户/商业化应用
Google推荐的第三方应用对接方式,无需用户暴露密码:
- 前置准备:在Google Cloud Console创建项目,启用Gmail API,创建OAuth 2.0客户端ID(配置授权回调地址)
- 凭证生成流程:
- 引导用户通过应用发起OAuth授权,获取授权码
- 用授权码换取访问令牌(Access Token)和刷新令牌(Refresh Token)
- SMTP认证使用
XOAUTH2机制:- 拼接规则:
user={邮箱地址}\001auth=Bearer {访问令牌}\001\001(\001为ASCII控制字符SOH) - 将拼接后的字符串做Base64编码,作为AUTH认证内容发送给服务器
- 拼接规则:
- 访问令牌过期后,用刷新令牌换取新令牌,无需用户重新授权
内容的提问来源于stack exchange,提问作者Cribe
相关产品推荐
相关产品推荐

