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

Aie*_*Dot 37 email shell ksh solaris mailx

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

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

现行代码:

echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
Run Code Online (Sandbox Code Playgroud)

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

我怎么做到这一点?

sth*_*sth 44

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

mailx -r me@example.com -s ...
Run Code Online (Sandbox Code Playgroud)


Fin*_*ers 36

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

-a "From: Foo Bar <foo.bar@someplace.com>"
Run Code Online (Sandbox Code Playgroud)

  • 我遇到错误:“发件人:Foo Bar &lt;foo.bar@someplace.com&gt;”没有此类文件或目录 (2认同)

Run*_*une 22

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

mailx -r "me@example.com (My Name)" -s "My Subject" ...
Run Code Online (Sandbox Code Playgroud)

如果您的名字中碰巧有非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" ...
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*555 12

在debian bsd-mailx默认安装的地方,该-r选项不起作用.但是你可以mailx -s subject recipient@abc.com -- -f sender@abc.com改用.根据手册页,您可以在之后指定sendmail选项--.

  • 不幸的是,[DSA 3104-1安全更新](https://www.debian.org/security/2014/dsa-3104)破坏了这种方法.相反,可以安装heirloom-mailx软件包,它提供`-r`选项. (5认同)

Chr*_*ods 7

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

在一台非常老的 Ubuntu 机器上运行mail,一封精心编写的电子邮件的语法是

echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"
Run Code Online (Sandbox Code Playgroud)

然而,在安装了 CentOS 7 的mailx机器上,它是完全不同的:

echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"
Run Code Online (Sandbox Code Playgroud)

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

在这些和随后的例子,我定义$sender"Sender Name <sender.address@domain.tld>",并$recipients"recipient.name@domain.tld"我在bash脚本做。

然后您可能会发现,正如我所做的那样,当您尝试在发送电子邮件时在脚本中生成电子邮件的正文内容时,您会遇到一种奇怪的行为,即电子邮件正文被附加为二进制文件(“ATT00001.txt”)。 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"
Run Code Online (Sandbox Code Playgroud)

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

LANG="en_GB.UTF8" ; export LANG ;
Run Code Online (Sandbox Code Playgroud)

此处讨论了为 cronjobs 设置语言环境的另一种方法)

有关这些解决方法的更多信息,请访问 /sf/answers/2087889191//sf/answers/218415921/