使用Javamail和DSN.jar

时间:2016-07-14 14:50:36

标签: java javamail email-parsing bouncedemail

我找到了使用自己的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();
   }
}

1 个答案:

答案 0 :(得分:2)

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