如何设置mailx命令的发件人电子邮件地址?

时间:2009-08-18 22:43:55

标签: shell email solaris ksh mailx

我正在处理在Solaris服务器上运行的KornShell(ksh)脚本,该脚本将在满足错误条件时发送电子邮件。我通过mailx发送电子邮件。

问题:如何在mailx命令中设置“发件人”电子邮件地址?

当前代码:

echo ${msg_txt} | mailx -s "Script Failure" ${to_email}

注意:该命令工作正常,但是,“From”是我运行脚本的用户的名称,我希望将其用于另一个电子邮件地址。

我将如何做到这一点?

8 个答案:

答案 0 :(得分:38)

您可以使用“-r”选项设置发件人地址:

mailx -r me@example.com -s ...

答案 1 :(得分:36)

“-r”选项在我的系统上无效。我不得不为“From”字段使用不同的语法。

-a "From: Foo Bar <foo.bar@someplace.com>"

答案 2 :(得分:22)

如果您还想在起始字段中包含真实姓名,可以使用以下格式

mailx -r "me@example.com (My Name)" -s "My Subject" ...

如果您的名字中碰巧有非ASCII字符,例如MyAEÆoeøaaå (Æ= C3 86,ø= C3 B8,å= C3 A5),你必须像这样编码:

mailx -r "me@example.com (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...

希望这可以节省一个小时的辛勤工作/研究!

答案 3 :(得分:10)

在默认情况下安装bsd-mailx的debian中,-r选项不起作用。但是,您可以使用mailx -s subject recipient@abc.com -- -f sender@abc.com代替。根据手册页,您可以在--之后指定sendmail选项。

答案 4 :(得分:1)

nail提供了增强的mailx接口。它包含-r选项。

在Centos 5上安装软件包mailx会为您提供一个名为mail的程序,该程序不支持mailx选项。

答案 5 :(得分:0)

在macOS Sierra上,使用smtp setup创建〜/ .mailrc就可以了:

set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=youremail@gmail.com
set smtp-auth-password=yourpass

然后从CLI发送邮件:

echo "your message" | mail -s "your subject" to_email@gmail.com

答案 6 :(得分:0)

在Ubuntu Bionic 18.04上,这可以按照需要运行:

$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <fleghorn@yourisp.com>' -s "test cli email $(date)" -- recipient@acme.com

答案 7 :(得分:0)

只是在CentOS 7机器上遇到了这个语法问题。

在一台运行mail的非常老的Ubuntu计算机上,一封电子邮件的语法是

echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"

但是,在安装了mailx的CentOS 7机器上,情况却大不相同:

echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"

咨询man mail表示已弃用-r,现在应使用-S "variable=value"直接设置“发件人”发件人地址。

  

在这些示例和后续示例中,我将bash脚本中定义的$sender定义为"Sender Name <sender.address@domain.tld>",将$recipients定义为"recipient.name@domain.tld"

然后,您可能会像我一样发现,当您尝试在发送电子邮件时在脚本中生成电子邮件的正文内容时,会遇到一种奇怪的行为,即电子邮件正文被附加为二进制文件( “ ATT00001.bin”,“ application / octet-stream”或“ noname”,取决于客户端)。

此行为是Heirloom mailx处理文本输入中无法识别的/控制字符的方式。 (更多信息:https://access.redhat.com/solutions/1136493,其本身引用了解决方案的mailx手册页。)

要解决此问题,我使用了一种方法,将生成的输出通过tr传递到mail之前,并指定电子邮件的字符集:

echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"

在我的脚本中,我还预先明确地声明了语言环境,因为它作为cronjob运行(并且cron不继承环境变量):

LANG="en_GB.UTF8" ; export LANG ;

(为cronjobs is discussed here设置语言环境的另一种方法)

通过https://stackoverflow.com/a/29826988/253139https://stackoverflow.com/a/3120227/253139通过这些变通方法获得更多信息。