数字营销 · Web开发 · 基础设施

在邮件服务器上用 Postfix 发送附件

记录在 Linux 邮件服务器上使用 Postfix 处理文件附件,并通过 Base64 工具进行编码与解码的实践。

提示:本文写于 2013 年,文中涉及的邮件服务器、Postfix、Linux 命令及相关邮件编码方式均基于当时的实际环境,请结合文章发布时间阅读。

今天利用 Postfix 在亚马逊的 VPS 上搭建了一个邮件服务器,做好相关配置,并添加 MX 记录指向服务器之后,邮件的收发都已经正常。

但是,当遇到用 Postfix 发送附件的问题时,还是把我难住了。

在没有安装 POP3 和 SMTP 相关客户端工具的情况下,在服务器上只能通过命令行发送邮件。

命令行方式发送普通文本比较简单,但是如果需要把一个文件作为附件发送出去,就没有那么方便了。

为什么发送附件需要编码?

我们知道,邮件信息在网络上的传输需要遵循相应的编码方式,而普通文件中的二进制数据并不能直接按照普通 ASCII 文本的方式传输。

所以,如果要发送附件,就需要先对文件进行编码。

查找了一些资料后,发现邮件中常见的编码方式主要有:

  • 7bit ASCII
  • 8bit ASCII
  • binary
  • quoted-printable
  • base64

其中 Base64 是非常常见的一种编码方式。

为了测试实际情况,我分别使用腾讯、163、新浪以及 Google 向自己的邮件服务器发送了一封带附件的邮件。

查看收到的邮件后,可以看到附件数据主要都是使用 Base64 进行编码的。

那么,如果我只想通过命令行的方式处理附件,又该怎么做呢?

Linux 本身提供了基于 Base64 的编码和解码工具 base64,使用起来比较简单。

Base64 的基本使用方法

1、编码字符串

echo"string" | base64

2、编码文件

base64 文件名

例如:

base64 a.txt

3、解码

echo"code" | base64 -d

有了这个工具之后,就可以比较方便地对需要发送的文件进行编码和解码。

使用 mail 发送 Base64 数据

例如,我需要把:

a.txt

发送到:

test@test.com

可以执行:

base64 a.txt | mail -s"主题" test@test.com

这样做以后,对方收到的内容实际上是经过 Base64 编码后的文本。

也就是说,这种方式本身只是把文件转换成 Base64 文本,然后交给 mail 发送,并不会自动把它组织成标准的 MIME 附件。

因此,如果需要真正以邮件附件的形式发送文件,还需要进一步按照邮件格式对内容进行组织。

对于简单的测试和文件传输,这种方式还是比较方便的。

当然,如果只是通过 mail 命令进行最基本的收发操作,能够实现的功能还是比较有限。

如果有更高的要求,可以继续安装 POP3、SMTP 等相关服务和工具。

Base64 在线编码解码工具

为了方便对文件进行 Base64 编码和解码,我当时还编写了一个 Base64 在线编码解码工具。

可以访问:

Base64 在线编码解码工具

欢迎使用,也欢迎提交 Bug。

评论0

欢迎分享你的看法,也欢迎补充不同的实践经验。