使用shell脚本发送HTML邮件

Tre*_*ree 49 html linux email bash sendmail

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

Álv*_*lez 59

首先,您需要撰写邮件.最低限度由这两个标题组成:

MIME-Version: 1.0
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

......以及相应的邮件正文:

<!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>
Run Code Online (Sandbox Code Playgroud)

获得后,您可以将相应的信息传递给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
Run Code Online (Sandbox Code Playgroud)

这是一个过于简单的例子,因为你还需要处理字符集,编码,最大行长......但这基本上就是这个想法.

或者,您可以使用Perl或PHP而不是纯shell编写脚本.

更新

shell脚本基本上是一个带有Unix行结尾的文本文件,它以一个名为shebang的行开头,它告诉shell它必须将文件传递给哪个解释器,遵循解释器理解的语言中的一些命令并具有执行权限(在Unix中是一个文件属性).例如,假设您将以下内容保存为hello-world:

#!/bin/sh

echo Hello, world!
Run Code Online (Sandbox Code Playgroud)

然后你分配执行权限:

chmod +x hello-world
Run Code Online (Sandbox Code Playgroud)

你最终可以运行它:

./hello-world
Run Code Online (Sandbox Code Playgroud)

无论如何,这与原始问题无关.在使用它执行高级任务之前,您应该熟悉基本的shell脚本.这里有一些关于bash的链接,一个流行的shell:

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

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

  • 电子邮件绝不应该是HTML,或者除了纯文本之外的任何东西.\*波浪脾气暴躁的老头棒\* (10认同)
  • `-a`不再适用于此.`-a`现在仅用于附件. (6认同)
  • 一些mailx版本(我的手册页在我试过的两台机器上报告了Heirloom mailx 12.5和12.1)不接受-a选项,因为他们抱怨"ContentType:text/html;:没有这样的文件或目录".相反,下面的mutt解决方案就像一个魅力! (5认同)
  • @KraangPrime,什么是 -a 的替代品? (3认同)

mdm*_*dma 47

标签包括'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
Run Code Online (Sandbox Code Playgroud)

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

mutt -e 'set content_type="text/html"' me@mydomain.com -s "subject" <  message.html
Run Code Online (Sandbox Code Playgroud)


Kev*_*Zhu 39

到目前为止,我已经在cmd linux中找到了两种快速方法

  1. 使用旧式邮件

mail -s "$(echo -e "This is Subject\nContent-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

  • 不,@MikeS,`$( )` 内部的双引号与外部的双引号是分开的。试试这个例子:`echo "$(echo "x; echo y")"`。 (2认同)