mutt 和附件编码

mutt 和附件编码

因此,我有一个简单的 bash 脚本,旨在向用户发送一条注释(例如,虚构的[电子邮件受保护]),其中所述注释包含一小段文本(包含在文件 message.txt 中)和一个附件(一个 PDF 文件,我将其称为 good.pdf 或 bad.pdf,如下所述)。

脚本(如下)中对 mutt 的调用(CentOS 7,官方存储库中提供的 mutt 版本“仅”1.5.21)工作正常(对于 good.pdf)...

 /usr/bin/mutt -s "here is the file..." [email protected] -a  good.pdf < message.txt

...除了某些 PDF 文件 (bad.pdf) 之外,当我尝试打开附件时(无论是在邮件客户端中,还是在首次将其与电子邮件分离后使用 PDF 阅读器),附件是空白的。

good.pdf 和 bad.pdf 在我拥有的众多 PDF 阅读器中的任何一个中都可以正常呈现(表明它们是“合法”PDF 文件)。如果我使用电子邮件客户端(如 Thunderbird)附加 good.pdf 或 bad.pdf,两个附件都可以正常通过(都不是空白)。

但是,bad.pdf 显示为空白如果我尝试使用 mutt 将其作为附件发送(至少,我可以从 CentOS 7 运行的 mutt 版本)。

如果我查看 mutt 正确发送的 good.pdf 的一些邮件标头,我会发现

 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline

 Here is the text piped in from message.txt

 Content-Type: application/octet-stream
 Content-Disposition: attachment; filename="good.pdf"
 Content-Transfer-Encoding: base64 

因此,good.pdf 文件的 Base64 编码。

但对于 bad.pdf 文件(即将出现“空白”),我得到以下信息:

 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline

 Here is the text piped in from message.txt

 Content-Type: text/plain; charset=utf-8
 Content-Disposition: attachment; filename="bad.pdf"
 Content-Transfer-Encoding: quoted-printable

因此,出于某种原因,mutt 认为 bad.pdf 的内容类型是 text/plain (而不是 application/octet-stream),我怀疑这就是为什么它随后使用quoted-printable 进行 Content-Transfer-Encoding (而不是 base64) )。

同样,我所有的 PDF 阅读器都可以很好地打开 good.pdf 和 bad.pdf。而且,我所有的电子邮件客户端(Thunderbird 就是其中之一)都很好地附加了两个 .pdf 文件,并且两个 pdf 文件在收据上都是“可读”(不是空白)的。只有当我使用 mutt 时,bad.pdf 才会以空白形式发送。显然,PDF 文件之间存在一些“不同”(内部),但这不是我可以轻易弄清楚或控制的东西(我从各个用户那里收集 PDF 文件,并且不生成它们)。

那么,有什么建议吗?或者关于问题出在哪里的线索? mutt 显然正在“阅读” bad.pdf 中的内部内容,这使它认为(错误地) bad.pdf 是不是PDF 文件(确实是)。相比之下,Thunderbird(以及 Outlook、Evolution 和许多其他“邮件客户端”)可以很好地附加它,而不会将其变为“空白”。

是否值得尝试强制使用 Base64 编码?如果是,我需要向 CLI 调用 mutt 提供什么以“实现这一点”?

非常感谢提前...

相关内容