spring 傳送郵件中的亂碼情況
只是在網上找了些資料,經過實踐發現好使,加了些備註。
編碼
郵件頭(參見RFC822,RFC2047)只能包含US-ASCII字元。郵件頭中任何包含非US-ASCII字元的部分必須進行編碼,
使其只包含US-ASCII字元。所以使用java mail傳送中文郵件必須經過編碼,否則別人收到你的郵件只能是亂碼一堆。
不過使用java mail 包的解決方法很簡單,用它自帶的MimeUtility工具中encode開頭的方法(如encodeText)
對中文資訊進行編碼就可以了。
例子:
MimeMessage mimeMsg = new MimeMessage(mailSession);
//讓javamail決定用什麼方式來編碼 ,編碼內容的字符集是系統字符集mimeMsg.setSubject( MimeUtility.encodeText( Subject) );
//使用指定的base64方式編碼,並指定編碼內容的字符集是gb2312
mimeMsg.setSubject( MimeUtility.encodeText( Subject,”gb2312”,”B”));
通常對郵件頭的編碼方式有2種,
一種是base64方式編碼,一種是QP(quoted-printable)方式編碼,javamail根據具體情況來選擇編碼方式。
如“txt測試”編碼後內容如下:
=?GBK?Q?Txt=B2=E2=CA=D4
裡面有個=?GBK?Q?,GBK表示的是內容的字符集,?Q?表示的是以QP方式編碼的,後面緊跟的才是編碼後的中文字元。所以用MimeUtility工具
編碼後的資訊裡包含了編碼方式的資訊。
(上面的不用開發人員自己處理,API已經處理好了,直接交給他們處理就好了)
郵件的正文也要進行編碼,但它不能用MimeUtility裡的方法來編碼。
郵件正文的編碼方式的資訊是要放在Content-Transfer-Encoding這個郵件頭引數中的,而MimeUtility裡面的方法是將編碼方式的資訊放在編
碼後的正文內容中。所以如果你對正文也用MimeUtility進行處理,那麼其他郵件程式就不
會正常顯示你編碼的郵件,因為其他郵件軟體如outlook,foxmail只會根據Content-Transfer-Encoding
這個裡面的資訊來對郵件正文進行解碼。
其實,郵件正文部分的編碼javamail已經自動幫你做了,當你傳送郵件的時候,它會自己決定編碼方式,並把編碼方式的資訊放入Content-
Transfer-Encoding這個郵件頭引數中,然後再發送。所以你所要做的就是直接把郵件正文的內容放入郵件中就可以了。
(
MimeMessage mime = mailSender.createMimeMessage();
MimeMessageHelper helper;
.......
//之前設定為UTF-8,在某些接收的郵件伺服器中有亂碼的情況,改成GBK就好了
//郵件的內容,直接放入就行
helper = new MimeMessageHelper(mime, true, "GBK");
)
對郵件正文的編碼方式比較多,包括了base64和QP方式,還有一些如7bit,8bit等等,因為javamail自動為郵件正文編碼,所以我就不一一祥
敘了。
例子:
//處理郵件正文
MimeBodyPart mbp=new MimeBodyPart();
if ( ContentType() == null || ContentType.equals(""))
mbp.setText( Content );
else
mbp.setContent( Content, Content );
(下面的俺沒用過。。。。。)
解碼
javamail包中的MimeUtility工具中也提供了對郵件資訊解碼的方法,都是以decode開頭的一些方法(如decodeText)
例子:
String Subject = mimemsg.getSubject();
String ChSubject = MimeUtility.decodeText(Subject);
對於base64和QP編碼後資訊,decode* 方法能將他們正確的解碼,但是,如果指定的字符集不對,那麼javamail就會出現錯誤,不能正確地將
其解碼。
如有的郵件系統將”txt測試”編碼後如下:
=?x-unkown?Q?Txt=B2=E2=CA=D4
這裡指定的字符集是x-unknown,是非明確的字符集,javamail就不能正確的處理了,但是”測試”這兩個中文字還是按照gbk字符集編碼的,
所以你可以手工的將編碼方式資訊改正確,再用decode*方法來解碼。
例子:
if ( str.indexOf("=?x-unknown?") >=0 ){
str = str.replaceAll("x-unknown","gbk" ); // 將編碼方式的資訊由x-unkown改為gbk
try{
str = MimeUtility.decodeText( str ); //再重新解碼
}catch( Exception e1){
return str ;
}
decode*方法都是根據在編碼資訊中包含的編碼方式的資訊來解碼,所以decode*方法對郵件正文解碼是無效的,因為郵件正文中不包含編碼方
式的資訊。
同編碼一樣,郵件正文的解碼也是由javamail做了。Javamail根據Content-Transfer-Encoding裡的資訊,來對郵件的正文解碼。
客戶程式從javamail取得的正文內容字符集為iso-8859-1,所以還要將字符集轉換一下,例:
String CorrectContent = new String( Content.getbytes(“iso-8859-1”),”gb2312”);
CorrentContent為正確的郵件正文了
相關推薦
spring 傳送郵件中的亂碼情況
只是在網上找了些資料,經過實踐發現好使,加了些備註。 編碼 郵件頭(參見RFC822,RFC2047)只能包含US-ASCII字元。郵件頭中任何包含非US-ASCII字元的部分必須進行編碼, 使其只包含US-ASCII字元。所以使用java mail傳送中文郵件必須經過編碼
基於SSM的spring傳送郵件的實現
郵件傳送功能是我們在開發中非常常見的一個需求,對於各種賬號的註冊繫結和賬號啟用都是非常好用的。因此今天我們來學習一下在spring中實現傳送郵件的功能。 1.匯入jar包。首先我們需要在我們spring專案中新增以下兩個jar包(我是使用的maven所以直接配置依賴資訊)
java spring 傳送郵件
一 匯入jar 匯入spring-context-support-4.0.5.RELEASE.jar相關jar 二 配置spring配置檔案 這裡可以靈活配置發件郵箱伺服器、發件郵箱埠、發件使用者名稱、密碼 如果系統發件伺服器資訊定死在proper
SSM 框架整合 spring 傳送郵件功能實現!
基於SSM的 spring 傳送郵件的實現 由於考慮到專案中需要,如果程式出現異常或其它問題,可以傳送郵件來及時提醒後臺維護人員處理。所以目前考慮使用JavaMail來實現郵件傳送!如下,是我整理的一些內容,做個筆記記錄下:(當然,在這功能實現之前,需要搭建好
Spring傳送郵件時遇到的錯誤
Spring傳送郵件時發生如下異常: Exception in thread "main" org.springframework.mail.MailAuthenticationException: Authentication failed; nested excepti
spring傳送郵件時遇到錯誤org.springframework.mail.MailAuthenticationException: Authentication failed;
spring 傳送郵件時遇到異常org.springframework.mail.MailAuthenticationException org.springframework.mail.MailAuthenticationException: Authentication
解決jenkins 傳送郵件圖片亂碼問題
1.在本地mac上測試郵件傳送正常 傳送郵件內容圖片沒有亂碼 2.公司測試伺服器是一臺windows2008的系統jmeter + ant jenkins 安裝完成後 設定郵件傳送格式模板,設定附件傳送方式, jenkins 自動執行後傳送郵件 發現郵件內容圖片是亂碼&n
JavaMail傳送中文郵件中主題亂碼的解決方法
我們的程式經常會出現這樣一個問題,在WinXp下測試是正常的,而到了伺服器(Linux作業系統)上就出現這個問題。 1、 由於郵件我寫的程式的郵件主題是寫在配置檔案(. properties)中的,再通過native2ascii把中文郵件主題從本地碼(簡體中文Wind Xp 是GBK)轉換
Spring Boot中使用JavaMailSender傳送郵件
相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如何在Spring Boot中使用JavaMailSender傳送郵件。 快速入門 在Spring
Spring Boot學習(十四)之Spring boot中使用QQ郵箱傳送郵件
相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如
使用spring框架中的元件傳送郵件的詳細說明
原創作者:http://blog.csdn.net/caimengyuan/article/details/51224269 在進行專案開發的時候,要做一個通過傳送郵件驗證碼的功能來找回密碼。spring傳送郵件的過程這篇部落格寫的太好了。 首先進入自己的QQ郵箱,在設定
解決pycharm左側項目文件名中文字體亂碼情況?中文顯示口口口口.
name ros 分享 img 亂碼 中文 alt behavior mage 解決pycharm左側項目文件名中文字體亂碼情況?中文顯示口口口口. 點擊file,進入settings 出現 Appearance & Behavior 點擊Appearance
Spring JavaMail傳送郵件
JavaMail的介紹 JavaMail,顧名思義,提供給開發者處理電子郵件相關的程式設計介面。它是Sun釋出的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。 雖然JavaMail是Sun的A
spring boot傳送郵件,使用的velocity模板(html)
新增依賴: <!--郵件依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&
Oracle 儲存過程中傳送郵件,並支援使用者驗證 中文標題和內容
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
使用spring的JavaMailSender傳送郵件
步驟: 一:pom.xml <!-- java郵件 --> <dependency> &nb
Spring JavaMailSender傳送郵件
個人選擇的傳送服務伺服器是QQ,所以要進行開啟QQ郵箱的SMTP服務,過程如圖所示: 在賬戶下設定開啟SMTP服務,需記住顯示的STMP密碼,點選“開啟”後發簡訊過去即可開啟 EmailSendTest: import org.junit.Test; im
Linux實用技巧——mail傳送郵件命令以及中文亂碼解決
文章目錄 0 前言及準備 1 mailx安裝及配置 1.1 安裝 1.2 編輯配置檔案 2 傳送郵件 2.1 無正文郵件 2.2 有正文郵件 3 郵件中文亂碼問題解決
laravel中傳送郵件
laravel中使用郵箱的163,QQ郵箱傳送郵件 需要注意的是:使用QQ郵箱的話,需要開啟POP3和SMTP服務。開啟方式如下: QQ郵箱 > 設定 > 賬戶 需要開啟服務.png 當開啟成功會生成金鑰,這個
使用 spring封裝的javamail linux伺服器傳送郵件失敗解決
原文參考:https://blog.csdn.net/a540891049/article/details/79385471 由於某些平臺的linxu伺服器為了安全起見 遮蔽了傳送郵件的常用埠 25、465、587 下面我用QQ郵箱舉例子 用Linux