JavaMail API - Thư bị trả lại

Một tin nhắn có thể bị trả lại vì một số lý do. Vấn đề này được thảo luận chuyên sâu tại rfc1211 . Chỉ một máy chủ mới có thể xác định sự tồn tại của một hộp thư hoặc tên người dùng cụ thể. Khi máy chủ phát hiện ra lỗi, nó sẽ trả về một thông báo chỉ ra lý do không thành công cho người gửi thư gốc.

Có nhiều tiêu chuẩn Internet bao gồm Thông báo trạng thái phân phối nhưng một số lượng lớn máy chủ không hỗ trợ các tiêu chuẩn mới này, thay vào đó sử dụng các kỹ thuật đặc biệt để trả về thông báo lỗi như vậy. Do đó, rất khó để tương quan giữa thư bị trả lại với thư gốc đã gây ra sự cố.

JavaMail bao gồm hỗ trợ phân tích cú pháp Thông báo trạng thái gửi. Có một số kỹ thuật và kinh nghiệm để giải quyết vấn đề này. Một trong những kỹ thuật là Đường dẫn trả về phong bì biến. Bạn có thể đặt đường dẫn trả về trong phong bì như thể hiện trong ví dụ bên dưới. Đây là địa chỉ mà thư trả lại được gửi đến. Bạn có thể muốn đặt địa chỉ này thành một địa chỉ chung, khác với tiêu đề From:, để bạn có thể xử lý các thư trả lại từ xa. Điều này được thực hiện bằng cách đặt thuộc tính mail.smtp.from trong JavaMail.

Tạo lớp Java

Tạo tệp lớp java SendEmail, nội dung của nó như sau:

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

Ở đây chúng ta có thể thấy rằng thuộc tính mail.smtp.from được đặt khác với địa chỉ from .

Biên dịch và Chạy

Bây giờ lớp của chúng ta đã sẵn sàng, chúng ta hãy biên dịch lớp trên. Tôi đã lưu lớp SendEmail.java vào thư mục:/home/manisha/JavaMailAPIExercise. Chúng tôi cần các chum javax.mail.jaractivation.jar trong classpath. Thực thi lệnh bên dưới để biên dịch lớp (cả hai lọ đều được đặt trong thư mục / home / manisha /) từ dấu nhắc lệnh:

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

Bây giờ lớp đã được biên dịch, hãy thực thi lệnh dưới đây để chạy:

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

Xác minh đầu ra

Bạn sẽ thấy thông báo sau trên bảng điều khiển lệnh:

Sending ....
Sending done ...