JavaMail API - Geri Dönen Mesajlar

Bir mesaj birkaç nedenden dolayı geri dönebilir. Bu sorun rfc1211'de derinlemesine tartışılmıştır . Yalnızca bir sunucu, belirli bir posta kutusunun veya kullanıcı adının varlığını belirleyebilir. Sunucu bir hata algıladığında, orijinal mesajı gönderene başarısızlığın nedenini belirten bir mesaj gönderir.

Teslim Durumu Bildirimlerini kapsayan birçok İnternet standardı vardır, ancak çok sayıda sunucu bu yeni standartları desteklemiyor, bunun yerine bu tür hata mesajlarını döndürmek için geçici teknikler kullanıyor. Bu nedenle , soruna neden olan orijinal mesaj ile geri dönen mesajı ilişkilendirmek çok zorlaşır .

JavaMail, Teslimat Durumu Bildirimlerini ayrıştırma desteği içerir. Bu sorunu çözmek için bir dizi teknik ve buluşsal yöntem vardır. Tekniklerden biri Değişken Zarf Dönüş Yollarıdır. Zarf içindeki dönüş yolunu aşağıdaki örnekte gösterildiği gibi ayarlayabilirsiniz. Bu, geri dönen postaların gönderildiği adrestir. Bunu, From: başlığından farklı bir genel adrese ayarlamak isteyebilirsiniz, böylece uzaktan geri dönmeleri işleyebilirsiniz. Bu , JavaMail'de mail.smtp.from özelliği ayarlanarak yapılır .

Java Sınıfı Oluşturun

Bir java sınıf dosyası oluşturun SendEmailiçeriği aşağıdaki gibidir:

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

Burada özellik olduğunu görebilirsiniz mail.smtp.from farklı ayarlanır gelen adrese.

Derleyin ve Çalıştırın

Artık sınıfımız hazır olduğuna göre, yukarıdaki sınıfı derleyelim. SendEmail.java sınıfını dizine kaydettim:/home/manisha/JavaMailAPIExercise. Sınıf yolunda javax.mail.jar ve activation.jar kavanozlarına ihtiyacımız olacak . Sınıfı (her iki kavanoz da / home / manisha / dizinine yerleştirilir) komut isteminden derlemek için aşağıdaki komutu yürütün:

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

Artık sınıf derlendiğine göre, çalıştırmak için aşağıdaki komutu yürütün:

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

Çıkışı Doğrula

Komut konsolunda aşağıdaki mesajı görmelisiniz:

Sending ....
Sending done ...