使用Javamail和DSN.jar解析跳转的电子邮件

使用Javamail和DSN.jar解析跳转的电子邮件,java,jakarta-mail,email-parsing,bouncedemail,Java,Jakarta Mail,Email Parsing,Bouncedemail,我找到了使用我自己的smtp服务器重定向被退回的电子邮件的方法。现在,根据要求,我应该能够使用我的程序阅读被退回的电子邮件,如退回的原因、收件人的电子邮件地址、电子邮件内容等。Stackoverflow建议dsn.jar可能会有所帮助。我看到它有一些方法。但我没有找到任何例子来检查它是如何工作的。这是我重定向被退回电子邮件的方式,我的问题是如何在以下程序内/外添加一个功能来读取被退回的电子邮件?请帮忙 import java.io.FileInputStream; import java.io.

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

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对象,它来自与邮件关联的文件夹redirectingAddress@gmail.com帐户