41

我正在开发一个在 Solaris 服务器上运行的 KornShell (ksh) 脚本,当满足错误条件时,它将发送一封电子邮件。我正在通过 发送电子邮件mailx

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

当前代码:

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

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

我将如何做到这一点?

4

8 回答 8

55

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

mailx -r me@example.com -s ...
于 2009-08-18T22:55:38.180 回答
42

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

-a "From: Foo Bar <foo.bar@someplace.com>"
于 2013-08-28T14:19:53.327 回答
25

如果您还想在发件人字段中包含您的真实姓名,您可以使用以下格式

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" ...

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

于 2012-11-25T18:10:32.043 回答
14

bsd-mailx默认安装的 debian 上,该-r选项不起作用。但是,您可以mailx -s subject recipient@abc.com -- -f sender@abc.com改用。根据手册页,您可以在--.

于 2013-07-26T20:29:19.223 回答
7

刚刚在 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"

在这些示例和后续示例中,我定义$senderas"Sender Name <sender.address@domain.tld>"$recipientsas"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/253139https://stackoverflow.com/a/3120227/253139

于 2018-11-22T16:19:12.540 回答
2

该软件包nail提供了一个增强的类似 mailx 的界面。它包括-r选项。

在 Centos 5 上,安装包mailx会给你一个名为 的程序mail,它不支持这些mailx选项。

于 2014-09-25T09:43:37.617 回答
1

在 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

于 2018-05-21T23:39:45.603 回答
0

在 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
于 2017-06-10T08:14:30.167 回答