HelloWorld 善戰(zhàn)者,求之于勢(shì),不責(zé)于人;故能擇人而任勢(shì)。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁(yè) ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評(píng)論 :: 0 Trackbacks

          近日,發(fā)現(xiàn)gmail開放了IMAP服務(wù),于是想著iOffice的WebMail功能是否能夠?qū)?yīng)Gmail呢? 雖然不用想都知道WebMail方面,不可能做的比gmail更好。但是出于一種功能驗(yàn)證的考慮,還是進(jìn)行了嘗試用iOffice的WebMail去連接gmail的郵件賬戶。

          這一連接,發(fā)現(xiàn)WebMail只支持pop3/imap/smtp的protocol,而對(duì)gmail的pop3 ssl/imap ssl/smtp ssl的安全連接都不支持,于是奮力去修改,終于今天搞定了。

          接著為了測(cè)試郵件的多樣性,從Hotmail賬戶當(dāng)中轉(zhuǎn)移了一部分郵件進(jìn)入gmail的IMAP Folder,發(fā)現(xiàn)英國(guó)金融時(shí)報(bào)旗下的FT中文網(wǎng)發(fā)送的新聞郵件,居然無法在WebMail中顯示,出現(xiàn)Exception.

          java.io.IOException: Unknown encoding: GB2312
          at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:108)
          at com.sun.mail.handlers.text_plain.getContent(text_plain.java:90)
          at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:775)
          at javax.activation.DataHandler.getContent(DataHandler.java:522)
          at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1395)

          覺得很奇怪,GB2312肯定屬于Java認(rèn)識(shí)的encoding啊? 為什么會(huì)出這種信息呢? 仔細(xì)檢查此郵件的源碼,以及查閱資料。發(fā)現(xiàn)此處所說的Encoding并非是Java Encoding。 而是郵件的一種自有的編碼。 該新聞郵件的編碼

          Date: Thu, 20 Aug 2009 09:09:16 +0800
          MIME-Version: 1.0
          Content-Type: text/html; charset=”gb2312″
          Content-Transfer-Encoding: gb2312
          Message-ID: 1250730614939471@200809NewsLetter

          該郵件的發(fā)送程序把 text/html charset=gb2312的編碼部分,當(dāng)作Content-Transfer-Encoding的編碼,而實(shí)際上JavaMail認(rèn)識(shí)的Content-Transfer-Encoding包含如下幾種:”base64″, “quoted-printable”, “7bit”, “8bit”, “binary”, “uuencode”。

          原則上針對(duì)這種錯(cuò)誤格式的郵件,可以不對(duì)應(yīng),但是考慮到未來可能還有別的問題,于是直接去修改 javax.mail.internet.MimePartDataSource.java,

          public InputStream getInputStream() throws IOException {
          InputStream is;

          try {
          if (part instanceof MimeBodyPart)
          is = ((MimeBodyPart)part).getContentStream();
          else if (part instanceof MimeMessage)
          is = ((MimeMessage)part).getContentStream();
          else
          throw new MessagingException(“Unknown part”);
          String encoding = restrictEncoding(part.getEncoding(), part);
          if (encoding != null){
          if(encoding.equalsIgnoreCase(“GB2312″) ||
          encoding.equalsIgnoreCase(“GBK”)){
          encoding = “7bit”;
          }

          return MimeUtility.decode(is, encoding);
          }else{
          return is;
          }
          } catch (MessagingException mex) {
          throw new IOException(mex.getMessage());
          }
          }

          編譯好以后,放回 sun-javamail-1.4.2.jar,執(zhí)行一遍后,OK了。



          </script>

          posted on 2010-10-09 13:38 helloworld2008 閱讀(1618) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 连山| 太仆寺旗| 基隆市| 宣汉县| 井冈山市| 东宁县| 长顺县| 新干县| 门源| 榆社县| 宜兴市| 洪湖市| 阳江市| 自治县| 松潘县| 贵阳市| 威海市| 屏南县| 洞头县| 舒兰市| 武川县| 永德县| 龙门县| 白山市| 嘉义市| 来凤县| 瑞昌市| 毕节市| 赣榆县| 隆德县| 五原县| 西峡县| 织金县| 杭锦后旗| 汉川市| 南澳县| 胶南市| 潮州市| 长寿区| 广东省| 太康县|