使用Linux Mailx发送带有简单消息正文和文件附件的邮件

13

我正在编写一个使用Linux的Mailx发送电子邮件的shell脚本,该电子邮件必须包含一个文件附件和一个消息正文

目前可以发送带有附件的电子邮件:

output.txt | mail -s "Daily Monitoring" james@dell.com

我希望添加一个消息主体,应该怎么做?

Linux Mailx:

mail [-eIinv] [-a header] [-b addr] [-c addr] [-s subj] to-addr

1
这个链接应该能够回答你所有的问题:https://dev59.com/OnVD5IYBdhLWcg3wU5-H#14213935 - Eric Leschinski
6个回答

29

通常的方法是使用uuencode来处理附件,使用echo来处理正文:

(uuencode output.txt output.txt; echo "Body of text") | mailx -s 'Subject' user@domain.com

对于Solaris和AIX,您可能需要先放置echo语句:

(echo "Body of text"; uuencode output.txt output.txt) | mailx -s 'Subject' user@domain.com

尝试执行第二个代码,它会提示一个空白区域,唯一的退出方式是按下ctrl+c,看起来代码没有关闭,我该如何解决? - Rabb-bit
当我按下ctrl+c时,它会发送没有附件的邮件,请给予建议。 - Rabb-bit
这些管道中的每个命令在您的系统上单独工作吗? - johnsyweb
@Johnsyweb - 我需要在不使用 uuencode 的情况下完成相同的活动。这可能吗? - Nikhil
@nikhil: 这里有几个替代方案 https://dev59.com/OnVD5IYBdhLWcg3wU5-H - johnsyweb

4
最好的方法是使用mpack!
mpack -s“主题”-d“./body.txt”“././image.png”邮件地址
mpack -主题-正文-附件-邮件地址

1
在RHEL Linux上,我遇到了将我的消息放入电子邮件正文而不是附件的困难。使用od -cx,我发现我的电子邮件正文包含几个/r。我使用了一个Perl脚本来去除这些/r,然后消息被正确地插入到了电子邮件的正文中。
mailx -s "subject text" me@yahoo.com < 'body.txt'

文本文件body.txt中包含字符\r,所以我使用Perl去除了\r。

cat body.txt | perl success.pl > body2.txt
mailx -s "subject text" me@yahoo.com < 'body2.txt'

这是 success.pl。
    while (<STDIN>) {
        my $currLine = $_;
        s?\r??g;
        print
    }
;

1

Johnsyweb的回答对我没用,但是使用Mutt可以解决问题:

echo "Message body" | mutt -s "Message subject" -a myfile.txt recipient@domain.com

1
尝试这个,对我有效:

(echo "Hello XYX" ; uuencode /export/home/TOTAL_SI_COUNT_10042016.csv TOTAL_SI_COUNT_10042016.csv ) | mailx -s 'Script test' abc@xde.com

0
你可以试试这个:
(cat ./body.txt)|mailx -s "subject text" -a "attchement file" receiver@domain.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接