郵件傳送時的亂碼問題
前不久在我所在的專案中做了一個傳送html郵件模板的升級包,選一個人群,選一個模板,然後傳送。
很簡單的一個小功能,可是在coding的時候還是遇到了一些小問題。其中最主要的一個問題,就是模板檔案本身的字符集的問題。
上面的程式碼建立一個MimeMessage,再簡單不過的事情了。
然後根據模板名稱獲取html檔案內容,接著我做了這樣一件事情,把模板內容轉成gb2312編碼。
在郵件正文中,查詢<title>XXX</title>,title的value就作為郵件的主題。這時候,就出問題了。
我是這麼寫的:
選了幾個郵件模板也測試過,當時也沒發現問題。可是上線後,使用者使用的時候說主題出現亂碼。讓使用者把模板發過來,本地再進行測試,居然傳送後的郵件正文格式,都變成了純文字。
使用下面的設定主題的方式後,就正常了:
暫時還沒有深入的去查詢原因,直覺上是認為和html檔案本身的編碼有關。
很簡單的一個小功能,可是在coding的時候還是遇到了一些小問題。其中最主要的一個問題,就是模板檔案本身的字符集的問題。
Properties props = System.getProperties();
Session session;
props.put("mail.smtp.host", strSMTPAdress);
props.put("mail.smtp.port", strSMTPPort);
if (strSenderPassword == null) {
props.put("mail.smtp.auth", "false");
session = Session.getDefaultInstance(props);
} else {
props.put("mail.smtp.auth", "true");
MyAuthenticator myauth = new MyAuthenticator(strSenderEmail, strSenderPassword);
session = Session.getDefaultInstance(props, myauth);
}
MimeMessage message = new MimeMessage(session);
上面的程式碼建立一個MimeMessage,再簡單不過的事情了。
然後根據模板名稱獲取html檔案內容,接著我做了這樣一件事情,把模板內容轉成gb2312編碼。
try{
temp = IOUtils.toString(IOUtils.toInputStream(temp, "gb2312"));
// temp = new String(temp.getBytes("gb2312"),"ISO-8859-1");
} catch (IOException e){
logger.error("模板讀取後,string格式轉換時出錯.", e);
return null;
}設定郵件正文:
message.setText(temp, "gb2312");
message.setDataHandler(new DataHandler(temp, "text/html;charset=gb2312"));
在郵件正文中,查詢<title>XXX</title>,title的value就作為郵件的主題。這時候,就出問題了。
我是這麼寫的:
message.setSubject("=?GB2312?B?" + enc.encode(title.getBytes()) + "?=");
選了幾個郵件模板也測試過,當時也沒發現問題。可是上線後,使用者使用的時候說主題出現亂碼。讓使用者把模板發過來,本地再進行測試,居然傳送後的郵件正文格式,都變成了純文字。
使用下面的設定主題的方式後,就正常了:
message.setSubject(title);
暫時還沒有深入的去查詢原因,直覺上是認為和html檔案本身的編碼有關。
相關文章
- Laravel 傳送純文字郵件時提示亂碼Laravel
- 請教:如何解決JAVAMAIL傳送html格式郵件時的亂碼問題JavaAIHTML
- 解決jenkins 傳送郵件圖片亂碼問題Jenkins
- HP-UX mailx傳送郵件出現中文亂碼問題UXAI
- 傳送郵件出現問題
- 利用Jmail傳送帶附件的郵件時亂碼的解決方案AI
- 定時傳送郵件
- foxmail能收郵件,但是無法傳送郵件的問題AI
- node 定時傳送郵件
- Linux配置msmtp+mutt傳送郵件(可放在指令碼中定時傳送郵件)Linux指令碼
- 收到263定時傳送郵件的傳送提醒
- 郵件的傳送
- laravel傳送啟用郵件的思路和問題Laravel
- 郵件傳送庫原始碼原始碼
- 郵件傳送
- 傳送郵件
- crontab導致的頻繁傳送郵件的問題
- 在python中傳送郵件亂碼了怎麼辦?Python
- 谷歌郵箱,配置傳送郵件密碼谷歌密碼
- Ubuntu的郵件傳送Ubuntu
- laravel 傳送郵件修改密碼Laravel密碼
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- JavaMail 郵件傳送,有意思的附件名亂碼 → 客戶端正常,web端亂碼JavaAI客戶端Web
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- 用 apache commons-email 輕鬆傳送無亂碼郵件ApacheAI
- Laravel 傳送郵件Laravel
- PHP傳送郵件PHP
- Django——郵件傳送Django
- java郵件傳送Java
- Laravel傳送郵件Laravel
- gmail傳送郵件AI
- Oracle郵件傳送Oracle
- java傳送郵件Java
- Powershell郵件傳送
- thinkphp 郵件傳送PHP
- centos 傳送郵件CentOS
- phpcms傳送郵件PHP
- JavaMail郵件傳送在linux環境下不能傳送的問題解決JavaAILinux