最近项目需要使用mailto标签来调用客户端,并且把邮件模板填到客户端。
mailto 的用法:
a标签直接调用:
<a href="mailto:example@qq.com?cc=example2@qq.com&subject=有未结算的单据&body=您有未付清的账单">发送邮件</a>
js调用:
sendEmial(){ var subject = "余额通知"; var to = "test@qq.com"; var cc = "bc.@126.com"; var body = "你好,您的余额不足1 %0d%0a换行"; var url=""; url="mailto:"+to+"?cc="+cc+"&subject="+subject+"&body="+body; document.location.href=url; }
使用mailto乱码与mailto无关,所以解决方法从客户端来做。
我们的项目只要求支持foxmail和outlook。我们直接按上面的写法,outlook正常,foxmail乱码。
经过测试发现foxmail支持GBK编码,所有从后台直接把内容转换成GBK:如:URLEncoder.encode("内容","gbk");则内容转换成GBK:%b1%ea%cc%e2;把它直接赋给body,foxmail乱码解决。
此时再看outlook,转换成GBK后,outlook乱码了。解决办法:
打开outlook——工具——选项——邮件格式——国际选项——Internet协议(对mailto:协议启用UTF-8支持)复选框去除选中——点击确定就OK了。(outlook中文版默认是选中的,去除选中即可)
这样乱码问题就解决了。不过对于outlook可能得挨个设置了。
总结:针对不同的情况,我们去设置不同字符编码即可。
附:更改window默认邮件客户端,修改注册表:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\mailto\UserChoice]
"Progid"="outlook.URL.mailto"
"Progid"="outlook.URL.mailto"
或者
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\mailto\UserChoice]
"Progid"="foxmail.URL.mailto"
"Progid"="foxmail.URL.mailto"