在实现Linux中mail功能自动发送邮件时,需要发送中文内容,以及中文主题的邮件。
整个实现过程中遇到了三大问题,如下:
1、如何发送html格式的邮件内容?
2、如何发送中文内容的邮件?
3、如何发送中文标题的邮件?(在解决这个问题时话费不少时间)
4、发送的邮件内容以附件形式显示怎么办?
解答:
1、发送html格式的邮件内容,只需在mail命令的主题中设置参数Content-Type:text/html即可。命令如下:
echo "Hello <br>world" | mail -s "$(echo -e "TestSubject \nContent-Type:text/html")" Anne-Wei@126.com
2、首先检查自己系统中是否支持中文编码,输入locale命令查看如下所示:
Anne-Wei:~ $ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
如果未使用中文编码,可在环境变量中加入如下一行:
export LANG=zh_CN.UTF-8
检查结束后,在mail命令的主题参数中设置charset=UTF-8,命令如下:
echo "Hello <br>中文测试" | mail -s "$(echo -e "TestSubject \nContent-Type:text/html;charset=UTF-8")" Anne-Wei@126.com
3、到了这一部,基本就可以实现,你所需要的自动发邮件的功能了,但是,如果邮件标题是中文,能否正常发送成功呢?
这时你就会发现,邮件的中文标题乱码。
在使用mail命令发送中文标题时,需要先将中文base64编码后,使用UTF-8编码方式来输出。(本篇直接给出命令,下篇将详细讲如何使用base64编码)
命令如下:
echo "Hello <br>中文测试" | mail -s "$(echo -e "=?UTF-8?B?$(echo -n 'Test中文标题' | base64)?=\nContent-Type:text/html;charset=UTF-8")" Anne-Wei@126.com
如此以来,就可发送中文标题的中文邮件内容啦……