07月28, 2016

Linux发邮件的方式及乱码问题

Linux发邮件

  • python脚本
  • shell脚本

之前一直使用python脚本来发送邮件,后来发现直接使用sendmail服务来发送邮件更方便一些,所以本文就说一下使用mail来发送邮件。

1 shell作为编辑器,编辑完成后ctrl+d结束

mail -s test qh_test@126.com

2 利用管道发送邮件

echo "mail content" | mail -s "mail title" qh_test@126.com

3 以file的内容为邮件内容发信

mail -s "mail title" qh_test@126.com < file

4 以file的内容为邮件内容向多个用户发信

mail -s "mail title" -c qh_test@126.com qh_test1@126.com < file

问题:

使用第二种发式发送邮件时,本地中文不会出现乱码,但是部署到服务端就会出现乱码,标题稳定出现乱码,内容随机出现乱码。

解决:

1 解决标题乱码

利用base64编码标题内容,例如,如果UTF-8编码的字符串标题进行base64编码后的内容为5qCH6aKY,则邮件标题为:

Subject:=?UTF-8?B?5qCH6aKY?=

2 解决内容乱码

解决内容乱码比较简单,首先内容使用UTF-8编码,然后再修改邮件为Content-type为:

Content-Type:text/html;charset=UTF-8

基于此,那么在nodejs代码中发送邮件就可以这样写:

var title = new Buffer("【ONEBOX】报警");
var mail_title = title.toString("base64");
var mail_title = "=?UTF-8?B?"+mail_title+"?=";
var mail_cont = "这里是发送邮件内容";
var mailList = "qh_test@126.com qh_test1@126.com";
var exec = require("child_process").exec;
exec(`echo "${mail_cont}" | mail -s "$(echo -e "${mail_title}\nContent-Type: text/html")" ${mailList}`);

以上。

本文链接:http://westpsk.com/post/sendmail.html

-- EOF --

Comments