如何使用 bash 命令“sendmail”发送 html 电子邮件?

Posted

技术标签:

【中文标题】如何使用 bash 命令“sendmail”发送 html 电子邮件?【英文标题】:How to send a html email with the bash command "sendmail"? 【发布时间】:2010-11-22 22:00:03 【问题描述】:

有人有演示吗?

Sendmail 据说不可扩展,但它是免费的,所以我决定暂时先使用它:)

【问题讨论】:

html 电子邮件是什么意思。附件或电子邮件中的 HTML 页面应为 HTLM 格式? 电子邮件应为 HTLM 格式 sendmail 是必需的吗?我可以使用基本的 POSIX 邮件做同样的事情,但无法访问 sendmail。 【参考方案1】:

以下作品:

(
echo "From: $from";
echo "To: $to";
echo "Subject: $subject";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "$message";
) | sendmail -t

有关与sendmail 兼容的msmtp 的故障排除,请参阅:

https://wiki.archlinux.org/index.php/Msmtp https://superuser.com/a/868900/9067

【讨论】:

@NiKiZe MIME-Version is 如果您使用 MIME 功能,例如 Content-Type:,显然您需要在这里使用。 没错,它应该在那里遵循规范。然而,许多客户端将使用 Content-Type 标头而不关心 MIME-Version。如果这是针对更多受众的,您当然应该遵循规范,但为了快速破解(如果您需要输入它以向自己发送电子邮件),可能不需要获得所需的结果。 这里是 MIME 版本要求RFC2045 这行得通。如果您的 HTML 在文件中,只需删除 "echo "$message";"并替换为“cat yourfile.html;”【参考方案2】:

如果我理解正确,您想使用 linux sendmail 命令以 HTML 格式发送邮件。此代码适用于 Unix。请试一试。

echo "From: me@xyz.com
To: them@xyz.com
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary='PAA08673.1018277622/server.xyz.com'
Subject: Test HTML e-mail.

This is a MIME-encapsulated message

--PAA08673.1018277622/server.xyz.com
Content-Type: text/html

<html> 
<head>
<title>HTML E-mail</title>
</head>
<body>
<a href='http://www.google.com'>Click Here</a>
</body>
</html>
--PAA08673.1018277622/server.xyz.com
" | sendmail -t

关于sendmail的配置详情,请参考这个link。希望这会有所帮助。

【讨论】:

如果email的内容是预先生成并恢复在一个名为content.html的文件中,如何通过sendmail从A发送给B? 如果您想从外部文件中读取内容,您可以使用一些 bash 脚本从外部 html 文件中读取行并放入电子邮件的数据字段中,或者只需复制粘贴 html 代码。另外,请查看病毒提供的链接。希望这会有所帮助。 我唯一不清楚的部分是:boundary="PAA08673.1018277622/server.xyz.com"。这是什么意思? sendmail 在实际发送邮件之前需要配置,对吧? 我相信boundary='...' 行需要附加到它正上方的行,Content-Type:...; 行,对吧?我试图进行编辑,但 StackExchange 阻止了它,因为没有足够的字符可以更改。 :(【参考方案3】:

我知道您要求发送邮件,但为什么不使用默认的mail?它可以轻松发送html电子邮件。

适用于:RHEL 5.10/6.x 和 CentOS 5.8

例子:

cat ~/campaigns/release-status.html | mail -s "$(echo -e "Release Status [Green]\nContent-Type: text/html")" to.address@company.com -v

代码共享:http://www.codeshare.io/8udx5

【讨论】:

【参考方案4】:

这个页面应该有帮助 - http://www.zedwood.com/article/103/bash-send-mail-with-an-attachment

它包含一个脚本,用于发送带有 MIME 附件的电子邮件,即包含 HTML 页面和图像。

【讨论】:

与作者质疑的内容不同,但可能仍然有帮助。【参考方案5】:

-一个选项?

参照。手册页:

-a file
          Attach the given file to the message.

结果:

Content-Type: text/html: No such file or directory

【讨论】:

您需要更新版本的邮件【参考方案6】:

在http://senthilkl.blogspot.lu/2012/11/how-to-send-html-emails-using-sendemail.html找到解决方案

sendEmail -f "oracle@server" -t "name@domain.com" -u "Alert: Backup complete" -o message-content-type=html -o message-file=$LOG_FILE  -a $LOG_FILE_ATTACH 

【讨论】:

【参考方案7】:

使用mail 跟进上一个答案:

通常情况下,客户端邮件程序会解释一个人的 html 输出,这可能不会使用固定宽度的字体来格式化内容。因此,您格式良好的 ascii 对齐方式变得一团糟。要按照上帝的意图发送老式的固定宽度,试试这个:

 echo -e "<pre>"
echo "Descriptive text here."
shell_command_1_here
another_shell_command
cat <<EOF

This is the ending text.
</pre><br>
</div>
EOF
 | mail -s "$(echo -e 'Your subject.\nContent-Type: text/html')" to.address@company.com

您不一定需要“此处的描述性文字”。行,但我发现有时第一行可能会根据其内容导致邮件程序以您不希望的方式解释文件的其余部分。首先尝试使用简单描述性文本的脚本,然后以您想要的方式微调输出。

【讨论】:

【参考方案8】:

使用更简单,-a 选项:

cat ~/campaigns/release-status.html | mail -s "Release Status [Green]" -a "Content-Type: text/html" to.address@company.com

【讨论】:

你能解释一下 -a 的作用吗? -a 命令在 CentOS 中不起作用,但在 ubuntu 中起作用

以上是关于如何使用 bash 命令“sendmail”发送 html 电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用sendEmail发送邮件

从命令行使用 sendmail [关闭]

使用命令行和 sendmail 发送带有多个附件的电子邮件

使用sendmail发送邮件

Linux学习-->如何通过Shell脚本实现发送邮件通知功能?

如何使用 perl 和 sendmail 从 URL 发送 pdf [Mail::Sendmail]