![MAILX 发送一封电子邮件,但主题和正文为空](https://linux22.com/image/205606/MAILX%20%E5%8F%91%E9%80%81%E4%B8%80%E5%B0%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%EF%BC%8C%E4%BD%86%E4%B8%BB%E9%A2%98%E5%92%8C%E6%AD%A3%E6%96%87%E4%B8%BA%E7%A9%BA.png)
以下命令刚刚开始发送一封主题和正文为空白的电子邮件。
mailx -s "Daily Extract" $RESULT_EMAIL < $LOG
$RESULT_EMAIL
- 包含已确认的通讯组列表。
$LOG
- 包含已确认的电子邮件内容。
知道为什么电子邮件现在是空白的,没有主题行吗?
这是在已完成正常修补的 PROD 服务器上。也许是 Java 版本?红帽服务器版本? mailx 不适用于 XXX 版本?
$LOG
- 包含电子邮件的文本。喜欢...This is the body of the Email. The email verifies that you have subscribed to us...
新信息 使用服务器上的命令行,mailx 函数确实会发送电子邮件。
shell 脚本是从 Atomic Scheduler (UC4) 执行的。因此,UC4 计划在上午 6:00 执行 shell 脚本。 mailx 命令位于此 shell 脚本内。
我将努力获取您所要求的信息。
cat /etc/os-release
[ ]
lsb_release -a
Command not found
答案1
当您运行命令并使用<
后跟某个字符串时,shell 将使用该字符串作为文件的名称,该文件的内容将被重定向到命令的标准输入流中。
换句话说,当你跑步时
mailx -s 'Daily Extract' "$RESULT_EMAIL" <"$LOG"
...那么变量中的任何内容LOG
都将被用作文件名。如果该文件不存在,则发送的邮件将不带消息正文(如果手动运行该命令,您还应该在终端中看到“没有此类文件或目录”错误消息)。
然而,里面的内容似乎LOG
是您要发送的消息正文。在这种情况下,我们不能使用这样的重定向,而必须确保变量的值$LOG
被传递到 的标准输入流中mailx
。
我们可以像这样使用printf
:
printf '%s\n' "$LOG" | mailx -s 'Daily Extract' "$RESULT_EMAIL"
或者,使用此处字符串(某些 shell 支持):
mailx -s 'Daily Extract' "$RESULT_EMAIL" <<<"$LOG"
或者,使用此处文档重定向:
mailx -s 'Daily Extract' "$RESULT_EMAIL" <<END_MESSAGE
$LOG
END_MESSAGE