JavaRush /Java блогу /Random-KY /Java колдонмосунан электрондук катты кантип жөнөтүү керек...
PodoBulge
Деңгээл
Минск

Java колдонмосунан электрондук катты кантип жөнөтүү керек (мисалы менен)

Группада жарыяланган
Java колдонмосунан электрондук кат жөнөтүү жалпы талап болуп саналат. Негизги Java тиркемесинде, веб тиркемесинде же ишканалык Java тиркемесинде иштеп жатканыңыз маанилүү эмес, сизге каталар жөнүндө колдоо кызматкерлерин эскертүү үчүн электрондук кат жөнөтүшүңүз керек же жөн гана катталгандан кийин колдонуучуларга электрондук кат жөнөтүшүңүз керек болот. сырсөзүн баштапкы абалга келтириңиз же каттоодон өткөндөн кийин электрондук почта дарегин ырастоону сураныңыз. Java колдонмосунан электрондук каттарды жөнөтүү мүмкүнчүлүгү керек болгон көптөгөн сценарийлер бар. Java колдонмосунан электрондук катты кантип жөнөтүү керек (мисалы) - 1Даяр тиркемелерде сизде электрондук каттарды жөнөтүү үчүн бардык функциялар менен иштеген модул же китепкана бар, мисалы тиркемелерди, сүрөттөрдү, анын ичинде кол тамгаларды жана электрондук почталардагы бай тексттерди жөнөтүү мүмкүнчүлүгү, БИРОК сиз нөлдөн баштап бир нерсе жазуу керек болсо, анда Java Mail API сонун мүмкүнчүлүк. Бул макалада биз почта API ( javax.mail ) аркылуу Java колдонмосунан электрондук каттарды кантип жөнөтүүнү үйрөнөбүз . Кодду жазуудан мурун сиз электрондук почтанын иштешинин кээ бир негиздерин бorшиңиз керек, мисалы сизге SMTP (Жөнөкөй почта өткөрүп берүү протоколу) serverи керек . Эгер сиз Linux'та Java тиркемеңизди иштетип жатсаңыз, анда SMTP демону 25-портту колдоноорун бorшиңиз керек. Сиз Java аркылуу билдирүүлөрдү жөнөтүү үчүн каалаган почта serverин, анын ичинде GMail, Yahoo же башка кызмат көрсөтүүчү сыяктуу коомдук почта serverлерин колдоно аласыз. сизге алардын SMTP serverинин чоо-жайы керек , мисалы, хост аты, порт, туташуу параметрлери ж.б. Сиз ошондой эле электрондук каттарды коопсуз туташуу жана жөнөтүү үчүн SSL ( коопсуз розеткалардын катмары ), TLS ( Транспорт катмарынын коопсуздугу ) колдонсоңуз болот , бирок биз бул мисалды жөнөкөй кылып, Java колдонмосунан каттарды жөнөтүү үчүн минималдуу логикага басым жасадык. Кийинки макалаларда тиркемелерди колдонуу менен электрондук катты кантип жөнөтүүнү, HTML форматындагы электрондук катты кантип жөнөтүүнү, электрондук почтага сүрөттөрдү кантип тиркөөнү, GMail serverине туташуу жана электрондук каттарды жөнөтүү үчүн SSL аутентификациясын кантип колдонууну үйрөнөбүз. Эми, келгиле, бул жөнөкөй Java Mail API мисалын түшүнөлү (талкуулайлы) .

Электрондук кат жөнөтүү үчүн Java codeун мисал

Java программасынан кат жөнөтүү үчүн сизге Java Mail API жана Java Activation Framework (JAF) керек болот ; тагыраак айтканда, сизге mail-1.4.5.jar , smtp-1.4.4.jar жана активация-1.1.jar керек болот . Бул программаны иштетүү үчүн сиз бул JAR файлдарын жүктөп алып, класс жолуңузга кошушуңуз керек . Же болбосо, сиз Mavenди көз карандылыкты башкаруу үчүн колдонсоңуз болот жана ал жерде бардык көз карандылыктарды кошо аласыз. Бул JAR файлдарынын бардыгына ээ болгондон кийин, Java аркылуу электрондук кат түзүү жана жөнөтүү үчүн төмөнкү кадамдарды аткарыңыз.
  1. SessionЧалуу аркылуу an object түзүңүз Session.getDefaultInstance(properties), мында properties- бардык маанилүү касиеттерди камтыйт, мисалы, SMTP serverинин хост аты.

  2. Мурунку кадамда алынган MimeMessagean objectти өткөрүп берүү менен an object түзүңүз . SessionБизде бул an objectте ар кандай касиеттердин топтому бар, мисалы, электрондук почтаны алуучу, тема, билдирүүнүн негизги бөлүгү, тиркемелер ж.б.

  3. javax.mail.TransportАны статикалык ыкманы чакырып электрондук кат жөнөтүү үчүн колдонуңуз send(email), мында электрондук почта an objectи болушу мүмкүн MimeMessage.

Объектти түзүү үчүн сиз тапшырган касиеттердин саны SessionSMTP serverинин түрүнө жараша айырмаланат, мисалы, сиз эч кандай аутентификацияны талап кылбаган SMTP serverин колдонуп жатсаңыз, Sessionбир гана касиети бар an object түзө аласыз, мисалы, smtp .mail.host жана портту көрсөтүүнүн кереги жок, анткени анын демейки боюнча 25 порту бар. Башка жагынан алганда, сиз GMailдин SMTP хосту сыяктуу TLS же SSL аутентификациясын талап кылган SMTP serverине туташып жатсаңыз, анда TLS жана почта үчүн mail.smtp.port=547 сыяктуу бир аз көбүрөөк касиеттерди беришиңиз керек. SSL үчүн smtp.port= 457. Бул аутентификациясы жок стандарттуу SMTP serverине туташкан жана Java Mail API аркылуу текст кабарын жөнөтүүчү толук Java программасы.
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(); }

     }

}
Чыгуу: Сиз Java программасынан жөнөкөй электрондук кат жөнөтүү үчүн бул программаны компиляциялап, иштете аласыз:
$ javac EmailSender.java
$ java EmailSender
Ийгorктүү электрондук кат жөнөтүлдү.... Көрүнүп тургандай, Java программасынан электрондук каттарды жөнөтүү абдан оңой. Объектти түзгөндөн кийин MimeMessage, сиз алуучуларды кошушуңуз керек, алар TO, CC, ичинде көрсөтүлүшү мүмкүн BCC. алуучулар менен аяктагандан кийин, биз каттын темасын тактоо керек, жана, акырында, ыкмасын чакыруу менен каттын өзүнөн мазмуну message.setText(); Эгер сиз бир нече кат жөнөткүңүз келсе, анда алуучуларды көрсөтүү үчүн төмөнкү ыкмаларды колдонсоңуз болот:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Сиз адамдарды талаага , колдонуу менен талаага жана - менен кошо TOаласыз . Message.RecipientType.TOCCMessage.RecipientType.CCBCCMessage.RecipientType.BCC

Каталар жана өзгөчөлүктөр

Көптөгөн Java программисттери биринчи жолу электрондук кат жөнөтүү үчүн программа жаза баштаганда, катага туш болушат, анткени алардын көбү mail.jar жана activation.jar Java тиркемесинде электрондук кат жөнөтүү үчүн жетиштүү болот деп ойлошот, андай эмес, айрыкча, Linux'тун жергorктүү SMTP serverи аркылуу электрондук кат жөнөтсөңүз. Эгер сиз бул программаны CLASSPATH'иңизде mail.jar жана activation.jar менен гана иштетсеңиз, сиз бул катаны аласыз.

Өзгөчө 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
Бул катаны чечүү абдан жөнөкөй болсо да, ал сизди чаташтырышы мүмкүн. java.net.ConnectException: Connection refused: connectАдатта, server иштебей калганда же сиз туташып жаткан порт туура эмес көрсөтүлгөндө бузулат. Чечим: mail-1.4.5.jarдан тышкары, сизге smtp-1.4.4.jar жана активация-1.1.jar керек.

Өзгөчө 2:

Бул NoClassDefFoundError, адатта, Classpath ичинде жок JAR файлын билдирет деп аталган дагы бир ката
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)
Чечим: Мен көйгөйүмдү чечтим, бул туура эмес Класс жолунун айынан болду. Менде үч талап кылынган JAR, программа үчүн Java класс файлы бир каталогдо болсо да, программаны ошол жерден иштетсем да, Java аны түшүнө алган жок. Мен төмөнкү буйруктарды киргизүүгө аракет кылдым жана программа жакшы иштеди:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
Электрондук кат ийгorктүү жөнөтүлдү.... Сураныч, учурдагы каталог Класс жолунун аргументинин аягында чекит менен белгиленгенин эске алыңыз. Мен программаны Linuxда иштетип жүргөндүктөн, чекиттүү үтүрдүн (;) ордуна кош чекит (:) колдондум (Windowsдагыдай). Мунун баары mail API аркылуу Java колдонмосунан электрондук катты кантип жөнөтүү жөнүндө. Сиз муну абдан жөнөкөй деп тапсаңыз болот, анткени сизге үчтөн ашык JAR файлы керек эмес. Көз карандылыкты башкаруу үчүн Gradle же Maven колдонсоңуз, бул алда канча жеңил болот. Төмөнкү окуу куралдарында биз тиркемелери, сүрөттөрү бар электрондук каттарды жана отчетторду жана tableларды жөнөтүү үчүн сонун форматталган электрондук каттарды жөнөтүү үчүн Java Mail APIинин татаалыраак мисалдарын көрөбүз. Макаланын котормосу: Мисал менен Java программасынан электрондук почтаны кантип жөнөтүү керек
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION