JavaRush /Java Blog /Random-ID /Cara mengirim email dari aplikasi Java (dengan contoh)
PodoBulge
Level 31
Минск

Cara mengirim email dari aplikasi Java (dengan contoh)

Dipublikasikan di grup Random-ID
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. Cara mengirim email dari aplikasi Java (dengan contoh) - 1Dalam 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.
  1. Buat objek Sessiondengan memanggil Session.getDefaultInstance(properties), di mana properties- berisi semua properti penting, misalnya nama host server SMTP.

  2. Buat objek MimeMessagedengan meneruskan objek Sessionyang diperoleh pada langkah sebelumnya. Kami memiliki sekumpulan properti berbeda dalam objek ini seperti penerima email, subjek, isi pesan, lampiran, dll.

  3. Gunakan javax.mail.Transportuntuk mengirim email dengan memanggil metode statis send(email), dimana email dapat menjadi objek MimeMessage.

Jumlah properti yang Anda teruskan untuk membuat objek Sessionberbeda-beda bergantung pada jenis server SMTP, misalnya, jika Anda menggunakan server SMTP yang tidak memerlukan autentikasi apa pun, Anda dapat membuat objek Sessionhanya 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 TOmenggunakan Message.RecipientType.TO, ke bidang CCmenggunakan 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: connectBiasanya 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 disebut NoClassDefFoundError, 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
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION