我有一个使用 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