API JavaMail - Messaggi rimbalzati

Un messaggio può essere respinto per diversi motivi. Questo problema è discusso in profondità in rfc1211 . Solo un server può determinare l'esistenza di una particolare cassetta postale o nome utente. Quando il server rileva un errore, restituirà un messaggio che indica il motivo dell'errore al mittente del messaggio originale.

Esistono molti standard Internet che coprono le notifiche sullo stato di consegna, ma un gran numero di server non supporta questi nuovi standard, utilizzando invece tecniche ad hoc per la restituzione di tali messaggi di errore. Quindi diventa molto difficile correlare il messaggio rimbalzato con il messaggio originale che ha causato il problema.

JavaMail include il supporto per l'analisi delle notifiche sullo stato di consegna. Esistono numerose tecniche ed euristiche per affrontare questo problema. Una delle tecniche è costituita dai percorsi di ritorno dell'inviluppo variabile. È possibile impostare il percorso di ritorno nell'involucro come mostrato nell'esempio seguente. Questo è l'indirizzo a cui vengono inviati i messaggi di mancato recapito. Potresti volerlo impostare su un indirizzo generico, diverso dall'intestazione From:, in modo da poter elaborare rimbalzi remoti. Ciò è possibile impostando la proprietà mail.smtp.from in JavaMail.

Crea classe Java

Crea un file di classe java SendEmail, i cui contenuti sono i seguenti:

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

Qui possiamo vedere che la proprietà mail.smtp.from è impostata diverso da quello da indirizzo.

Compila ed esegui

Ora che la nostra classe è pronta, compiliamo la classe precedente. Ho salvato la classe SendEmail.java nella directory:/home/manisha/JavaMailAPIExercise. Avremmo bisogno dei jars javax.mail.jar e activation.jar nel classpath. Esegui il comando seguente per compilare la classe (entrambi i vasi sono posizionati nella directory / home / manisha /) dal prompt dei comandi:

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

Ora che la classe è compilata, esegui il comando seguente per eseguire:

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

Verifica output

Dovresti vedere il seguente messaggio sulla console di comando:

Sending ....
Sending done ...