使用 Javamail 和 DSN.jar 解析退回的电子邮件

Parsing bounced emails using Javamail and DSN.jar

我找到了使用我自己的 smtp 服务器重定向退回邮件的方法。现在,根据要求,我应该能够使用我的程序阅读退回的电子邮件,例如退回原因、收件人的电子邮件地址、电子邮件内容等。Whosebug 建议 dsn.jar 可能会有帮助。我看到它有一些方法。但是我找不到任何示例来检查它是如何工作的。这是我重定向退回电子邮件的方式,我的问题是如何在此处添加阅读退回电子邮件的功能 inside/outside 以下程序?请帮忙

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.dsn.DeliveryStatus;
import com.sun.mail.dsn.DispositionNotification;
import com.sun.mail.dsn.MessageHeaders;
import com.sun.mail.dsn.MultipartReport;
import com.sun.mail.dsn.Report;

public class SendEmail {
   public static void main(String[] args) throws Exception {
     Properties properties=new Properties();
     InputStream input=new FileInputStream("SendEmail.properties");
     properties.load(input);
      //String smtpServer = "smtp.gmail.com";
      String smtpServer = "Server.Address";
      int port = 25;
      final String userid = "abc@dhv.com";
      final String password = properties.getProperty("EMAIL_PASSWORD1");
      String contentType = "text/html";
      String subject = "test: bounce an email to a different address " +
                "from the sender";
      String to = "bounceee@fauxmail.com";//some invalid address
      String bounceAddr = "redirectingAddress@gmail.com";//change accordingly
      String body = "Test: get message to bounce to a separate email address";
      Properties props = new Properties();
      props.put("mail.smtp.auth", "true");
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.host", smtpServer);
      props.put("mail.smtp.port", "port");
      props.put("mail.transport.protocol", "smtp");
      props.put("mail.smtp.from", bounceAddr);
      Session mailSession = Session.getInstance(props,
         new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
               return new PasswordAuthentication(userid, password);
            }
         });
     MimeMessage message = new MimeMessage(mailSession);
      //SMTPMessage message=new SMTPMessage(mailSession);
      message.addFrom(InternetAddress.parse(userid));
      message.setRecipients(Message.RecipientType.TO, to);
      //message.setHeader("Return-path", bounceAddr);
      message.setSubject(subject);
      message.setContent(body, contentType);
      message.addHeader("Disposition-Notification-To",bounceAddr);
      Transport transport = mailSession.getTransport();
      try {
         System.out.println("Sending ....");
         transport.connect(smtpServer, port, userid, password);
         transport.sendMessage(message,
            message.getRecipients(Message.RecipientType.TO));
         System.out.println("Sending done ...");
      } catch (Exception e) {
         System.err.println("Error Sending: ");
         e.printStackTrace();
      }
      /*System.out.println(message.isMimeType("multipart/report"));
      System.out.println(message.isMimeType("text/html"));
      MultipartReport multireport = (MultipartReport)message.getContent();
      Report report=new Report(multireport);*/
     /* DeliveryStatus status=new DeliveryStatus();
      //status.ge
      DispositionNotification notification=new DispositionNotification();
      notification.getNotifications();
      MessageHeaders headers=new MessageHeaders();
      MultipartReport multiReport=new MultipartReport();
      multiReport.getReturnedMessage();
      //Report
      Report report=new Report();*/

    /*  if (message.isMimeType("multipart/report")) {
          System.out.println("Inside the loop");
          MultipartReport report = (MultipartReport)message.getContent();
          // see com.sun.mail.dsn package javadocs for MutlipartReport
          report.getReturnedMessage();
          MessageHeaders header=new MessageHeaders();
         // header.getRecipients(arg0);
      }*/
      transport.close();
   }
}

阅读退回的邮件就像阅读任何其他邮件一样 - 您必须连接到应用商店,打开文件夹,然后阅读邮件。一旦您拥有表示退回邮件的 Message 对象,您就可以使用上面注释掉的代码类型来处理该邮件的内容。但请注意,Message 对象 不是 您发送的 Message 对象,而是一个完全不同的 Message 对象,它来自与 redirectingAddress@gmail.com 帐户关联的文件夹。