解析javamail中电子邮件中的“from”地址

时间:2014-03-06 16:44:03

标签: parsing email javamail

我正在尝试使用javamail从我的收件箱中阅读电子邮件,并且我专门检查主题为“传递状态通知”的电子邮件。这是代码:

for(Message message:messages){
            for(Address a:message.getFrom()){
                if(message.getSubject().equalsIgnoreCase("Delivery Status Notification")){
                Multipart mp=(Multipart)message.getContent();                                        
                for(int i=0;i<mp.getCount();i++) {
                    BodyPart bodyPart = mp.getBodyPart(i);
                    if (bodyPart.isMimeType("text/*")) {
                    String cont = (String) bodyPart.getContent();
                    System.out.println("Content: "+cont);
                    }
                }                    
                System.out.println("-----\n");
               }
            }

问题是这些通知的发件人是“邮件传递系统”和行

  

地址a:message.getFrom()

抛出错误 - “javax.mail.internet.AddressException:本地地址包含字符串``Mail Delivery System''中的控件或空格。”

如何解析此地址而不必捕获异常然后使用它?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

某些邮件服务器使用虚假和非法的发件人地址发送这些递送通知邮件。当然,您应该将此错误报告给邮件服务器供应商。

当您在等待供应商解决问题时,您可以通过设置以下会话属性在JavaMail中解决此问题:

  session.setProperty("mail.mime.address.strict", "false");

答案 1 :(得分:0)

在我的情况下,

session.setProperty()无法识别。我使用下面的实现,它工作!

Properties props = new Properties();
props.put("mail.mime.address.strict", "false");
Session session = Session.getDefaultInstance(props);