使用 Unix Shell 脚本发送电子邮件

9

我需要编写一个Unix shell脚本来发送邮件。

以下脚本允许我使用可变的消息正文。

在下面的代码中,是否可能有一个可变的主题部分?

#!/bin/bash
# Sending mail to remote user

sender="root@sped56.lss.emc.com"
receiver="root@sped56.lss.emc.com"
body="THIS IS THE BODY"
subj="THIS IS THE SUBJECT."


echo $body | mail $receiver -s "THIS IS THE SUBJECT" // this works fine
echo $body | mail $receiver -s $subj // ERROR - sends one mail with only
//"THIS" as subject and generates another error mail for the other three words 
4个回答

18

你忘记了引号:

echo $body | mail $receiver -s "$subj"

请注意,你必须使用双引号(否则变量将不会被扩展)。

现在的问题是:为什么在$subj周围要用双引号而不是$body$receiver。答案是echo并不关心参数的数量。因此,如果$body扩展为多个单词,echo只会用一个空格将它们全部打印出来。在这里,引号只有在您想保留双倍空格时才有用。

至于$receiver,这有效,因为它只扩展到一个单词(没有空格)。对于像John Doe <doe@none.com>这样的邮件地址,它将无法起作用。


3

你可以使用mailx,并始终在变量周围加上引号。

mailx -s "$subj" my.email@my.domain.com < myfile.txt

3

老问题,我知道,但可能一直很受欢迎。我最喜欢的方式提供了更多的灵活性,并且在我使用UNIX系统/POSIX环境时有效。只有sendmail路径可能会更改以满足本地实现。

sed <<"ENDMAIL" -e '/^From [^ ]/s/^From /From  /' -e 's/^\.$/. /' | /usr/sbin/sendmail -t -f "$sender"
To: $receiver, $receiver2, $receiver3
From: $sender
Subject: $subj
Any-Other-Standard-Optional-Headers: place headers in any order, including,
MIME-Version: 1.0
Content-Type: text/plain;
X-Mailer: any identity you want to give your E-mailing application
X-Your-Custom-Headers: X- headers can be your own private headers
x-Last-Header: a blank line MUST follow the last header

您的正文
ENDMAIL
  • 在许多环境中,以“From ”开头然后是非空格的行被保留为消息包内部的“开始新消息”标记。加一个额外的空格以避免截断您的消息。 虽然对于任何具有perl的系统,为了最大的可移植性,请将sed替换为:perl -p -e 's/^From ([^ ])/From $1/',因为某些UNIX系统中的sed实际上不是我所喜欢的,特别是如果echo“From me”在管道传输到本地sed时会得到第三个空格。
  • 仅由一个句点组成的行是sendmail代理家族的经典消息结束标记。把这样的行改为以空格结尾……看起来一样,但不再触发消息截断。
  • 您可以使用完整的电子邮件地址,例如:
    "Long Name" <email-addr@example.com>
  • 除了sendmail的-f选项外,需要引号、转义等的所有文本都被埋在“here document”中,这使得它们少了很多麻烦。
  • 阅读此处使用的sendmail“-”选项的手册页面。

变得更加复杂,您可以发送附件、不同的消息编码、不同的电子邮件格式、多部分消息等。对此进行一些研究,并注意消息不同部分所需的连字符数量。

Content-Type: multipart/mixed;
  boundary="----Some-unique-char-string-not-in-any-message"
------Some-unique-char-string-not-in-any-message . . .

0

在许多环境中可能没有mailx,但您可以使用mail/sendmail获得相同的功能。

cat myfile.txt | mail -s " Hi My mail goes here " mailid@domain.com 

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