狂奔 lion

          自強(qiáng)不息

          Apache commons-Email中文問(wèn)題的解決辦法

          Apache commons-email是對(duì)javamailAPI的一層封裝,經(jīng)封裝后的發(fā)送郵件的代碼變得極為簡(jiǎn)單,但這里有一個(gè)中文支持的小問(wèn)題。
          commons-email主要的封裝類是Email類,這是一個(gè)抽象類,該框架給出了SimpleEmail的默認(rèn)實(shí)現(xiàn),但該實(shí)現(xiàn)并不支持中文,即使調(diào)用Email的setCharset也不起作用。
          事實(shí)上,SimpleEmail調(diào)用了Email超類中的setContent方法來(lái)設(shè)置郵件內(nèi)容(通過(guò)setMsg方法),而在設(shè)置內(nèi)容時(shí),又采用了默認(rèn)的英文字符集,我們只要在代碼中直接調(diào)用email類的setContent方法就可以支持中文了,但要注意setContent具備兩個(gè)參數(shù),第一個(gè)是內(nèi)容對(duì)象,第二個(gè)則是內(nèi)容類型,我們把第二個(gè)參數(shù)設(shè)置為:
          SimpleEmail.TEXT_PLAIN + "; charset=utf-8", 即可。理由如下面源代碼所示:
              public void setContent(Object aObject, String aContentType)
              {
                    ......
                      // set the charset if the input was properly formed
                      String strMarker = "; charset=";
                      int charsetPos = aContentType.toLowerCase().indexOf(strMarker);

                      if (charsetPos != -1)
                      {
                          // find the next space (after the marker)
                          charsetPos += strMarker.length();
                          int intCharsetEnd =
                              aContentType.toLowerCase().indexOf(" ", charsetPos);

                          if (intCharsetEnd != -1)
                          {
                              this.charset =
                                  aContentType.substring(charsetPos, intCharsetEnd);
                          }
                          else
                          {
                              this.charset = aContentType.substring(charsetPos);
                          }
                      }
                  }
              }
              即有一個(gè)文本解析的過(guò)程。


           @2008 楊一. 版權(quán)所有. 保留所有權(quán)利

          posted on 2006-08-01 20:14 楊一 閱讀(996) 評(píng)論(2)  編輯  收藏 所屬分類: Java EE

          評(píng)論

          # re: Apache commons-Email中文問(wèn)題的解決辦法 2007-07-13 19:29 chaoyy@gmail.com

          不好意思,按照上述方法,中文問(wèn)題依然沒(méi)解決。
          multiEmail.setContent(body, SimpleEmail.TEXT_PLAIN + "; charset=utf-8");
          是不是不止這一個(gè)地方需要改?  回復(fù)  更多評(píng)論   

          # re: Apache commons-Email中文問(wèn)題的解決辦法 2007-12-06 12:41 隔葉黃鶯

          我也有研究過(guò) 用 apache commons-email 輕松發(fā)送無(wú)亂碼郵件
          http://www.aygfsteel.com/Unmi/archive/2006/12/07/124065.html

          其中有發(fā)簡(jiǎn)單郵件,以及后面我加評(píng)論補(bǔ)充了發(fā)HTML郵件及帶附件的發(fā)送  回復(fù)  更多評(píng)論   

          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          公告

          本人在blogjava上發(fā)表的文章及隨筆除特別聲明外均為原創(chuàng)或翻譯,作品受知識(shí)產(chǎn)權(quán)法保護(hù)并被授權(quán)遵從 知識(shí)分享協(xié)議:署名-非商業(yè)性使用-相同方式共享 歡迎轉(zhuǎn)載,請(qǐng)?jiān)谵D(zhuǎn)載時(shí)注明作者姓名(楊一)及出處(www.aygfsteel.com/yangyi)
          /////////////////////////////////////////
          我的訪問(wèn)者

          常用鏈接

          留言簿(5)

          隨筆分類(55)

          隨筆檔案(55)

          相冊(cè)

          Java

          其他技術(shù)

          生活

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          自強(qiáng)不息


          用心 - 珍惜時(shí)間,勇于創(chuàng)造
          主站蜘蛛池模板: 兴安县| 陈巴尔虎旗| 武乡县| 宁海县| 灌云县| 萝北县| 会同县| 三原县| 奈曼旗| 丰城市| 台湾省| 屏南县| 淳安县| 龙泉市| 崇明县| 宜章县| 资中县| 日喀则市| 霍城县| 沈阳市| 涟水县| 灵寿县| 普安县| 辉县市| 云和县| 苗栗市| 江达县| 汶上县| 革吉县| 台州市| 哈密市| 明溪县| 彭水| 长垣县| 桐梓县| 芮城县| 常德市| 鹿泉市| 杭锦旗| 乌兰察布市| 红河县|