我正在开发一个在 Solaris 服务器上运行的 KornShell (ksh) 脚本,当满足错误条件时,它将发送一封电子邮件。我正在通过 发送电子邮件mailx
。
问题: 如何在mailx
命令上设置“发件人”电子邮件地址?
当前代码:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
注意:该命令工作正常,但是,“发件人”是我正在运行脚本的用户的名称,我希望将其发送到另一个电子邮件地址。
我将如何做到这一点?
您可以使用“-r”选项设置发件人地址:
mailx -r me@example.com -s ...
“-r”选项在我的系统上无效。我不得不对“发件人”字段使用不同的语法。
-a "From: Foo Bar <foo.bar@someplace.com>"
如果您还想在发件人字段中包含您的真实姓名,您可以使用以下格式
mailx -r "me@example.com (My Name)" -s "My Subject" ...
如果您的名字中碰巧有非 ASCII 字符,例如 My AEÆ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" ...
希望这可以为某人节省一个小时的辛勤工作/研究!
在bsd-mailx
默认安装的 debian 上,该-r
选项不起作用。但是,您可以mailx -s subject recipient@abc.com -- -f sender@abc.com
改用。根据手册页,您可以在--
.
刚刚在 CentOS 7 机器上遇到了这个语法问题。
在一台非常旧的 Ubuntu 机器上运行mail
,一封精美的电子邮件的语法是
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"
。
在这些示例和后续示例中,我定义
$sender
as"Sender Name <sender.address@domain.tld>"
和$recipients
as"recipient.name@domain.tld"
我在 bash 脚本中所做的那样。
然后,您可能会发现,就像我所做的那样,当您尝试在发送电子邮件时在脚本中生成电子邮件的正文内容时,您会遇到一个奇怪的行为,即电子邮件正文被附加为二进制文件(“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 设置语言环境的另一种方法)
有关这些解决方法的更多信息,请访问https://stackoverflow.com/a/29826988/253139和https://stackoverflow.com/a/3120227/253139。
该软件包nail
提供了一个增强的类似 mailx 的界面。它包括-r
选项。
在 Centos 5 上,安装包mailx
会给你一个名为 的程序mail
,它不支持这些mailx
选项。
在 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
在 macOS Sierra 上,使用 smtp 设置创建 ~/.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