Mengirim email dari aplikasi Java merupakan kebutuhan umum. Tidak peduli apakah Anda sedang mengerjakan aplikasi inti Java, aplikasi web, atau aplikasi Java perusahaan, Anda mungkin perlu mengirim email untuk memperingatkan staf dukungan tentang kesalahan, atau cukup mengirim email ke pengguna saat pendaftaran, mengatur ulang kata sandi mereka, atau meminta mereka untuk mengkonfirmasi alamat email setelah pendaftaran. Ada banyak skenario ketika Anda memerlukan kemampuan mengirim email dari aplikasi Java. Dalam aplikasi siap pakai Anda sudah memiliki modul atau perpustakaan yang berfungsi dengan semua fitur untuk mengirim email, seperti kemampuan mengirim lampiran, gambar, termasuk tanda tangan dan teks kaya dalam email, TETAPI jika Anda perlu menulis sesuatu dari awal, maka Java Mail API adalah pilihan yang bagus. Pada artikel ini, kita akan mempelajari cara mengirim email dari aplikasi Java menggunakan mail API ( javax.mail ). Sebelum menulis kode, Anda harus mengetahui beberapa dasar cara kerja email, misalnya Anda memerlukan server SMTP (Simple Mail Transfer Protocol) . Jika Anda menjalankan aplikasi Java di Linux, maka Anda harus tahu bahwa daemon SMTP menggunakan port 25. Anda dapat menggunakan server email apa pun untuk mengirim pesan menggunakan Java, termasuk server email publik seperti GMail, Yahoo atau penyedia layanan lainnya, semuanya yang Anda butuhkan hanyalah detail server SMTP mereka , seperti nama host, port, parameter koneksi, dll. Anda juga dapat menggunakan SSL ( secure sockets layer ), TLS ( Transport Layer Security ) untuk terhubung dan mengirim email dengan aman, namun kami membuat contoh ini sederhana dan berfokus pada logika minimal untuk mengirim surat dari aplikasi Java. Pada artikel selanjutnya kita akan mempelajari cara mengirim email menggunakan lampiran, cara mengirim email berformat HTML, cara melampirkan gambar ke email, cara menggunakan otentikasi SSL untuk terhubung ke server GMail dan mengirim email, dll. Sekarang, mari kita pahami (diskusikan) contoh Java Mail API sederhana ini .
Contoh kode Java untuk mengirim email
Untuk mengirim surat dari program Java, Anda memerlukan Java Mail API dan Java Activation Framework (JAF) ; untuk lebih tepatnya, Anda memerlukan mail-1.4.5.jar , smtp-1.4.4.jar , dan activation-1.1.jar . Anda perlu mengunduh file JAR ini dan memasukkannya ke dalam Classpath Anda untuk menjalankan program ini. Alternatifnya, Anda dapat menggunakan Maven untuk manajemen ketergantungan dan memasukkan semua dependensi di sana. Setelah Anda memiliki semua file JAR ini, cukup ikuti langkah-langkah di bawah ini untuk membuat dan mengirim email menggunakan Java.-
Buat objek
Session
dengan memanggilSession.getDefaultInstance(properties)
, di manaproperties
- berisi semua properti penting, misalnya nama host server SMTP. -
Buat objek
MimeMessage
dengan meneruskan objekSession
yang diperoleh pada langkah sebelumnya. Kami memiliki sekumpulan properti berbeda dalam objek ini seperti penerima email, subjek, isi pesan, lampiran, dll. -
Gunakan
javax.mail.Transport
untuk mengirim email dengan memanggil metode statissend(email)
, dimana email dapat menjadi objekMimeMessage
.
Session
berbeda-beda bergantung pada jenis server SMTP, misalnya, jika Anda menggunakan server SMTP yang tidak memerlukan autentikasi apa pun, Anda dapat membuat objek Session
hanya dengan satu properti, misalnya smtp. mail.host, dan Anda tidak perlu menentukan port karena memiliki port 25 secara default. Di sisi lain, jika Anda menyambung ke server SMTP yang memerlukan autentikasi TLS atau SSL, seperti Host SMTP GMail, Anda perlu menyediakan lebih banyak properti, misalnya mail.smtp.port=547 untuk TLS dan email. smtp.port= 457 untuk SSL. Ini adalah program Java lengkap yang terhubung ke server SMTP standar tanpa otentikasi dan mengirim pesan teks menggunakan Java Mail API.
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;
/**
* Java Program to send text mail using default SMTP server and without authentication.
* You need mail.jar, smtp.jar and activation.jar to run this program.
*
* @author Javin Paul
*/
public class EmailSender{
public static void main(String args[]){
String to = "receive@abc.om"; // sender email
String from = "sender@abc.com"; // receiver email
String host = "127.0.0.1"; // mail server host
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties); // default session
try {
MimeMessage message = new MimeMessage(session); // email message
message.setFrom(new InternetAddress(from)); // setting header fields
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Test Mail from Java Program"); // subject line
// actual mail body
message.setText("You can send mail from Java program by using mail API, but you need" +
"couple of more JAR files e.g. smtp.jar and activation.jar");
// Send message
Transport.send(message); System.out.println("Email Sent successfully....");
} catch (MessagingException mex){ mex.printStackTrace(); }
}
}
Keluaran: Anda dapat mengkompilasi dan menjalankan program ini untuk mengirim email sederhana dari program Java:
$ javac EmailSender.java
$ java EmailSender
Berhasil mengirim email.... Seperti yang Anda lihat, sangat mudah untuk mengirim email dari program Java. Setelah Anda membuat objek MimeMessage
, Anda perlu menambahkan penerima, yang dapat ditentukan di TO
, CC
, BCC
. Setelah selesai dengan penerimanya, kita perlu menentukan subjek surat, dan terakhir, isi surat itu sendiri dengan memanggil metode message.setText()
; Jika Anda ingin mengirim banyak surat, maka metode berikut dapat digunakan untuk menentukan penerima:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Anda dapat menambahkan orang ke bidang TO
menggunakan Message.RecipientType.TO
, ke bidang CC
menggunakan Message.RecipientType.CC
, dan ke BCC
- Message.RecipientType.BCC
.
Kesalahan dan Pengecualian
Ketika banyak pemrogram Java pertama kali mulai menulis program untuk mengirim email, mereka menemukan kesalahan karena kebanyakan dari mereka berpikir bahwa mail.jar dan activation.jar akan cukup untuk mengirim email dari aplikasi Java, padahal sebenarnya tidak demikian, terutama jika Anda mengirim email melalui server SMTP lokal di Linux. Jika Anda menjalankan program ini hanya dengan mail.jar dan activation.jar di CLASSPATH Anda, kemungkinan besar Anda akan mendapatkan kesalahan ini.Pengecualian 1:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
nested exception is:
java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1984)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:656)
at javax.mail.Service.connect(Service.java:345)
at javax.mail.Service.connect(Service.java:226)
at javax.mail.Service.connect(Service.java:175)
at javax.mail.Transport.send0(Transport.java:253)
at javax.mail.Transport.send(Transport.java:124)
at Testing.main(Testing.java:62)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:301)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:229)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1950)
... 7 more
Meskipun solusi untuk kesalahan ini sangat sederhana, namun dapat membingungkan Anda. java.net.ConnectException: Connection refused: connect
Biasanya crash ketika server tidak berfungsi atau port yang Anda sambungkan salah ditentukan. Solusi: selain mail-1.4.5.jar, Anda juga memerlukan smtp-1.4.4.jar dan activation-1.1.jar.
Pengecualian 2:
Ini adalah kesalahan lain yang disebutNoClassDefFoundError
, yang biasanya merujuk pada file JAR yang hilang di Classpath
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
at java.lang.Class.getMethod0(Class.java:2764)
at java.lang.Class.getMethod(Class.java:1653)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
Solusi: Saya berhasil menyelesaikan masalah saya, itu karena Classpath yang salah. Meskipun saya memiliki ketiga JAR yang diperlukan, file kelas Java untuk program tersebut di direktori yang sama, dan menjalankan program dari sana, Java tidak dapat menemukannya. Saya mencoba memasukkan perintah berikut dan program berfungsi dengan baik:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
Email berhasil dikirim.... Harap diperhatikan bahwa direktori saat ini ditandai dengan titik di akhir argumen Classpath. Karena saya menjalankan program di Linux, saya menggunakan titik dua (:) dan bukan titik koma (;) (seperti di Windows). Sekian tentang cara mengirim email dari aplikasi Java menggunakan mail API. Anda mungkin menganggapnya sangat sederhana, karena Anda tidak memerlukan apa pun lebih dari tiga file JAR. Jauh lebih mudah jika Anda menggunakan Gradle atau Maven untuk mengelola dependensi. Dalam tutorial berikut kita akan melihat contoh yang lebih kompleks dari Java Mail API untuk mengirim email dengan lampiran, dengan gambar, dan email yang diformat dengan indah untuk mengirim laporan dan tabel. Terjemahan artikel: Cara Mengirim Email dari Program Java beserta Contohnya
GO TO FULL VERSION