最近打算给我的网站开通一个企业邮箱,用于发送邮件和接收邮件,我选择使用腾讯的企业邮箱,我的DNS解析到Cloudflare中,所以邮箱的解析也只能在Cloudflare中解析,我按照腾讯企业邮箱的文档进行配置,配置完后,发现邮件在163,88等国内邮箱使用没有问题,但无法接收谷歌,雅虎等邮箱的信息,而且也发不出去。
经过我通过AI和其他博主文章的指引下,终于解决了这个问题,所以下面是如何对接的详细过程:
1.导致gmail邮箱无法接收的原因是gmail对邮件的安全要求和验证都有要求,除了正常的MX还需要集合DMARC、DKIM 和 SPF的解析
SPF 记录是什么样的?
SPF 记录必须遵循一定的标准,以便服务器理解其内容。如下是 SPF 记录核心组成部分的示例:
v=spf1 ip4:192.0.2.0 ip4:192.0.2.1 include:examplesender.email -all这个例子让服务器知道这是什么类型的记录,声明对这个域被批准的 IP 地址和第三方,并告知服务器如何处理不符合要求的电子邮件。我们分别说明各组成部分是如何实现这一点的:
v=spf1
告诉服务器这里包含一条 SPF 记录。每一条 SPF 记录都必须以这个字符串开始。- 然后是 SPF 记录的“客人名单”部分,即授权 IP 地址。在本例中,SPF 记录告诉服务器,
ip4:192.0.2.0
和ip4:192.0.2.1
被授权代表该域发送电子邮件。include:examplesender.net
是 “include”(包含)标记的示例,该标记告诉服务器,有哪些第三方组织被授权代表该域发送电子邮件。这个标记表示,被包含域(examplesender.net)的 SPF 记录内容应被检查,其中包含的 IP 地址也应被视为已授权。一条 SPF 记录中可包含多个域,但这个标记仅适用于有效的域。- Finally,
-all
告诉服务器,SPF 记录中未列出的地址没有被授权发送电子邮件并应被拒绝。
- 这里的其他可选项包括
~all
:表示未列出的电子邮件将被标记为不安全邮件或垃圾邮件,但仍会被接受;不那么常见的是+all
:表示任何服务器都可以代表该域发送电子邮件。虽然本文中使用的示例相当简单,但 SPF 记录肯定会更加复杂。要确保 SPF 记录有效,需要注意如下几点:
- 每个域不能关联多条 SPF 记录。
- 记录必须以
all
部分结束,或包含一个redirect=
部分(表示该 SPF 记录由另一个域托管)。- SPF 记录不能包含大写字母。
什么是 DKIM 记录?
DKIM 记录存储了 DKIM 公钥,这是一串随机字符,用于验证使用私钥签署的任何内容。电子邮件服务器查询域名的 DNS 记录,以查看 DKIM 记录和其中的公钥。
DKIM 记录实际上是一种 DNS TXT(“文本” )记录。TXT 记录可用于存储域名管理员想要与其域名相关联的任何文本。DKIM 就是该类型 DNS 记录的许多用途之一。(在某些情况下,域名将其 DKIM 记录存储为反而指向密钥的 CNAME 记录;但是,官方 RFC 要求这些记录是 TXT。)
下面是一个 DKIM DNS TXT 记录的示例:
名称 在提示下键入 内容 TTL big-email._domainkey.example.com
TXT
v=DKIM1; p=76E629F05F70
9EF665853333
EEC3F5ADE69A
2362BECE4065
8267AB2FC3CB
6CBE6000
名称
与大多数 DNS TXT 记录不同,DKIM 记录被存储在一个专门的名称下,而不仅仅是域名的名称。DKIM 记录名称遵循以下格式:
[selector]._domainkey.[domain]
selector
是由域名使用的电子邮件服务提供商发布的专门值。它包含在 DKIM 标头中,使电子邮件服务器能够在 DNS 中执行所需的 DKIM 查找。domain
是电子邮件域名。._domainkey.
包含在所有 DKIM 记录名称中。为了查询 DKIM 记录,电子邮件服务器使用电子邮件服务提供商提供的 DKIM 选择器,而不仅仅是域名。假设 example.com 使用 Big Email 作为他们的电子邮件服务提供商,并且假设 Big Email 使用 DKIM 选择器
big-email
。example.com 的大部分 DNS 记录将被命名为example.com
,但他们的 DKIM DNS 记录名称将为big-email._domainkey.example.com
,这已在上面的示例中列出。内容
这是列出公钥的 DKIM DNS 记录的部分。在上面的示例中,
v=DKIM1
表示这个 TXT 记录应当被解释为 DKIM,公钥则是p=
之后的内容。记录类型和 TTL
这些是 DNS 记录中的标准字段。
TXT
表示这是一个 DNS TXT 记录。“TTL”代表生存时间(以秒为单位),它表示该记录在需要刷新之前被视为有效的时长。DKIM 记录的 TTL 一般为几分钟。
什么是 DMARC 政策?
DMARC 政策决定在对一封电子邮件进行 SPF 和 DKIM 记录检查后发生的情况。一封电子邮件要么通过 SPF 和 DKIM,要么不通过。DMARC 政策决定了当电子邮件未通过检查时,会被标记为垃圾邮件、被阻止,还是被传递给预定的收件人。(如果没有 DMARC 记录,电子邮件服务器仍然可以将电子邮件标记为垃圾邮件,但 DMARC 对何时这样做提供了更明确的指示)。
Example.com 的域名政策可以是:
“如果一封电子邮件未能通过 DKIM 和 SPF 测试,则将其标记为垃圾邮件。”
这些政策不是作为人类可读的句子来记录的,而是作为机器可读的命令,以便电子邮件服务能够自动解释它们。该 DMARC 政策实际上类似于以下内容:
v=DMARC1; p=quarantine; adkim=s; aspf=s;
这是什么意思?
v=DMARC1
表示该 TXT 记录包含一个 DMARC 政策,应该被电子邮件服务器解释为该政策的内容。p=quarantine
表示电子邮件服务器应当“隔离”未通过 DKIM 和 SPF 的电子邮件,将它们视为潜在的垃圾邮件。其他可能的设置包括p=none
,它允许未通过检查的电子邮件仍然传递,以及p=reject
,它指示电子邮件服务器阻止未通过检查的电子邮件。adkim=s
意味着 DKIM 检查是“严格的”。将s
改为r
,即可将其设置为“宽松的”,比如adkim=r
。aspf=s
与adkim=s
的意义相同,但是针对 SPF。- 注意,
aspf
和adkim
是可选设置。p=
属性指示电子邮件服务器应当如何处理那些未通过 SPF 和 DKIM 的电子邮件。
如果 example.com 的管理员想让这个政策更加严格,向电子邮件服务器发出更强烈的信号,将未经授权的邮件视为垃圾邮件,则可以按以下方式调整“p=”属性:
v=DMARC1; p=reject; adkim=s; aspf=s;
这行命令的大体意思是:“如果一封电子邮件没有通过 DKIM 和 SPF 测试,就不要发送。”
上面对于DMARC、DKIM 和 SPF的解释出自cloudflare官方文档。
下面是我这边配置的内容:
以@chiqio.com为例:
MX | chiqio.com | mxbiz2.qq.com | 10 |
MX | chiqio.com | mxbiz1.qq.com | 5 |
TXT | chiqio.com | "v=spf1 include:spf.mail.qq.com ~all" | |
TXT | _dmarc | "v=DMARC1; p=none; rua=mailto:mailauth-reports@qq.com" | |
TXT | lokg123._domainkey | "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqC4xPrWWHmogF4HnmcTCWMMggP9eszVKUdffvNVBHr1cQaz8f6GFDOQ6iFbYoOkK0hpiDq/rpMlCBZKjerRhdP6XFCtF1eSwbUS44UiyU25mFDCa2BhN4ylrCLlB7so2M72IZtQ/HmzHkX49dLGZmGeiZ5nv/P33Bok1xYijCIMlQIDAQAB" | 这里的内容从腾讯企业邮箱里面获取,name和内容都是企业邮箱生成的,每个人的都不一样,我的内容只能作为参考 |
CNAME | exmail.qq.com | 这里是橙云,不是灰云 |
相关的参考图片