2012-02-21 87 views
1

我的Java代碼發送電子郵件給用戶時出現問題。電子郵件的編碼存在一些問題。當電子郵件到達電子郵件帳戶時,主題行($主題)具有編碼問題,因爲在主題文本的末尾添加了奇怪的字符(?)。添加到我的主題文本末尾的奇怪字符(?)

的電子郵件內容本身是好的只是在主題行(?)我都找遍了,但無法找到,使用Unicode和內容類型爲text/html郵件正文後有特殊字符 (ó),但沒有問題同一修補程序不適用於主題行。

我有發用JavaMail電子郵件,與像 文字這一項在主題類:

「Estimado伊萬·埃斯科韋多:

問題是,當郵件到達時它的目的地,它 到達這樣:

「Estimado㈣ñ埃斯科韋多:

所有áéíóú等特殊字符被替換爲?

可能是什麼問題,以及如何解決它?

+0

你說過奇怪的字符已被添加到主題行末尾,但具體問題似乎只是用特殊符號代替了「特殊字符」。現在到底是什麼問題?您的問題標題和問題描述與描述的症狀不符。 – BalusC 2012-02-21 13:08:41

+0

感謝您的回覆,對不好的解釋抱歉,如果這些字符á,é,í,ó,ú是郵件的主題,它將被替換爲?同樣的事情發生在郵件中的郵件,但在改變內容類型與「文本/ html」和使用unicode它正在工作,但同樣的事情是不與主題,只是顯示unicode谷,如果我爲主題的unicode也。 – 2012-02-21 13:20:49

+1

RFC5322標題僅爲7位ASCII;如果你想使用8位字符,你必須按照RFC2048對它們進行編碼。 – tripleee 2012-02-21 14:54:50

回答

2

你應該使用類似的東西正確讀取消息:

TextMessage txtMessage = (TextMessage)message; 
ByteArrayInputStream bais = new ByteArrayInputStream(txtMessage.getText().getBytes ("ISO-8859-15")) 

編輯:

桑傑找到了解決辦法。

爲了發送,使用前請正確設置消息:

MimeUtility.encodeText(SubjectText, "ISO-8859-15", "Q") 

encodeText

編碼RFC 822 「文本」 標記爲郵件安全的形式根據RFC 2047

檢查給定的Unicode字符串是否爲非US-ASCII字符。如果該字符串僅包含US-ASCII字符,則按原樣返回。如果字符串包含非US-ASCII字符,則首先使用指定的字符集進行字符編碼,然後使用B或Q編碼進行傳輸編碼。結果字節然後作爲僅包含ASCII字符的Unicode字符串返回。

請注意,此方法應該用於僅編碼「非結構化」RFC 822標頭。

+0

感謝您的回覆,郵件主題的主要問題,如果這些字符,é,í,ó,ú是郵件的主題,它將取代?同樣的事情發生在郵件中的郵件,但在改變內容類型與「文本/ html」和使用unicode它正在工作,但同樣的事情是不與主題,只是顯示unicode谷,如果我爲主題的unicode也。 – 2012-02-21 13:26:18

+0

你是否設置了這樣的主題:'message.setString(「Subject」,subject);'?如果是,那麼此時的主題是否被正確編碼? – 2012-02-21 13:41:53

+1

我得到了Fix for this issue.extra char可以通過使用下面的代碼添加在主題中,當我們設置主題時:mailNotificationHelper.setSubject((MimeUtility.encodeText(SubjectText,「ISO-8859-15」,「Q」))) ; – 2012-02-22 06:26:46

相關問題