如何在Linux中使用命令行发送电子邮件附件,而无需实际创建文件


3

我正在尝试发送带有CSV附件的电子邮件,但无法在本地创建该文件。

有没有办法管理内容(我的内容在内存中的变量),sendmail / mail以数据显示为附件的方式?


当然,这是可能的。如果您愿意并且能够手动构建完整的MIME邮件,则可以将其传递给 sendmail。 IIRC, mail 会破坏结果。它可能更容易使用 mutt 要么 mailx
Michael Vehrs

更新:两者 mailxmutt 无法或不愿意从fifo读取附件,因此进程替换不起作用。
Michael Vehrs

嗯,听起来像sendmail或telnet可能是我的朋友。
user2360915

Answers:


1

你可以使用mailx(例子来自 https://access.redhat.com/solutions/104833 )和bash <() 句法:

echo "MESSAGE BODY" | mailx -s "SUBJECT" -a <(echo something | sed 's/thing/thong/g') USER@DOM.TLD

与mutt相同的例子:

echo "MESSAGE BODY" | mutt -s "SUBJECT" -a <(echo something | sed 's/thing/thong/g') -- USER@DOM.TLD

一切都在 <() 将由bash执行,它将为它创建一个临时文件并将其作为命令的参数提供。


谢谢 !我在寻找的是&lt;()。工作完美。
user2360915

当我尝试这个时,我得到一个空的附件,就像mailx是双重触摸文件,第二次它,文件是空的,因为它是第一次消耗。使用mailx 12.5。
CSTobey

-3

问题没有说明不创建文件的原因。根据这个原因,您可能有其他解决方案,如果您询问的方法没有成功,您可以以不同的方式解决根本问题:

  • 如果担心该文件包含您不想留在持久存储上的敏感数据,则可以将该文件写入ramdisk。请注意,您的邮件程序不会将文件复制到tmp目录或草稿文件夹。

  • 如果您担心文件太大而无法放入持久存储中,那么您可能需要考虑接收方可能也难以打开文件和任何中间MTA。您可能需要考虑使用不同的协议而不是邮件协议。


2
这并没有提供问题的答案。要对作者进行批评或要求澄清,请在帖子下方留言。 - 来自评论
DavidPostill

@DavidPostill:我不同意你的建议。我的回答提供了另一种使用ramdisk的方法,它适用于大多数常规电子邮件客户端,只接受真实文件而不是管道。
Lie Ryan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.