最近項目需要使用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"