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

33

有人有可用的演示吗?

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


HTML邮件是什么意思?附件中的HTML页面还是邮件本身应该采用HTML格式? - Space
电子邮件应该以HTML格式。 - omg
1
发送邮件需要使用sendmail吗?我可以使用基本的POSIX邮件实现同样的功能,但无法访问sendmail。 - Nicholas Anderson
8个回答

63

1
@NiKiZe 如果您使用 MIME 功能,例如 Content-Type:,则需要使用 MIME 版本。显然,在这里您需要使用它。 - tripleee
True,应该遵循规范。然而,许多客户端将使用Content-Type头而不关心MIME-Version。如果这是针对更大的受众群体,当然应该遵循规范,但是对于快速的hack(如果您需要输入它以将电子邮件发送给自己),可能不需要获取所需的结果。 - NiKiZe
这里是MIME-Version要求[RFC2045](https://tools.ietf.org/html/rfc2045#section-4) - Marko Kohtala
1
这个有效。如果你的HTML在一个文件中,只需删除“echo $ {message};”,并替换为“cat yourfile.html;”。 - Santiago Trias

19

如果我理解正确,您希望使用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的配置详细信息,请参考这个链接。希望本信息对您有所帮助。


如果电子邮件内容已经预先生成,并在名为content.html的文件中保存,如何使用sendmail从A发送到B? - omg
如果你想从外部文件中读取内容,可以使用一些 bash 脚本来读取外部 HTML 文件中的行,并将其放置在电子邮件的数据字段中,或者只需简单地复制粘贴 HTML 代码。另外,请查看病毒提供的链接。希望这有所帮助。 - Space
1
我唯一不清楚的部分是: boundary="PAA08673.1018277622/server.xyz.com"。这是什么意思? - omg
sendmail在实际发送电子邮件之前需要进行配置,对吗? - omg
1
我认为boundary='...'这一行需要添加到它上面的那一行,也就是Content-Type:...;这一行,对吗?我试图进行编辑,但 StackExchange 阻止了我的更改,因为字符数不够。 :( - bgoodr
显示剩余3条评论

6

我知道你要求使用sendmail,但为什么不使用默认的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


5

-a选项是什么?

参考man页面:

-a file
          Attach the given file to the message.

结果:

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

您需要更新邮件的版本。 - Jasonw

5

不是作者所问的同一件事,但可能仍然有帮助。 - ypnos

4

2

关于使用邮件跟进上一篇回答:

通常情况下,客户端邮件程序会解释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

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


-2

使用 -a 选项更简单:

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

你能解释一下 -a 是什么意思吗? - MaXi32
-a 命令在 CentOS 中无效,但在 Ubuntu 中有效。 - MaXi32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接