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

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

            BlogJava :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks
          <2010年10月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          留言簿(5)

          隨筆分類(156)

          隨筆檔案(159)

          文章分類(1)

          相冊

          收藏夾(1)

          聯(lián)接技術(shù)類文章

          最新隨筆

          搜索

          最新評論

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

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

          接著為了測試郵件的多樣性,從Hotmail賬戶當中轉(zhuǎn)移了一部分郵件進入gmail的IMAP Folder,發(fā)現(xiàn)英國金融時報旗下的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認識的encoding啊? 為什么會出這種信息呢? 仔細檢查此郵件的源碼,以及查閱資料。發(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的編碼部分,當作Content-Transfer-Encoding的編碼,而實際上JavaMail認識的Content-Transfer-Encoding包含如下幾種:”base64″, “quoted-printable”, “7bit”, “8bit”, “binary”, “uuencode”。

          原則上針對這種錯誤格式的郵件,可以不對應(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) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 呼和浩特市| 麟游县| 玉溪市| 许昌市| 潢川县| 冷水江市| 清远市| 淳化县| 元氏县| 宜川县| 务川| 抚松县| 富锦市| 沙洋县| 东阿县| 凯里市| 香格里拉县| 宣汉县| 金堂县| 宣恩县| 青田县| 舒兰市| 策勒县| 贵阳市| 枞阳县| 五家渠市| 车险| 东源县| 朝阳区| 青川县| 卓资县| 雅江县| 承德市| 湄潭县| 晋中市| 谷城县| 钦州市| 陕西省| 屏东县| 台中县| 晋城|