我正在处理在Solaris服务器上运行的KornShell(ksh)脚本,该脚本将在满足错误条件时发送电子邮件。我通过mailx发送电子邮件。
问题:如何在mailx命令中设置“发件人”电子邮件地址?
当前代码:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
注意:该命令工作正常,但是,“From”是我运行脚本的用户的名称,我希望将其用于另一个电子邮件地址。
我将如何做到这一点?
答案 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/253139和https://stackoverflow.com/a/3120227/253139通过这些变通方法获得更多信息。