问题描述

如何使用 shell 脚本发送 HTML 电子邮件?

最佳解决方案

首先你需要撰写消息。最低限度由这两个头组成:

MIME-Version: 1.0
Content-Type: text/html

… 和相应的消息体:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>

<p>Hello, world!</p>

</body>
</html>

一旦你有了,你可以将适当的信息传递给 mail 命令:

body = '...'

echo $body | mail
-a "From: me@example.com"
-a "MIME-Version: 1.0"
-a "Content-Type: text/html"
-s "This is the subject"
you@example.com

这是一个过于简单的例子,因为你还需要照顾字符集,编码,最大行长度… 但这基本上是这个想法。

或者,您可以在 Perl 或 PHP 中编写脚本,而不是纯 shell 。

Update

一个 shell 脚本基本上是一个文本文件,其中 Unix 行结尾以一行叫做 shebang 的方式开始,它告诉 shell 它必须将文件传递给哪个解释器,遵循解释器所理解并具有执行权限的一些命令 (在 Unix 中是这样的文件属性) 。例如,保存以下 hello-world

#!/bin/sh

echo Hello, world!

然后分配执行权限:

chmod +x hello-world

最后你可以运行它:

./hello-world

无论如何,这与原来的问题无关。在进行高级任务之前,您应该熟悉基本的 shell 脚本。这里有几个关于 bash,一个受欢迎的 shell 的链接:

http://www.gnu.org/software/bash/manual/html_node/index.html

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

次佳解决方案

标签包括’sendmail’,所以这里有一个解决方案:

(
echo "From: me@xyz.com "
echo "To: them@xyz.com "
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/alternative; "
echo ' boundary="some.unique.value.ABC123/server.xyz.com"'
echo "Subject: Test HTML e-mail."
echo ""
echo "This is a MIME-encapsulated message"
echo ""
echo "--some.unique.value.ABC123/server.xyz.com"
echo "Content-Type: text/html"
echo ""
echo "<html>
<head>
<title>HTML E-mail</title>
</head>
<body>
<a href='http://www.google.com'>Click Here</a>
</body>
</html>"
echo "------some.unique.value.ABC123/server.xyz.com--"
) | sendmail -t

sendmail 的包装器可以使此工作更容易,例如 mutt

mutt -e 'set content_type="text/html"' me@mydomain.com -s "subject" <  message.html

第三种解决方案

到目前为止,我已经在 cmd linux 中找到了两个快捷方式

  1. 使用旧的邮件

mail -s "$(echo -e "This is SubjectnContent-Type: text/html")" test@yahoo.com < mytest.html

  1. 使用 mutt

mutt -e "my_hdr Content-Type: text/html" test@yahoo.com -s "subject" < mytest.html

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛