Java Mail adalah library optional dari bahasa Java yang dapat digunakan sebagai sarana untuk mengirim email.
Suatu aplikasi web terkadang membutuhkan mengirimkan email balasan otomatis pada saat seorang user mendaftar.
Karena library ini sifatnya optional yang artinya tidak langsung satu bundle dengan JDK yang kita download, maka kita harus mendownloadnya sendiri.
Jika kita masih menggunakan Java 5 maka kita harus mendownload secara terpisah JavaBean Activation Framework, tapi jika kita menggunakan Java 6 ( JDK 1.6 ) ke atas maka JavaBean Activation Framework sudah satu bundle dengannya.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibi9UboSdBveBlXI26d8L4hTJgzm0L6H3pO3J31BvzuljLyvfKfv1qNii5tU9woYIbh_TAGHiYlK2T45dBTsY3D8M6MfuQl06Ji4uZDPNKNgIDhybppSX29CCVV-nuAzvLmcBZXCjisvwN/s200/added.png)
Pembahasan :
Jika Transport diambil dari class Session dan dinyatakan secara eksplisit menggunakan SSLuntuk pengirimannya seperti dibawah :
maka seluruh properti untuk cara ini harus menjadi smtps, bukan smtp, seperti mail.smtp.host menjadi mail.smtps.host, dan begitu juga untuk property lainnya.
Suatu aplikasi web terkadang membutuhkan mengirimkan email balasan otomatis pada saat seorang user mendaftar.
Karena library ini sifatnya optional yang artinya tidak langsung satu bundle dengan JDK yang kita download, maka kita harus mendownloadnya sendiri.
Jika kita masih menggunakan Java 5 maka kita harus mendownload secara terpisah JavaBean Activation Framework, tapi jika kita menggunakan Java 6 ( JDK 1.6 ) ke atas maka JavaBean Activation Framework sudah satu bundle dengannya.
1. Download Java Mail
- Library Java Mail tersedia di sini https://java.net/projects/javamail/pages/Home
- Bagi yang masih menggunakan JDK 1.5 ke bawah silakan cari sendiri link download JavaBean Activation Framework.
2. Tambahkan library .jar dari Java Mail ke ClassPath projek kita.
Berikut contoh menggunakan Netbeans :
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsPFxPfvY0PafrpAFjJI3wRrIu3ZloaQRtXIRix7Smau0oiyXiPJCd1x11fR9p_PoxfR4tfGFAzVuQ7aurCOoHKnZtBZPz6R-_BtEWJAzav0Ylgz52jVYfGpsUsL_jUSVW1dDGLNp2iuTW/s200/add+jar.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibi9UboSdBveBlXI26d8L4hTJgzm0L6H3pO3J31BvzuljLyvfKfv1qNii5tU9woYIbh_TAGHiYlK2T45dBTsY3D8M6MfuQl06Ji4uZDPNKNgIDhybppSX29CCVV-nuAzvLmcBZXCjisvwN/s200/added.png)
3. Time for Coding
Ada 2 cara dasar untuk mengirim email :
1. Menggunakan metode static ( paling praktis )
import java.io.IOException; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; 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 IOException { try { Properties properties=new Properties(); properties.put("mail.smtp.host","smtp.gmail.com"); properties.put("mail.smtp.auth","true"); properties.put("mail.smtp.ssl.enable","true"); properties.put("mail.smtp.port", "465");//default port dari smptp Session session=Session.getInstance(properties); session.setDebug(true); MimeMessage pesan=new MimeMessage(session); pesan.setFrom("xxxxxx@gmail.com");//isi dengan gmail kalian sendiri, biasanya sama nanti dengan username pesan.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxx@yahoo.com"));//isi dengan tujuan email pesan.setSubject("Java Mail"); pesan.setText("Email dikirim menggunakan Java Mail."); String username="xxxxx@gmail.com"; //ganti dengan gmail kalian sendiri String password="xxxxxxx"; //ganti dengan password kalian sendiri Transport.send(pesan, username, password); } catch (MessagingException ex) { ex.printStackTrace(); } } }
2. Menggunakan fungsi send(...) tidak static dari class Transport
import java.io.IOException; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; 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 IOException { try { Properties properties=new Properties(); properties.put("mail.smtps.host","smtp.gmail.com"); properties.put("mail.smtps.auth","true"); properties.put("mail.smtps.ssl.enable","true"); properties.put("mail.smtps.port", "465");//default port dari smptp Session session=Session.getInstance(properties); session.setDebug(true); MimeMessage pesan=new MimeMessage(session); pesan.setFrom("xxxxx@gmail.com");//isi dengan gmail kalian sendiri, biasanya sama nanti dengan username pesan.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxx@yahoo.com"));//isi dengan tujuan email pesan.setSubject("Java Mail"); pesan.setText("Email dikirim menggunakan Java Mail."); String username="xxxxxx@gmail.com";//isi dengan gmail kalian sendiri String password="xxxxx";//isi dengan password sendiri Transport transport = session.getTransport("smtps"); transport.connect(username, password); transport.sendMessage(pesan, pesan.getAllRecipients()); transport.close(); } catch (MessagingException ex) { ex.printStackTrace(); } } }
Pembahasan :
·
Alamat host
SMTP
Cara 1:
properties.put("mail.smtp.host","smtp.gmail.com");
Cara 2 :
properties.put("mail.smtps.host","smtp.gmail.com");
Jika Transport diambil dari class Session dan dinyatakan secara eksplisit menggunakan SSLuntuk pengirimannya seperti dibawah :
Transport transport=session.getTransport("smtps");
maka seluruh properti untuk cara ini harus menjadi smtps, bukan smtp, seperti mail.smtp.host menjadi mail.smtps.host, dan begitu juga untuk property lainnya.
·
Authentikasi
properties.put("mail.smtp.auth","true");atau
properties.put("mail.smtps.auth","true");
Properti diatas mengisyaratkan Java Mail untuk melakukan
authentikasi menggunakan username dan password untuk account email yang
bersangkutan.
Kebanyakan email server memerlukan authentikasi untuk
memastikan server tidak digunakan untuk open relay sehingga disalahgunakan
untuk mengirim spam.
·
TLS atau
SSL
Gunakan salah satu jangan keduanya di setting propertinya.
Server SMTP bisa mendukung keduanya atau hanya salah satu,
jika mendukung keduanya disarankan menggunakan TLS karena TLS adalah generasi
berikutnya dari SSL.
SSL :
SSL :
properties.put("mail.smtp.ssl.enable","true");
Properti diatas bisa dihilangkan jika kita memanggil Transport seperti di bawah ini :
Transport transport=session.getTransport("smtps");Properti yang menyatakan bahwa sambungan harus menggunakan Security Socket Layer ( SSL ).
Default port untuk SSL adalah 465 dan jika tidak menggunakan
SSL port default server SMTP adalah 25.
Kebanyakan server SMTP gagal terhubung jika menggunakan port
lama 25 yang artinya tidak bisa menggunakan port tidak aman karena port 25 itu
berarti tidak menggunakan SSL.
TLS :
props.put("mail.smtp.starttls.enable","true");
Properti untuk menggunakan TLS, dimana TLS adalah penerus
dari SSL.
Default portnya adalah 587.
·
Port
props.put("mail.smtp.port","587");
Properti untuk mengatur port dari server SMTP. Jika tidak
diatur maka akan menggunakan port default yang sesuai dengan metode
pengirimannya, jika SSL menggunakan 465 dan jika TLS menggunakan 587 dan jika
tidak diatur SSL atau TLS maka akan menggunakan port lama 25.
·
Session
Session session=Session.getInstance(props); session.setDebug(true);
Properti
yang sudah diatur dijadikan argument untuk Session yang nantinya akan terhubung
ke server SMTP.
Jika
setDebug(…) pada Session di set true , maka
detail proses pengiriman akan ditampilan di stdout, sehingga kita
bisa menganalisa proses pengiriman.
Gambar
dibawah ini salah satu contoh outputnya:
·
Transport
Static
method :
Transport.send(pesan, username,password);
Dengan menggunakan fungsi static maka kita tidak perlu
menutup koneksi karena akan otomatis tertutup setelah pengiriman.
Kekurangannya adalah kita tidak bisa meng-attach
listener untuk mendapat callback untuk diproses ketika terjadi proses pengiriman.
Fungsi
biasa :
Transport transport=session.getTransport("smtps"); transport.connect(username, password); transport.sendMessage(pesan, pesan.getAllRecipients()); transport.close();
Dengan cara ini koneksi harus secara eksplisit ditutup close() tapi dengan cara
ini kita bisa meng-attach listener untuk mendapat callback sewaktu proses
pengiriman.
Selamat Mencoba!
Anda bisa melihat nama host untuk berbagai email server dari gmail, yahoo mail, hotmail dll di sini daftar nama host email server atau silakan googling juga banyak
thanks your tutorial,,
BalasHapusit is work :D
Agan kenapa pas program saya jalankan keterangan errornya : AUTH LOGIN command trace suppressed , padahal login saya benar
BalasHapusscriptnya seperti apa...
Hapuskalau saya mau buat kirim ke banyak address bagaimana?
BalasHapus