一封标准的电子邮件的EML格式都包含哪些东西

好的,这是一个非常核心的问题。EML 文件是电子邮件的标准原生格式,它完全遵循互联网工程任务组(IETF)制定的 RFC 标准(主要是 RFC 5322),是一个纯文本文件。

一封标准的 EML 格式邮件可以清晰地分为两大部分:邮件头(Headers) 和 邮件体(Body),两者之间由一个空行分隔。


详细分解

1. 邮件头 (Headers)

邮件头包含了邮件的所有元数据,由一系列 字段名: 字段值 对组成。每个头字段占一行。常见的标准头字段包括:

头字段 (Header Field) 说明 示例
From: 发件人的邮箱地址和可选名称。 From: "张三" <zhangsan@example.com>
To: 主要收件人的邮箱地址。多个地址用逗号分隔。 To: lisi@example.com, wangwu@example.com
Subject: 邮件的主题。 Subject: 本周会议安排
Date: 邮件发送的日期和时间。 Date: Tue, 07 Oct 2025 10:25:30 +0800
Message-ID: 由邮件系统生成的全球唯一标识符,用于追踪邮件。 Message-ID: <1234567890@mail.example.com>
MIME-Version: 声明邮件所使用的 MIME 协议版本,现代邮件通常是 1.0。这是支持附件和HTML的关键。 MIME-Version: 1.0
Content-Type: 极其重要。声明邮件体的内容类型和字符集。它定义了邮件体的结构(如是否是纯文本、HTML,或者是否包含多个部分)。 Content-Type: text/plain; charset="utf-8" Content-Type: multipart/mixed; boundary="----=_Part_1234567890"
Content-Transfer-Encoding: 声明邮件体的编码方式,用于将二进制数据安全地编码为纯文本(如Base64)。 Content-Transfer-Encoding: base64 Content-Transfer-Encoding: quoted-printable
Cc: 抄送 收件人。 Cc: boss@example.com
Bcc: 密送 收件人。此字段在邮件发出后会被接收服务器移除,其他收件人看不到。 Bcc: auditor@example.com
Reply-To: 指定回复应该发送到的地址。 Reply-To: support@example.com
X-Headers: 自定义头字段,通常以 X-开头,用于邮件客户端或服务器添加额外信息。 X-Mailer: Microsoft Outlook 16.0 X-Spam-Score: 5.2

2. 空行 (Empty Line)

一个完全空白的行(即连续的两个 \r\n)是邮件头结束的标志。解析器通过这个空行来区分哪里是头,哪里是体。

3. 邮件体 (Body)

邮件体包含了邮件的实际内容。它的结构和格式完全由 Content-Type这个头字段来定义。

  • 简单正文: 如果 Content-Type是 text/plain或 text/html,那么邮件体就是简单的文本内容。

    1
    2
    3
    4
    Content-Type: text/plain; charset="utf-8"

    这是一封纯文本邮件的正文内容。
    Hello, world!
  • 复杂正文(MIME 多部分消息): 当邮件包含附件或同时提供纯文本和HTML两种版本时,Content-Type会以 multipart/开头,并定义一个 boundary(边界字符串)。这个边界字符串像一把刀,将邮件体分割成多个不同的部分。

    • multipart/mixed:用于混合内容,最常见于携带附件的邮件。
    • multipart/alternative:用于同一内容的不同版本,例如纯文本和HTML版本,邮件客户端会选择能显示的那个。
    • multipart/related:用于内容相互关联的部分,例如HTML正文中嵌入的图片。 每个部分都有自己的一套子头(如 Content-Type, Content-Disposition)和内容。

一个完整的 EML 文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Received: from mail.example.com (mail.example.com [192.0.2.10])
by mx.google.com with ESMTPS id abc123def456
for <lisi@gmail.com>;
Tue, 07 Oct 2025 10:26:15 -0700 (PDT)
From: "张三" <zhangsan@example.com>
To: "李四" <lisi@gmail.com>
Subject: 这是一封测试邮件,带有附件
Date: Tue, 07 Oct 2025 10:25:30 +0800
Message-ID: <9876543210@mail.example.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_1234567890"
X-Mailer: Microsoft Outlook 16.0 //邮件发送工具

------=_NextPart_000_1234567890
Content-Type: multipart/alternative; boundary="----=_NextPart_001_1234567890"

------=_NextPart_001_1234567890
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

李四,你好!
这是邮件的纯文本版本。
请查收附件中的报告。

------=_NextPart_001_1234567890
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html>
<body>
<p>=E6=9D=8E=E5=9B=9B=EF=BC=8C=E4=BD=A0=E5=A5=BD=EF=BC=81</p>
<p>这是邮件的<strong>HTML版本</strong>。</p>
<p>请查收附件中的报告。</p>
</body>
</html>

------=_NextPart_001_1234567890--
------=_NextPart_000_1234567890
Content-Type: application/pdf; name="报告.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="报告.pdf"

JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURl
Y29kZT4+CnN0cmVhbQp4nC3LMQ6AIAwF0D2n8Ad2cHd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d
...(这里是长长的Base64编码的PDF文件内容)...
CgolJUVORF9QRkcK
------=_NextPart_000_1234567890--

总结

  • EML是邮件的原始格式,是纯文本文件。
  • 结构为:邮件头 + 空行 + 邮件体。
  • 邮件头包含所有元数据(发件人、收件人、主题等)。
  • 邮件体的结构由 Content-Type头定义,可以是简单的文本,也可以是由 boundary分隔的复杂 MIME 多部分结构,用于支持附件和多种正文格式。
  • 你可以用任何文本编辑器(如记事本、VS Code)打开和查看 .eml文件,这也是分析邮件来源和真伪的一种常用方法。

介绍SPF电子邮件认证机制

SPF(Sender Policy Framework,发送方策略框架)是一项非常关键的电子邮件认证技术,它像一份域名对外公开的“授权发送邮件服务器名单”,主要用于防止他人伪造你的域名发送垃圾邮件或钓鱼邮件。

🔧 SPF记录的核心机制

SPF的核心在于一条存储在DNS中的TXT记录。这条记录明确列出了被允许代表该域名发送邮件的所有IP地址。

一条标准的SPF记录看起来是这样的:v=spf1 ip4:192.168.1.1 include:_spf.google.com ~all。我们来拆解一下它的含义:

组件 含义 说明
v=spf1 版本声明 标识此为SPF版本1的记录。
机制 授权规则 定义匹配的规则,常见的有: • ip4:192.168.0.1 或 ip6:2001:db8::1:直接授权一个IP地址或网段。 • a / mx:授权该域名A记录或MX记录指向的IP地址。 • include:_spf.example.com:引入其他域名(如第三方邮件服务商)的SPF记录。
限定词 匹配结果处理 位于机制前,定义匹配后的操作: • + (Pass):默认值,通过验证。 • - (Fail):严格失败,邮件可能被拒绝。 • ~ (SoftFail):软失败,通常接受但可能标记为垃圾邮件。 • ? (Neutral):中立,无明确表态。
all 终止机制 必须放在记录末尾,匹配所有未提及的IP地址。常与限定词连用,如 -all 表示“所有未明确授权的IP都应拒绝”。

📧 SPF如何工作

当一封声称来自 @example.com的邮件到达接收方服务器时,验证过程如下:

  1. 提取域名:接收服务器会从邮件的“信封FROM”(即 MAIL FROM或 Return-Path地址)中提取域名 example.com。
  2. 查询DNS:接收服务器查询 example.com的DNS中的TXT记录,寻找SPF记录。
  3. 比对IP:接收服务器将发送这封邮件的真实IP地址与SPF记录中授权的IP列表进行比对。
  4. 得出结果:根据比对结果,返回“通过”、“失败”等状态,接收方服务器会依据这个结果来决定如何处理这封邮件。

⚠️ 注意事项与最佳实践

  • 与DKIM/DMARC协同工作:SPF是电子邮件安全的重要一环,但它通常需要与DKIM(验证邮件内容是否被篡改)和DMARC(基于SPF和DKIM结果制定更高级策略)配合使用,才能构成完整的防护体系。
  • 对邮件转发的影响:SPF的一个常见挑战是处理邮件转发。因为转发后,邮件的接收服务器看到的发送IP是转发服务的IP,而非原始发送服务器的IP,这可能导致SPF验证失败。因此,许多转发服务会重写“信封FROM”地址以适配SPF。
  • 初始配置建议:在刚开始部署SPF时,为了避免因配置不当导致正常邮件被拒,推荐使用 ~all (软失败)而非 -all (硬失败)。这样未授权的邮件通常仍会被接收,但可能被归类到垃圾邮件,给你一个观察和调整的缓冲期。

希望这份详细的介绍能帮助你全面理解SPF机制。如果你对具体的SPF记录配置或者它如何与DKIM/DMARC结合有进一步的疑问,我很乐意继续探讨。

站内搜索

没有找到内容!