Mailto参数和乱码

一、参数介绍

相信这个发邮件的链接都不陌生了,但是它的参数有时候却不是很清楚,我在网上找了些资料,整理了它的参数,下面介绍一下。

1、主送(to):mailto:mumu@example.com,其中mumu@example.com就是收件人地址。

2、抄送(cc):mailto:mumu@example.com?cc=javier@example.com,其中mumu@example.com是收件人地址,javier@example.com是抄送人地址。

3、密送(bcc):mailto:mumu@example.com?cc=javier@example.com&bcc=javiermu@example.com,bcc=后面的就是指密送人地址啦。

4、多个人收件人:mailto:mumu@example.com;javier@example.com;javiermu@example.com,即每个收件人之间用”;”隔开。

5、邮件主题(subject):mailto:mumu@example.com?subject=这是一封测试邮件的主题。这样单击后在邮件客户端就能将这个主题填充进去。

6、邮件正文(body):mailto:mumu@example.com?subject=这是一封测试邮件的主题&body=这是一个测试邮件的正文。

总结一下:mailto后为收件人地址,多人收件用逗号隔开,cc后为抄送地址,bcc后为密件抄送地址,subject后为邮件的主题,body后为邮件的正文内容,如果mailto后面同时有多个参数的话,第一个参数必须以”?”开头,后面的每一个都以”&”开头。

将上面的知识链接起来的一个实例:
mailto:mumu@example.com,javier@example.com?cc=javiermu@example.com&bcc=javiermumu@example.com&subject=这是一份测试邮件的主题。&body=这是一封测试邮件的正文。

二、邮件乱码

当你的subject和body后面的内容是含有中文的时候,你点击了mailto链接,会发现客户端有乱码出现。这是由于没有进行url的编码导致的,如果你的网页时utf-8的,还需要将文字的编码先转换成gbk再编码即可。

在PHP的环境中,我们可以用PHP函数iconv()将UTF-8编码转化为GBK编码,再调用urlencode()函数。例如:

echo urlencode(iconv('utf-8', 'gbk', '这是一封测试邮件的主题。'))

在Java的环境中,可以这样做:

<%=java.net.URLEncoder.encode("这是一封测试邮件的主题。", "GBK")%>

在.net的环境中,可以这样做:

HttpUtility.UrlEncode(这是一封测试邮件的主题。", Encoding.UTF8);//这是以utf-8字符编码 HttpUtility.UrlEncode(这是一封测试邮件的主题。", Encoding.Default);//这是以本地默认字符编码

三、其他解决方案

考虑到大部分客户并不是都习惯安装邮件客户端,只是偶尔需要邮件分享一下的时候,他们并不会去安装客户端,所以有了另一种解决方法,可以使用QQ邮箱推出的邮我功能。

登陆QQ邮箱,在“设置”中点击“账户”选项卡,然后拉到最底就可以看到了。

image

Javier生成的邮我: