#14 Authenticated Received Chain
Email 信息安全 2023-02-08谷歌的邮件中看到 ARC-xxx 头,研究了一下,叫做 Authenticated Received Chain
好像中文资料还非常少,直译过来,可能应该叫做 可信邮件转发链。
解决的问题是邮件经过一些服务进行中转过程中,原有的安全措施 —— SPF,DKIM,DMARC —— 会失效的问题。
#13 转载:是谁拉黑了你的IP
计算机网络 Email 2021-11-24邮件无法送达的原因有很多,例如 取消订阅、服务器不可达、地址格式错误或不存在、被判定为垃圾邮件、发信人/收信人被拒等等等等…今天,我们来聊一下 IP、域名被拒。
#12 BIMI
Email 2021-07-22看到新闻,谷歌正式开始在 Gmail 中启用 BIMI,显示经过验证的图标。
BIMI 全名 Brand Indicators for Message Identification,可能是邮件品牌标识的意思,作用就是在邮件中显示一个图标,用来标识邮件是否是品牌邮件。
当然这个 BIMI 就需要邮件能够通过一些手段的检测,比如 SPF, DKIM, DMARC,来保证其可靠性。
#11 转载:邮件的 Return-Path 头是什么
Email 2020-07-31#10 邮件安全:DKIM
Email 信息安全 2020-02-10#9 电子邮件的一些小技巧
Email 2019-01-14#8 日程邀请邮件
Email 2019-01-10#7 电子邮件是如何传输的?
Email 2018-07-22#6 SMTP 认证
SMTP Email 2018-05-18最常见的三种 SMTP 认证方法:
- PLAIN
- LOGIN
- CRAM-MD5
#5 Python 应用: 简易 SMTP 服务器
Python SMTP 使用Python搭建简易服务器环境 Email 2018-05-07#4 SMTP 拓展
SMTP Email 2018-04-24RFC#821 定义的 SMTP 协议非常简单(简陋)。
1993 年,RFC#1425 SMTP Service Extensions 定义了 SMTP 协议的拓展框架。
这个向前兼容的安全拓展框架是通过 EHLO 命令来实现。
#3 邮件发送中会遇到的各种地址
Email 2018-04-16注意:这边不是讨论 邮箱地址的格式。
格式
- 邮箱地址
- "名称" <邮箱地址>
含义
- SMTP 会话(投递)
- Mail From 真实投递的发信人
- Rcpt To 真实投递的收信人
- 邮件内容(显示)
From
发信人- 如果和 Mail From 地址不同,可能会显示:由 xxx 代发
To
收信人Cc
抄送人Bcc
密送人Rely-To
回复地址- 客户端点击回复的时候用的
- 如果没有这个字段,就会回复 From 地址
Sender
发信人Return-Path
/Reverse-Path
/Envelope-From
- 作用是在邮件投递出现问题的时候,邮件服务将邮件退回这个地址
- 如果我们看到这几个名字
- 可能是发信人自己在邮件中声明
- 可能是收信方收到邮件之后添加的,单独字段,或放在 Received 头中
关于抄送和密送
碳式复写纸 carbon paper
副本,抄送 carbon copy => CC
密送 blind carbon copy => BCC
按照设计,密送地址不希望被其他收信人、抄送人察觉,只是密送地址才知道自己是密送。
CC, BCC in SMTP
SMTP 服务器不处理 CC、BCC,SMTP 客户端应该自行处理
TO 地址 + CC 地址 + BCC 地址一起放到 SMTP 会话的 RCPT TO 字段
所以,按照我的理解,邮件客户端:
在一次 SMTP 会话中,如果有 3 个 TO/CC 地址,2 个 BCC 地址,应该对那 3 个地址批量发送,然后对那 2 个 BCC 地址分别加上 BCC 头,分别发送。
更稳妥一点:如果是批量发送邮件,不要放 BCC 到邮件头!!!显示一个 密送:xxx
也没啥意义。
- PS:MSN(Outlook),网易邮箱发出去的邮件,不会加 BCC 头
甚至网易可能在显示邮件原文的时候会移除 BCC 头(给网易邮箱发的 BCC 头都不见了) - PS:Gmail,QQ 邮箱发出去的邮件,密送人会看到 BCC 头
from_addr = "from@markjour.com"
to_addrs = ["to@markjour.com"]
cc_addrs = ["cc1@markjour.com", "cc2@markjour.com"]
bcc_addrs = ["bcc@markjour.com"]
msg = f"""
From: {from_addr}
To: {", ".join(to_addrs)}
Cc: {", ".join(cc_addrs)}
Hello World
""".strip()
send_to = to_addrs + cc_addrs + bcc_addrs
server = smtplib.SMTP('smtp.126.com')
server.set_debuglevel(1)
server.login(api_user, api_key)
server.sendmail(from_addr, send_to, msg)
server.quit()
#2 邮件中的时间格式
Email 时间 2018-04-10#1 邮箱地址的格式
Email 2018-04-07规范定义比较复杂,甚至支持注释。
我简化一下(去掉注释,去掉双引号):
- 格式:
域内部分@域
- 域内部分:
- 长度不超过 64
- 大小写字母 + 数字(62)
-
ASCII 标点符号(19)
!#$%&'*+-/=?^_`{|}~
-
可以加入点号(
.
)隔开,不放首尾,不连续出现 - 域最长 255 个字符
- 可以是
[IPv4]
/[IPv6]
/域名
实际上的邮件地址会更加简单:
- 长度限制
- QQ 邮箱 3 - 18
- Gmail 6 - 30
- 字符限制:字母数字 +
.-_
- 一般大小写不敏感
- 受规范影响,点不可连续
- 部分邮箱不支持全数字(别有用途,或是避免 QQ 号冲突,或是避免手机号冲突)
- 对字符的支持各有不同:
- QQ 邮箱支持
.-_
(均不可连续出现) - 网易免费邮箱只支持下划线,网易VIP邮箱支持点和下划线
- Gmail 只支持点(使用中支持
markjour+taobao@gmail.com
这种地址来做来信分类)
- QQ 邮箱支持
- 开头结尾字符限制:
- 字母数字开头 + 字母数字结尾
- 字母开头 / 字母数字结尾