我正在尝试使用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:本地地址包含字符串中的控制或空间````邮件递送''。
如何解析此地址而不必捕获异常然后使用它?
感谢您的任何帮助。
一些邮件服务器使用伪造和非法地址发送这些送货通知消息。当然,您应该向邮件服务器供应商报告此错误。
当您等待供应商解决问题时,您可以通过设置以下会话属性在Javamail中处理它:
session.setProperty("mail.mime.address.strict", "false");
session.setproperty()在我的情况下未被认可。我使用了以下实施,它起作用了!
Properties props = new Properties();
props.put("mail.mime.address.strict", "false");
Session session = Session.getDefaultInstance(props);