API JavaMail - Pesan Terpental
Sebuah pesan dapat terpental karena beberapa alasan. Masalah ini dibahas secara mendalam di rfc1211 . Hanya server yang dapat menentukan keberadaan kotak surat atau nama pengguna tertentu. Ketika server mendeteksi kesalahan, itu akan mengembalikan pesan yang menunjukkan alasan kegagalan kepada pengirim pesan asli.
Ada banyak standar Internet yang mencakup Pemberitahuan Status Pengiriman tetapi sejumlah besar server tidak mendukung standar baru ini, sebagai gantinya menggunakan teknik ad hoc untuk mengembalikan pesan kegagalan tersebut. Oleh karena itu, sangat sulit untuk menghubungkan pesan pentalan dengan pesan asli yang menyebabkan masalah.
JavaMail menyertakan dukungan untuk mengurai Pemberitahuan Status Pengiriman. Ada sejumlah teknik dan heuristik untuk menangani masalah ini. Salah satu tekniknya adalah Variable Envelope Return Paths. Anda dapat menyetel jalur pengembalian di amplop seperti yang ditunjukkan pada contoh di bawah ini. Ini adalah alamat tujuan pengiriman email bouncing. Anda mungkin ingin menyetel ini ke alamat umum, berbeda dari header Dari:, sehingga Anda dapat memproses pantulan jarak jauh. Ini dilakukan dengan menyetel properti mail.smtp.from di JavaMail.
Buat Kelas Java
Buat file kelas java SendEmail, yang isinya adalah sebagai berikut:
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()
}
Di sini kita dapat melihat bahwa properti mail.smtp.from disetel berbeda dari alamat from .
Kompilasi dan Jalankan
Sekarang kelas kita sudah siap, mari kita kompilasi kelas di atas. Saya telah menyimpan kelas SendEmail.java ke direktori:/home/manisha/JavaMailAPIExercise. Kita membutuhkan jars javax.mail.jar dan activation.jar di classpath. Jalankan perintah di bawah ini untuk mengkompilasi kelas (kedua jars ditempatkan di direktori / home / manisha /) dari command prompt:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail.java
Sekarang kelas telah dikompilasi, jalankan perintah di bawah ini untuk menjalankan:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail
Verifikasi Output
Anda akan melihat pesan berikut di konsol perintah:
Sending ....
Sending done ...