郵件傳送時的亂碼問題
前不久在我所在的專案中做了一個傳送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檔案本身的編碼有關。
相關文章
- 解決jenkins 傳送郵件圖片亂碼問題Jenkins
- Laravel 傳送純文字郵件時提示亂碼Laravel
- 定時傳送郵件
- 在python中傳送郵件亂碼了怎麼辦?Python
- node 定時傳送郵件
- 郵件的傳送
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- 郵件傳送
- 傳送郵件
- JavaMail 郵件傳送,有意思的附件名亂碼 → 客戶端正常,web端亂碼JavaAI客戶端Web
- java 傳送郵件 css-style 樣式丟失錯亂問題,有解決方案JavaCSS
- 谷歌郵箱,配置傳送郵件密碼谷歌密碼
- Ubuntu的郵件傳送Ubuntu
- laravel 傳送郵件修改密碼Laravel密碼
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- java郵件傳送Java
- python傳送郵件Python
- Django——郵件傳送Django
- gmail傳送郵件AI
- phpcms傳送郵件PHP
- Laravel 傳送郵件Laravel
- thinkjs 傳送郵件JS
- SpringBoot傳送郵件Spring Boot
- SpringBoot郵件傳送Spring Boot
- Laravel傳送郵件Laravel
- PHP傳送郵件PHP
- nodejs 傳送郵件NodeJS
- 一次郵件傳送協議SMTP問題排查協議
- 如何傳送電子郵件到別人郵箱?電子郵件傳送的方法
- Laravel 重置密碼傳送郵件分析Laravel密碼
- 專案部署時郵件傳送錯誤
- 使用oracle job定時傳送email郵件OracleAI
- golang傳送郵件(qq郵箱)Golang
- Android 快速傳送郵件Android
- 使用phpmailer傳送郵件PHPAI
- SpringBoot傳送郵件(二)Spring Boot
- SpringBoot傳送郵件(三)Spring Boot
- 使用 smtplib 傳送郵件
- Python SMTP傳送郵件Python