在 Linux 中发送电子邮件时无法附加文件和包含正文

Cannot attach file and include a body while sending an email in Linux

下面的命令将发送一封包含主题和正文但没有附件的电子邮件。如果我删除 < /usr/tmp/BODY_OF_EMAIL 我会收到带有主题和附件但没有正文的电子邮件。

cat /usr/tmp/ATTACHMENT.xls | uuencode ATTACHMENT.xls | mailx -s "Subject of email!" emailaddress@company.com < /usr/tmp/BODY_OF_EMAIL

/usr/tmp/BODY_OF_EMAIL 包含文本 "Email Body."

使用mailx

(cat /usr/tmp/BODY_OF_EMAIL;
 echo; 
 uuencode ATTACHMENT.xls < /usr/tmp/ATTACHMENT.xls ) | 
 mailx -s "Subject of email!" emailaddress@company.com

使用nail

nail -s "Subject of email!" -a /usr/tmp/ATTACHMENT.xls emailaddress@company.com < /usr/tmp/BODY_OF_EMAIL

nail 邮件程序有时安装为 mail,但它理解 MIME,用于真正的附件。

首先,不需要使用cat来喂uuencode,可以很愉快地从文件中读取:

uuencode /usr/tmp/ATTACHMENT.xls ATTACHMENT.xls | ...

你遇到的主要问题是这部分:

... | mailx < body_text_file

只有一个标准输入流,所以当你给出这样的shell矛盾指令时,它必须选择哪个重定向生效(实际发生的是stdin最初设置为来自进程管道,然后当 < 被读取时,它断开连接并被文件流替换)。

您可能想要做的是使用 cat 将正文文本与 uuencoded 文件连接起来,如下所示:

... | cat body_text_file - | mailx

(我假设正文是介绍,因此排在第一位 - 如果我错了,请将参数换成 cat)。

你的完整命令将是

uuencode /usr/tmp/ATTACHMENT.xls ATTACHMENT.xls \
  | cat /usr/tmp/BODY_OF_EMAIL - \
  | mailx -s "Subject of email!" emailaddress@example.com