使用java mail api阅读电子邮件时的字符编码问题

时间:2016-08-28 06:39:34

标签: javamail encode

您好我正在使用Java mail Api从邮箱中读取emil。 对于电子邮件,“来自地址”包含中文字符,如下所示

(krishna 国际快 <12139@ty.com> ). 

阅读完电子邮件后,当我使用message.getFromAddress();从邮件地址获取时 来自地址的内容如下所示

?utf-8?Q?Kris=EF=BC=88=E4=BF=9E=E7=94=9F=EF=BC=89?= <12139@ty.com>

如何从地址获取原件。

1 个答案:

答案 0 :(得分:0)

从邮箱中读取电子邮件时的电子邮件地址编码问题已修复。

StringBuffer sbFrom =null;
sbFrom = new StringBuffer();
Address[] in = msg.getFrom();

                for (Address address : in) {                    
                    System.out.println("FROM: " + address.toString());

                    sbFrom.append(address.toString());
                }

我为此创建了两个解决方案。请在下面找到它们。

解决方案1:

创建正则表达式并检查正则表达式,如果电子邮件地址与正则表达式匹配,则我们解码电子邮件地址。

请检查以下代码。

String ENCODED_PART_REGEX_PATTERN="=\\?([^?]+)\\?([^?]+)\\?([^?]+)\\?=";
                 Pattern pattern=Pattern.compile(ENCODED_PART_REGEX_PATTERN);
                 Matcher m =pattern.matcher(sbFrom.toString());
                 if(m.find()){
                     System.out.println("FROM: " +MimeUtility.decodeWord( sbFrom.toString()));
                 }else{

               System.out.println("FROM: " + sbFrom.toString());
               }

解决方案2:编写一个解码给定电子邮件地址的方法。如果我们在解码时得到javax.mail.internet.ParseException,则表示电子邮件地址没有任何编码字符,因此我们返回普通字符串。 请遵守以下方法。

 public String decodeAddress(String emailId) throws UnsupportedEncodingException{
       String string = "";
       try{
           string =  MimeUtility.decodeWord(emailId);
       }catch(ParseException e){
           System.out.println("ParseException occured so return the same string");
           string =emailId; 

       }
       return string;
   }