如何使用 mail 或 mailx 命令从 bash 脚本以 HTML 格式发送电子邮件(Centos/Redhat)

Posted

技术标签:

【中文标题】如何使用 mail 或 mailx 命令从 bash 脚本以 HTML 格式发送电子邮件(Centos/Redhat)【英文标题】:How to sent Email as HTML from bash script by using mail or mailx command (Centos/Redhat) 【发布时间】:2019-09-03 13:15:00 【问题描述】:

我正在尝试从 bash 脚本发送一封电子邮件,该电子邮件的正文中应包含 html 表格, 我在 Redhat 中使用 mail 命令。但它一直以文本文件的形式发送给我。

difference=`expr $artu_removed - $artu_added`

mail  -s "Built notification" test@gmail.com << EOF


<html>

<head><title></title>
</head>
<body>

<table>  
 <tr>
  <Td> Before </td>  <td>after </td>  <td>differece </td>
 </tr>

<tr>
  <Td> $_before </td>  <td>$_after </td>  <td>$difference </td>
 </tr>

</table>

 Before:$_before
 After:$_after
 Difference:$difference
</body>
</html>
EOF

谁能告诉我该怎么办,我用的是Redhat,不是ubuntu

谢谢

【问题讨论】:

见:How to send HTML email using linux command line @Cyrus,请查看其他 cmets 中的问题,我在 Outlook 中获取 HTML 表,但它将此行作为文本“Content-Transfer-Encoding: 7bit Cc: test@outlookcom User-Agent : Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit " 【参考方案1】:

通过邮件尝试(不要忘记添加变量):

mail -a "Content-type: text/html" -s "HTML message" test@gmail.com << EOF
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Title</title>
</head>
<body>
    <table>
        <tr>
            <td> Before </td>
            <td> After </td>
            <td> Differece </td>
        </tr><tr>
            <td> $_before </td>
            <td> $_after </td>
            <td> $difference </td>
        </tr>
    </table>
    Before: $_before
    After: $_after
    Difference: $difference
</body>
</html>
EOF

如果您需要通过 mailx 从 CentOS/RedHat 发送,请使用它:

mail -s "$(echo -e "HTML message\nContent-Type: text/html")" test@gmail.com << EOF

为前景试一试:

mail -s "$(echo -e "HTML message\nContent-Transfer-Encoding: 7bit\nUser-Agent: Heirloom mailx 12.4 7/29/08\nMIME-Version: 1.0\nContent-Type: text/html; charset=us-ascii\nContent-Transfer-Encoding: 7bit")" test@outlook.com << EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
    <title>Title</title>
...

【讨论】:

谢谢我已经尝试过该解决方案,它似乎 mail -a 命令在 ubuntu 中有效,但在 Redhat 中无效,我收到此错误 Content-type: text/html: No such file or directory 现在电子邮件来了,但它仍然一样,在电子邮件中,它显示为文本,今天我尝试了邮件和 maix,但它们都没有给我 html 输出。 @alammd 也许是因为你没有 CSS?将&lt;body&gt; 替换为&lt;body style="background-color:#FF0000;"&gt;。如果你得到文本,那么你应该只看到 HTML 标签,对吗? 基本上,在电子邮件中,我看到 放在里面 @alammd 你从哪里得到消息?邮箱?我正在尝试:gmail.com、mail.ru 和我自己的 mx - 一切都很完美! (CentOS 7.6.1810 / mailx 12.5-19.el7)

以上是关于如何使用 mail 或 mailx 命令从 bash 脚本以 HTML 格式发送电子邮件(Centos/Redhat)的主要内容,如果未能解决你的问题,请参考以下文章

使用mail/mailx通过office365 SMTP发送邮件

LINUX下的mail\mailx为啥无法使用外部SMTP发邮件

用mailx发送公网ip到邮箱里

配置mailx 通过465端口发送邮件 /etc/mail.rc

zabbix使用系统自带mailx(mail)SMTP发送邮件

sendmail 第三方安装mailx发送邮件设置