提示:本文写于 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 数据
例如,我需要把:
发送到:
可以执行:
base64 a.txt | mail -s"主题" test@test.com
这样做以后,对方收到的内容实际上是经过 Base64 编码后的文本。
也就是说,这种方式本身只是把文件转换成 Base64 文本,然后交给 mail 发送,并不会自动把它组织成标准的 MIME 附件。
因此,如果需要真正以邮件附件的形式发送文件,还需要进一步按照邮件格式对内容进行组织。
对于简单的测试和文件传输,这种方式还是比较方便的。
当然,如果只是通过 mail 命令进行最基本的收发操作,能够实现的功能还是比较有限。
如果有更高的要求,可以继续安装 POP3、SMTP 等相关服务和工具。
Base64 在线编码解码工具
为了方便对文件进行 Base64 编码和解码,我当时还编写了一个 Base64 在线编码解码工具。
可以访问:
欢迎使用,也欢迎提交 Bug。
评论0
欢迎分享你的看法,也欢迎补充不同的实践经验。