您的位置:首页 > Web前端 > HTML

利用sendmail命令发送html格式邮件

2012-04-24 11:03 363 查看
在做一些Linux的shell脚本监控时,经常会遇到要利用sendmail命令发送各种监控数据的邮件,通常我们可以利用shell脚本把结果成html代码,这样发送到邮件里就更直观的去看监控数据了。

这里写一个简单的案例:

把监控数据写入一个文件中,例如mail.txt,在文件的的最前部分加入以下内容

From: Admin <admin@test.com>

To: Luxiaok <luxiaok@abc.com>
Content-type: text/html;charset=UTF-8
Subject: Alter Mail

<table bgcolor=red><tr><td>Warning:VPS seems shut down</td></tr>
<tr><td>IP address:

上面代码的意思就不解释了(From和To字段可以直接写邮件地址,可以不用加发件人名字Admin,当然尖括号也就不需要了),我这里是做了一个服务器是否在线的监控(代码就省略了,重点讲sendmail),然后再把监控数据写入到上面代码的下面就可以了,然后再做一个收尾工作:

echo "</td></tr></table>" >> mail.txt

最后就可以发送了:

cat mail.txt | sendmail -t

可以去尝试一下,当然要记得启动sendmail服务呀,否则邮件是发送不出去的。

2013年3月8日补充:

在Shell终端发送含有中文收件人名称、中文发件人名称以及中文标题的邮件

可以直接在From,To,Subject中写中文,这在腾讯、163邮箱系统是可以正常识别出来的,新浪识别出来为乱码,当然邮件内容不会乱码。

来看看怎么解决,看一个脚本内容:

sendmail -t << EOF
From: =?UTF-8?B?566h55CG5ZGY?= <webmaster@luxiaok.com>
To: =?UTF-8?B?6ZmG5bCPSw==?= <me@luxiaok.com>
Content-type: text/html;charset=utf-8
Subject: =?UTF-8?B?5rWL6K+V6YKu5Lu2?=
<table bgcolor=red><tr><td>这是一封测试邮件</td></tr>
<tr><td>测试,Test!
</td></tr></table>
EOF

执行这个脚本,看看效果:




可以从上图看出来,主题、发件人、收件人、内容都正常显示了中文,新浪的测试就不给图了。

解释下代码的含义:

可以看到在From、To、Subject三个字段的中文都进行了特殊处理,都是以=?UTF-8?B?开头,以?=结束,而在这两者之间的内容就是中文,进行了转码,可以到这个网站进行转换和查询:

http://www.base64encode.org/

这样进行了转码之后,就在新浪、QQ、以及网易163邮箱能正常显示中文了。注意只是特殊处理了From,To,Subject三个字段的内容,而主题内容的内容是不会乱码,并且上面的代码里也指定了邮件内容的编码为UTF-8,建议这样指定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: