JavaRush /Java Blog /Random-TK /Java programmasyndan nädip e-poçta ibermeli (mysal bilen)...
PodoBulge
Dereje
Минск

Java programmasyndan nädip e-poçta ibermeli (mysal bilen)

Toparda çap edildi
Java programmasyndan e-poçta ibermek umumy talapdyr. Esasy Java programmasynda, web programmasynda ýa-da kärhana Java programmasynda işleýändigiňiziň ähmiýeti ýok, goldaw işgärlerine ýalňyşlyklar barada duýduryş bermek ýa-da hasaba alnandan soň ulanyjylara e-poçta ibermek zerur bolup biler, parolyny täzeden düzüň ýa-da hasaba alnandan soň e-poçta salgysyny tassyklamagyny haýyş ediň. Java programmasyndan e-poçta ibermek ukybyna mätäç wagtyňyz köp ssenariýa bar. Java programmasyndan e-poçta nädip ibermeli (mysal bilen) - 1Taýýar programmalarda e-poçta ibermegiň ähli aýratynlyklary bilen işleýän modul ýa-da kitaphana bar, meselem, e-poçta hatlary, gollary we baý tekstleri ibermek mümkinçiligi ýaly, ýöne başdan bir zat ýazmaly bolsaňyz, onda Java Mail API ajaýyp wariantydyr. Bu makalada, poçta API ( javax.mail ) ulanyp, Java programmasyndan e-poçta ibermegiň usullaryny öwreneris . Kod ýazmazdan ozal e-poçta işleýşiniň käbir esaslaryny bilmelisiňiz, mysal üçin size SMTP (pleönekeý poçta geçiriş protokoly) serweri gerek . Java programmaňyzy Linux-da işleýän bolsaňyz, SMTP daemonynyň 25-nji porty ulanýandygyny bilmelisiňiz. Java - dan habar ibermek üçin islendik poçta serwerini ulanyp bilersiňiz, şol sanda GMail, Yahoo ýa-da başga bir hyzmat üpjün ediji ýaly jemgyýetçilik poçta serwerleri. size olaryň SMTP serwer jikme-jiklikleri , host ady, port, baglanyşyk parametrleri we ş.m. gerek. Şeýle hem, e-poçtalary ygtybarly birikdirmek we ibermek üçin SSL ( ygtybarly rozetka gatlagy ), TLS ( Transport Layer Security ) ulanyp bilersiňiz , ýöne bu mysaly ýönekeýleşdirdik we Java programmasyndan hat ibermek üçin minimal logika üns berdik. Geljekki makalalarda goşundylary ulanyp e-poçta ibermegiň usullaryny, HTML formatlanan e-poçta nädip ibermelidigini, suratlary e-poçta nädip birikdirmelidigini, GMail serwerine birikmek we e-poçta ibermek we ş.m. SSL tassyklamasyny nädip ulanmalydygyny öwreneris. Indi, bu ýönekeý Java Mail API mysalyna düşüneliň (ara alyp maslahatlaşalyň) .

E-poçta ibermek üçin Java kody mysal

Java programmasyndan hat ibermek üçin size Java Mail API we Java işjeňleşdirme çarçuwasy (JAF) gerek bolar ; has takyk bolmagy üçin size 1.4.5.jar , smtp-1.4.4.jar we işjeňleşdirme-1.1.jar gerek bolar . Bu JAR faýllaryny göçürip alyp, bu programmany işletmek üçin olary Classpath -a goşmaly . Ativea-da bolmasa, Maveni garaşlylygy dolandyrmak üçin ulanyp bilersiňiz we ähli garaşlylygy şol ýere goşup bilersiňiz. Bu JAR faýllaryňyzyň hemmesi bolansoň, Java ulanyp e-poçta döretmek we ibermek üçin aşakdaky ädimleri ýerine ýetiriň.
  1. SessionÇagyryp bir obýekt dörediň Session.getDefaultInstance(properties), bu ýerde properties- ähli möhüm häsiýetleri, mysal üçin, SMTP serweriniň baş adyny öz içine alýar.

  2. Öňki ädimde alnan MimeMessageobýekti geçip, bir obýekt dörediň . SessionBu obýektde e-poçta alyjy, mowzuk, habar göwrümi, goşundylar we ş.m. ýaly dürli häsiýetler bar.

  3. E-poçta obýekt bolup bilýän javax.mail.Transportstatiki usula jaň edip, e-poçta ibermek üçin ulanyň .send(email)MimeMessage

Obýekt döretmek üçin geçýän häsiýetleriňiziň sany SessionSMTP serweriniň görnüşine baglylykda tapawutlanýar, mysal üçin, hiç hili tassyklamany talap etmeýän SMTP serwerini ulanýan bolsaňyz, Sessiondiňe bir emläk bilen obýekt döredip bilersiňiz, mysal üçin smtp .mail.host, porty görkezmegiň zerurlygy ýok, sebäbi deslapky 25 porty bar. Başga bir tarapdan, GMail-iň SMTP Hosty ýaly TLS ýa-da SSL tassyklamasyny talap edýän SMTP serwerine birikýän bolsaňyz, TLS we poçta üçin mail.smtp.port = 547 ýaly birneme has köp aýratynlyk bermeli. smtp.port = SSL üçin 457. Bu, tassyklama bolmazdan adaty SMTP serwerine birigýän we Java Mail API ulanyp tekst habaryny iberýän doly Java programmasy.
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(); }

     }

}
Çykyş: Java programmasyndan ýönekeý e-poçta ibermek üçin bu programmany düzüp we işledip bilersiňiz:
$ javac EmailSender.java
$ java EmailSender
E-poçta üstünlikli iberildi .... Görşüňiz ýaly, Java programmasyndan e-poçta ibermek gaty aňsat. Obýekti döredeniňizden soň MimeMessage, TO,, CC. BCCAlyjylar bilen gutaranymyzdan soň, hatyň mowzugyny we iň soňunda usula jaň edip hatyň mazmunyny görkezmeli message.setText(); Birnäçe poçta ibermek isleseňiz, alyjylary kesgitlemek üçin aşakdaky usullar ulanylyp bilner:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
TOAdamlary ulanyp Message.RecipientType.TO, meýdana we - CCulanyp bilersiňiz . Message.RecipientType.CCBCCMessage.RecipientType.BCC

Rorsalňyşlyklar we kadadan çykmalar

Java programmaçylarynyň köpüsi ilki e-poçta ibermek üçin programma ýazyp başlanda, bir ýalňyşlyga duş gelýärler, sebäbi köpüsi mail.jar we activation.jar Java programmasyndan e-poçta ibermek üçin ýeterlik bolar öýdýärler, bu beýle däl, esasanam Linux-da ýerli SMTP serweri arkaly e-poçta iberseňiz. Bu programmany diňe CLASSPATH-da diňe mail.jar we activation.jar bilen işledseňiz, bu ýalňyşlygy başdan geçirersiňiz.

1-nji kadadan çykma:

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
Bu ýalňyşlygyň çözgüdi gaty ýönekeý bolsa-da, sizi bulaşdyryp biler. java.net.ConnectException: Connection refused: connectAdatça serwer işlemeýän bolsa ýa-da birikdirýän portuňyz nädogry görkezilse ýykylýar. Çözgüdi: poçta-1.4.5.jar-dan başga-da smtp-1.4.4.jar we işjeňleşdirme-1.1.jar gerek.

2-nji kadadan çykma:

Bu, NoClassDefFoundErroradatça, Classpath-da ýiten JAR faýlyny aňladýan başga bir ýalňyşlyk
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)
Çözgüt: Meselämi çözmegi başardym, nädogry “Classpath” sebäpli boldy. Şol bir katalogda programma üçin Java synp faýly talap edilýän üç sany JAR-ym bar bolsa-da, programmany şol ýerden işledenem bolsa, Java düşünip bilmedi. Aşakdaky buýruklary girizmäge synanyşdym we programma gowy işledi:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
E-poçta üstünlikli iberildi .... Häzirki katalogda “Classpath” argumentiniň ahyrynda nokat bilen bellik edilendigini ýadyňyzdan çykarmaň. Programmany Linux-da işledip ýörkäm, nokatly (;) ýerine (Windows-da bolşy ýaly) bir sütün (:) ulandym. Bu, poçta API ulanyp, Java programmasyndan nädip e-poçta ibermelidigi hakda. Muny gaty ýönekeý tapyp bilersiňiz, sebäbi üç JAR faýlyndan köp zat gerek däl. Baglylyklary dolandyrmak üçin Gradle ýa-da Maven ulansaňyz has aňsat. Aşakdaky sapaklarda goşundylar, suratlar we e-poçta ibermek üçin Java Mail API-iň has çylşyrymly mysallaryny göreris, hasabat we tablisa ibermek üçin owadan formatlanan e-poçta. Makalanyň terjimesi: Java programmasyndan mysal bilen nädip e-poçta ibermeli
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION