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)
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选项--.
刚刚在 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/。
| 归档时间: |
|
| 查看次数: |
121029 次 |
| 最近记录: |