JavaMail-API - Zurückgesendete Nachrichten

Eine Nachricht kann aus mehreren Gründen zurückgeschickt werden. Dieses Problem wird unter rfc1211 ausführlich erörtert . Nur ein Server kann das Vorhandensein eines bestimmten Postfachs oder Benutzernamens feststellen. Wenn der Server einen Fehler feststellt, gibt er eine Nachricht mit dem Grund für den Fehler an den Absender der ursprünglichen Nachricht zurück.

Es gibt viele Internetstandards für Zustellstatusbenachrichtigungen, aber eine große Anzahl von Servern unterstützt diese neuen Standards nicht, sondern verwendet Ad-hoc-Techniken zum Zurückgeben solcher Fehlermeldungen. Daher bekommt es sehr schwierig , die korrelieren prallte Nachricht mit der ursprünglichen Nachricht, die das Problem verursacht.

JavaMail unterstützt das Parsen von Zustellstatusbenachrichtigungen. Es gibt eine Reihe von Techniken und Heuristiken, um dieses Problem zu lösen. Eine der Techniken sind Variable Envelope Return Paths. Sie können den Rückweg im Umschlag wie im folgenden Beispiel gezeigt einstellen. Dies ist die Adresse, an die Bounce-Mails gesendet werden. Möglicherweise möchten Sie eine andere generische Adresse als den From: -Header festlegen, damit Sie Remote-Bounces verarbeiten können. Dies erfolgt durch Festlegen der Eigenschaft mail.smtp.from in JavaMail.

Erstellen Sie eine Java-Klasse

Erstellen Sie eine Java-Klassendatei SendEmail, deren Inhalt wie folgt ist:

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;

public class SendEmail {
   public static void main(String[] args) throws Exception {
      String smtpServer = "smtp.gmail.com";
      int port = 587;
      final String userid = "youraddress";//change accordingly
      final String password = "*****";//change accordingly
      String contentType = "text/html";
      String subject = "test: bounce an email to a different address " +
				"from the sender";
      String from = "[email protected]";
      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", "587");
      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);
      message.addFrom(InternetAddress.parse(from));
      message.setRecipients(Message.RecipientType.TO, to);
      message.setSubject(subject);
      message.setContent(body, contentType);

      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();

      }
      transport.close();
   }// end function main()
}

Hier können wir sehen, dass die Eigenschaft mail.smtp.from anders als die from- Adresse festgelegt ist.

Kompilieren und ausführen

Nachdem unsere Klasse fertig ist, lassen Sie uns die obige Klasse kompilieren. Ich habe die Klasse SendEmail.java im Verzeichnis gespeichert:/home/manisha/JavaMailAPIExercise. Wir müssten die Gläser javax.mail.jar und activation.jar in dem Classpath. Führen Sie den folgenden Befehl aus, um die Klasse (beide Jars befinden sich im Verzeichnis / home / manisha /) an der Eingabeaufforderung zu kompilieren:

javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail.java

Führen Sie nach dem Kompilieren der Klasse den folgenden Befehl aus, um Folgendes auszuführen:

java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail

Überprüfen Sie die Ausgabe

Auf der Befehlskonsole sollte die folgende Meldung angezeigt werden:

Sending ....
Sending done ...