2016-07-14 18 views
1

自分のSMTPサーバを使用してバウンスした電子メールをリダイレクトする方法を発見しました。今、要件に応じて、私はバウンスの理由、受信者の電子メールアドレス、電子メールのコンテンツなど、私のプログラムを使用してバウンスされた電子メールを読むことができるはずです。私にはいくつかの方法があることがわかりました。しかし、私はそれがどのように動作しているかを確認するための例は見つけられません。ここで私はバウンスされた電子メールをリダイレクトする方法ですが、私の質問は、バウンスされた電子メールを以下のプログラムの内外に読み取る機能を追加する方法です。助けてください。Javamailと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 = "[email protected]"; 
     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 = "[email protected]";//some invalid address 
     String bounceAddr = "[email protected]";//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(); 
    } 
} 

答えて

0

バウンスメッセージを読むことは、他のメッセージを読むことと似ています。ストアに接続し、フォルダを開き、メッセージを読む必要があります。バウンスされたメッセージを表すMessageオブジェクトを取得したら、上でコメントアウトした種類のコードを使用してそのメッセージのコンテンツを処理できます。ただし、Messageオブジェクトはではなく、があなたが送信したMessageオブジェクトではなく、[email protected]アカウントに関連付けられたFolderからの完全に異なるMessageオブジェクトになります。

関連する問題