JavaRush /Blog Jawa /Random-JV /Cara ngirim email saka aplikasi Java (kanthi conto)
PodoBulge
tingkat
Минск

Cara ngirim email saka aplikasi Java (kanthi conto)

Diterbitake ing grup
Ngirim email saka aplikasi Java minangka syarat umum. Ora preduli apa sampeyan nggarap aplikasi Java inti, aplikasi web, utawa aplikasi Java perusahaan, sampeyan bisa uga kudu ngirim email kanggo menehi tandha marang staf dhukungan babagan kesalahan, utawa mung ngirim email menyang pangguna nalika ndhaptar, ngreset sandhi, utawa takon wong-wong mau kanggo konfirmasi alamat email sawise registrasi. Ana akeh skenario nalika sampeyan mbutuhake kemampuan kanggo ngirim email saka aplikasi Java. Cara ngirim email saka aplikasi Java (kanthi conto) - 1Ing aplikasi sing wis siyap, sampeyan wis duwe modul utawa perpustakaan sing bisa digunakake karo kabeh fitur kanggo ngirim email, kayata kemampuan kanggo ngirim lampiran, gambar, kalebu teken lan teks sing sugih ing email, TAPI yen sampeyan kudu nulis saka awal, banjur Java Mail API minangka pilihan sing apik. Ing artikel iki, kita bakal sinau carane ngirim email saka aplikasi Java nggunakake API mail ( javax.mail ). Sadurunge nulis kode, sampeyan kudu ngerti sawetara dhasar babagan cara kerja email, contone sampeyan butuh server SMTP (Simple Mail Transfer Protocol) . Yen sampeyan mbukak aplikasi Java ing Linux, sampeyan kudu ngerti manawa daemon SMTP nggunakake port 25. Sampeyan bisa nggunakake server mail apa wae kanggo ngirim pesen nggunakake Java, kalebu server mail umum kayata GMail, Yahoo utawa panyedhiya layanan liyane, kabeh sampeyan butuh rincian server SMTP , kayata jeneng host, port, paramèter sambungan, lsp. Sampeyan uga bisa nggunakake SSL ( lapisan soket aman ), TLS ( Transport Layer Security ) kanggo nyambungake lan ngirim email kanthi aman, nanging kita nggawe conto iki prasaja lan fokus ing logika minimal kanggo ngirim layang saka aplikasi Java. Ing artikel sabanjure kita bakal sinau carane ngirim email nggunakake lampiran, carane ngirim email format HTML, carane masang gambar menyang email, carane nggunakake otentikasi SSL kanggo nyambung menyang server GMail lan ngirim email, etc. Saiki, ayo padha ngerti (rembugan) conto Java Mail API sing prasaja iki .

Tuladha kode Jawa kanggo ngirim email

Kanggo ngirim layang saka program Java, sampeyan mbutuhake Java Mail API lan Java Activation Framework (JAF) ; dadi luwih tepat, sampeyan kudu mail-1.4.5.jar , smtp-1.4.4.jar , lan activation-1.1.jar . Sampeyan kudu ngundhuh file JAR iki lan kalebu ing Classpath kanggo mbukak program iki. Utawa, sampeyan bisa nggunakake Maven kanggo manajemen dependensi lan kalebu kabeh dependensi ing kana. Sawise sampeyan duwe kabeh file JAR iki, tindakake langkah ing ngisor iki kanggo nggawe lan ngirim email nggunakake Java.
  1. Nggawe obyek Sessionkanthi nelpon Session.getDefaultInstance(properties), ngendi properties- ngemot kabeh sifat penting, contone, jeneng host saka server SMTP.

  2. Nggawe obyek MimeMessagekanthi ngliwati obyek Sessionsing dipikolehi ing langkah sadurunge. Kita duwe macem-macem properti ing obyek iki kayata panampa email, subyek, isi pesen, lampiran, lsp.

  3. Gunakake javax.mail.Transportkanggo ngirim email kanthi nelpon cara statis send(email), ing ngendi email bisa dadi obyek MimeMessage.

Jumlah properti sing sampeyan lakoni kanggo nggawe obyek Sessionbeda-beda gumantung saka jinis server SMTP, contone, yen sampeyan nggunakake server SMTP sing ora mbutuhake otentikasi, sampeyan bisa nggawe obyek Sessionkanthi mung siji properti, contone, smtp. .mail.host, lan sampeyan ora perlu kanggo nemtokake port amarga wis port 25 minangka standar. Ing sisih liya, yen sampeyan nyambungake menyang server SMTP sing mbutuhake TLS utawa otentikasi SSL, kayata Host SMTP GMail, sampeyan kudu nyedhiyakake properti sing luwih akeh, kayata mail.smtp.port=547 kanggo TLS lan mail. smtp.port = 457 kanggo SSL. Iki minangka program Jawa lengkap sing nyambung menyang server SMTP standar tanpa otentikasi lan ngirim pesen teks nggunakake 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(); }

     }

}
Output: Sampeyan bisa ngumpulake lan mbukak program iki kanggo ngirim email prasaja saka program Jawa:
$ javac EmailSender.java
$ java EmailSender
Kirim email kasil.... Kaya sing sampeyan ngerteni, gampang banget ngirim email saka program Java. Sawise sampeyan nggawe obyek MimeMessage, sampeyan kudu nambah panampa, sing bisa ditemtokake ing TO, CC, BCC. Sawise rampung karo panampa, kita kudu nemtokake subyek layang kasebut, lan, pungkasane, isi surat kasebut dhewe kanthi nelpon metode message.setText(); Yen sampeyan pengin nggawe pirang-pirang surat, banjur cara ing ngisor iki bisa digunakake kanggo nemtokake panampa:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Sampeyan bisa nambah wong menyang lapangan TOnggunakake Message.RecipientType.TO, menyang lapangan CCnggunakake Message.RecipientType.CC, lan kanggo BCC- Message.RecipientType.BCC.

Kasalahan lan Pangecualian

Nalika akeh programer Java pisanan miwiti nulis program kanggo ngirim email, padha nemoni kesalahan amarga akeh sing ngira yen mail.jar lan activation.jar bakal cukup kanggo ngirim email saka aplikasi Java, sing ora kaya ngono. utamané yen sampeyan ngirim email liwat server SMTP lokal ing Linux. Yen sampeyan mbukak program iki mung mail.jar lan activation.jar ing CLASSPATH Panjenengan, sampeyan bakal paling kamungkinan njaluk kesalahan iki.

Pangecualian 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
Senajan solusi kanggo kesalahan iki prasaja banget, bisa mbingungake sampeyan. java.net.ConnectException: Connection refused: connectBiasane nabrak nalika server ora bisa digunakake utawa port sing sampeyan sambungake ora ditemtokake kanthi bener. Solusi: saliyane mail-1.4.5.jar, sampeyan uga kudu smtp-1.4.4.jar lan aktivasi-1.1.jar.

Pangecualian 2:

Iki minangka kesalahan liyane sing diarani NoClassDefFoundError, sing biasane nuduhake file JAR sing ilang ing 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: Aku bisa ngatasi masalahku, amarga Classpath sing salah. Sanajan aku duwe kabeh telung JARs dibutuhake, file kelas Jawa kanggo program ing direktori padha, lan mbukak program saka ing kono, Jawa ora bisa tokoh metu. Aku nyoba printah ing ngisor iki lan program bisa digunakake:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
Kasil dikirim email.... Elinga yen direktori saiki ditandhani titik ing pungkasan argumen Classpath. Wiwit aku mbukak program ing Linux, aku nggunakake titik koma (:) tinimbang titik koma (;) (kaya ing Windows). Iku kabeh babagan carane ngirim email saka aplikasi Java nggunakake API mail. Sampeyan bisa nemokake iki prasaja banget, amarga sampeyan ora mbutuhake luwih saka telung file JAR. Luwih gampang yen sampeyan nggunakake Gradle utawa Maven kanggo ngatur dependensi. Ing tutorial ing ngisor iki, kita bakal weruh conto Java Mail API sing luwih rumit kanggo ngirim email kanthi lampiran, gambar, lan email sing diformat kanthi apik kanggo ngirim laporan lan tabel. Terjemahan artikel: Cara Ngirim Email saka Program Java kanthi Conto
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION