使用 sendmail 发送文件

使用 sendmail 发送文件

我有一个使用 sendmail 函数发送电子邮件的 shell 脚本代码如下

mailalert(){
sendmail -F Sender-Name -it <<END_MESSAGE
To: [email protected]
Subject: Subject

Message
END_MESSAGE
}

每当我调用此函数时,它都会执行。现在我有一个文本文件,我想使用 sendmail 将其作为附件或作为其发送的电子邮件中的消息发送。我该怎么做?我试了很多技巧,但似乎都不起作用。请帮忙。

答案1

uuencode /path/filename.txt | sendmail -s "subject" user@domain在终端中输入发送邮件。

  • 将“路径”替换为要附加的文件所在的实际目录路径。
  • 将“filename.ext”替换为实际文件名和扩展名。
  • 将“主题”替换为您希望电子邮件具有的主题行。
  • 将“user@domain”替换为收件人的电子邮件地址。

这是发送带附件的邮件的实际过程。

uuencode /path/filename.txt在脚本中的 sendmail 命令之前添加 。我的意思是将其修改为

mailalert(){
uuencode /path/filename.txt
sendmail -F Sender-Name -it <<END_MESSAGE
To: [email protected]
Subject: Subject

Message
END_MESSAGE
}

希望能够帮助到你。

答案2

我创建了以下脚本来附加 CSV 文件。文件正在生成,但它错误地截断了 CSV 的标题行/列名称,并且还有一个文件附加到电子邮件中,即每封电子邮件中的“ATT0001.txt”。你能在这里发现什么错误吗?

脚本

(
echo "From:"$1;
echo "To:"$2;
echo "Subject:"$3;
echo "MIME-Version: 1.0";
echo "Content-Type:multipart/mixed; boundary=\"B835649000072104Jul07\"";

echo "--B835649000072104Jul07";
echo "Content-Type: text/html; charset=\"UTF-8\"";
echo "Content-Transfer-Encoding: 7bit";
echo "Content-Disposition: inline";
echo "";
echo "$4";

echo "--B835649000072104Jul07";
echo "Content-Type: text/csv";
echo "Content-Transfer-Encoding: base64";
echo "Content-Disposition: attachment; filename=\"$5\"";
base64 "$5"

echo "--B835649000072104Jul07";
) | sendmail -t

答案3

相当奇怪,但我使用了不同的方法,因为在使用uuencode它时它开始执行,但光标卡在,begin 644 /path/to/file所以我使用 cat 在消息正文中发送我的文件。

file=/path/to/file
mailalert(){
sendmail -F Sender-Name -it <<END_MESSAGE
To: [email protected]
Subject: Subject

$(cat $file)
END_MESSAGE
}

上面的代码运行完美,但是当我在 Web 浏览器中看到消息时,一切正常。但是当我在 Thunderbird 中看到它时,它显示不正确。它就像是经过编码的。

因此,我会保留这个问题,直到我找到正确的解决方案为止。

答案4

在搜索了大量无用的 MAN 页面并通过谷歌搜索后,我终于找到了这个解决方案:
要发送的文件:test.csv

在 Ubuntu 上,您将拥有由包提供的 uuencode(AIX)sharutils,您可能需要安装它(Redhat 上的等效程序是mutt)。

uuencode test.csv test.csv | mail -v -s "Subject test" -r [email protected] [email protected]

最大的问题是将 sendmail 和附件结合起来,同时设置主题。此外,在 AIX 上我没有这个-a attachment选项,就像 LINUX 手册页建议的那样。

您还可以使用完全相同的参数mailx来代替。mail

相关内容