JavaRush /Java Blog /Random-TL /Paano magpadala ng email mula sa isang Java application (...
PodoBulge
Antas
Минск

Paano magpadala ng email mula sa isang Java application (na may halimbawa)

Nai-publish sa grupo
Ang pagpapadala ng email mula sa isang Java application ay isang karaniwang kinakailangan. Hindi mahalaga kung nagtatrabaho ka sa isang pangunahing Java application, isang web application, o isang enterprise Java application, maaaring kailanganin mong magpadala ng email upang alertuhan ang mga kawani ng suporta tungkol sa mga error, o magpadala lamang ng isang email sa mga user sa pagpaparehistro, i-reset ang kanilang password, o hilingin sa kanila na kumpirmahin ang email address pagkatapos ng pagpaparehistro. Mayroong maraming mga sitwasyon kapag kailangan mo ng kakayahang magpadala ng mga email mula sa isang Java application. Paano magpadala ng email mula sa isang Java application (na may halimbawa) - 1Sa mga handa na application, mayroon ka nang module o library na gumagana sa lahat ng feature para sa pagpapadala ng mga email, tulad ng kakayahang magpadala ng mga attachment, larawan, kabilang ang mga lagda at rich text sa mga email, PERO kung kailangan mong magsulat ng isang bagay mula sa simula, kung gayon ang Java Mail API ay isang mahusay na pagpipilian. Sa artikulong ito, matututunan natin kung paano magpadala ng mga email mula sa isang Java application gamit ang mail API ( javax.mail ). Bago magsulat ng code dapat mong malaman ang ilang pangunahing kaalaman sa kung paano gumagana ang email, halimbawa kailangan mo ng SMTP (Simple Mail Transfer Protocol) server . Kung pinapatakbo mo ang iyong Java application sa Linux, dapat mong malaman na ang SMTP daemon ay gumagamit ng port 25. Maaari mong gamitin ang anumang mail server upang magpadala ng mga mensahe gamit ang Java, kabilang ang mga pampublikong mail server tulad ng GMail, Yahoo o anumang iba pang service provider, lahat kailangan mo ang kanilang mga detalye ng SMTP server , tulad ng hostname, port, mga parameter ng koneksyon, atbp. Maaari mo ring gamitin ang SSL ( secure sockets layer ), TLS ( Transport Layer Security ) para secure na kumonekta at magpadala ng mga email, ngunit ginawa naming simple ang halimbawang ito at nakatutok sa minimal na logic para sa pagpapadala ng mga titik mula sa isang Java application. Sa mga susunod na artikulo, matututunan natin kung paano magpadala ng email gamit ang mga attachment, kung paano magpadala ng HTML formatted na email, kung paano mag-attach ng mga larawan sa isang email, kung paano gamitin ang SSL authentication para kumonekta sa GMail server at magpadala ng mga email, atbp. Ngayon, unawain natin (talakayin) itong simpleng halimbawa ng Java Mail API .

Halimbawa ng Java code para sa pagpapadala ng email

Upang magpadala ng liham mula sa isang Java program, kakailanganin mo ang Java Mail API at Java Activation Framework (JAF) ; para maging mas tumpak, kakailanganin mo ang mail-1.4.5.jar , smtp-1.4.4.jar , at activation-1.1.jar . Kailangan mong i-download ang mga JAR file na ito at isama ang mga ito sa iyong Classpath upang patakbuhin ang program na ito. Bilang kahalili, maaari mong gamitin ang Maven para sa pamamahala ng dependency at isama ang lahat ng mga dependency doon. Kapag nakuha mo na ang lahat ng JAR file na ito, sundin lang ang mga hakbang sa ibaba para gumawa at magpadala ng email gamit ang Java.
  1. Lumikha ng isang bagay Sessionsa pamamagitan ng pagtawag Session.getDefaultInstance(properties), kung saan properties- naglalaman ng lahat ng mahahalagang katangian, halimbawa, ang pangalan ng host ng SMTP server.

  2. Lumikha ng isang bagay MimeMessagesa pamamagitan ng pagpasa dito ng bagay Sessionna nakuha sa nakaraang hakbang. Mayroon kaming hanay ng iba't ibang katangian sa bagay na ito gaya ng tatanggap ng email, paksa, katawan ng mensahe, mga attachment, atbp.

  3. Gamitin ito javax.mail.Transportupang magpadala ng email sa pamamagitan ng pagtawag sa isang static na paraan send(email), kung saan maaaring maging object ang email MimeMessage.

Ang bilang ng mga pag-aari na ipinapasa mo upang lumikha ng isang bagay Sessionay naiiba depende sa uri ng SMTP server, halimbawa, kung gumagamit ka ng isang SMTP server na hindi nangangailangan ng anumang pagpapatunay, maaari kang lumikha ng isang bagay Sessionna may isang pag-aari lamang, halimbawa smtp. mail.host, at hindi mo na kailangang tukuyin ang port dahil mayroon itong port 25 bilang default. Sa kabilang banda, kung kumokonekta ka sa isang SMTP server na nangangailangan ng TLS o SSL authentication, gaya ng SMTP Host ng GMail, kailangan mong magbigay ng kaunti pang property, gaya ng mail.smtp.port=547 para sa TLS at mail. smtp.port= 457 para sa SSL. Ito ay isang kumpletong Java program na kumokonekta sa isang karaniwang SMTP server nang walang authentication at nagpapadala ng text message gamit ang 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: Maaari mong i-compile at patakbuhin ang program na ito upang magpadala ng isang simpleng email mula sa isang Java program:
$ javac EmailSender.java
$ java EmailSender
Matagumpay na naipadala ang email.... Gaya ng nakikita mo, napakadaling magpadala ng mga email mula sa isang Java program. Kapag nagawa mo na ang object MimeMessage, kailangan mong magdagdag ng mga tatanggap, na maaaring tukuyin sa TO, CC, BCC. Kapag natapos na ang mga tatanggap, kailangan nating tukuyin ang paksa ng liham, at, sa wakas, ang nilalaman ng liham mismo sa pamamagitan ng pagtawag sa pamamaraan message.setText(); Kung gusto mong gumawa ng maramihang pagpapadala, maaaring gamitin ang mga sumusunod na pamamaraan para tukuyin ang mga tatanggap:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Maaari kang magdagdag ng mga tao sa field TOgamit ang Message.RecipientType.TO, sa field CCgamit ang Message.RecipientType.CC, at sa BCC- Message.RecipientType.BCC.

Mga Error at Exceptions

Kapag maraming programmer ng Java ang unang nagsimulang magsulat ng isang programa upang magpadala ng isang email, nakatagpo sila ng isang error dahil iniisip ng karamihan sa kanila na ang mail.jar at activation.jar ay magiging sapat upang magpadala ng isang email mula sa isang Java application, na hindi ito ang kaso, lalo na kung nagpapadala ka ng email sa pamamagitan ng lokal na SMTP server sa Linux. Kung pinapatakbo mo ang program na ito gamit lamang ang mail.jar at activation.jar sa iyong CLASSPATH, malamang na makukuha mo ang error na ito.

Exception 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
Bagama't ang solusyon sa error na ito ay napakasimple, maaari ka nitong malito. java.net.ConnectException: Connection refused: connectKaraniwan itong nag-crash kapag ang server ay hindi gumagana o ang port na iyong kinokonekta ay hindi wastong tinukoy. Solusyon: bilang karagdagan sa mail-1.4.5.jar, kailangan mo rin ng smtp-1.4.4.jar at activation-1.1.jar.

Exception 2:

Ito ay isa pang error na tinatawag na NoClassDefFoundError, na karaniwang tumutukoy sa isang nawawalang JAR file sa 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)
Solusyon: Nalutas ko ang aking problema, ito ay dahil sa isang hindi tamang Classpath. Kahit na mayroon akong lahat ng tatlong kinakailangang JAR, isang Java class file para sa programa sa parehong direktoryo, at pinatakbo ang programa mula doon, hindi ito maisip ng Java. Sinubukan kong ipasok ang mga sumusunod na utos at gumana nang maayos ang programa:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
Matagumpay na naipadala ang email.... Pakitandaan na ang kasalukuyang direktoryo ay minarkahan ng tuldok sa dulo ng argumento ng Classpath. Dahil pinapatakbo ko ang programa sa Linux, gumamit ako ng colon (:) sa halip na semicolon (;) (tulad ng sa Windows). Iyon lang ang tungkol sa kung paano magpadala ng email mula sa isang Java application gamit ang mail API. Maaari mong mahanap na ito ay napaka-simple, dahil hindi mo kailangan ng higit sa tatlong JAR file. Mas madali kung gagamit ka ng Gradle o Maven para pamahalaan ang mga dependency. Sa mga sumusunod na tutorial makakakita tayo ng mas kumplikadong mga halimbawa ng Java Mail API para sa pagpapadala ng mga email na may mga attachment, na may mga larawan, at mga email na maganda ang format para sa pagpapadala ng mga ulat at talahanayan. Pagsasalin ng artikulo: Paano Magpadala ng Email mula sa Java Program na may Halimbawa
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION