问题描述
如何使用 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 中找到了两个快捷方式
-
使用旧的邮件
mail -s "$(echo -e "This is SubjectnContent-Type: text/html")" test@yahoo.com < mytest.html
-
使用 mutt
mutt -e "my_hdr Content-Type: text/html" test@yahoo.com -s "subject" < mytest.html
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。