JavaRush /Java блогы /Random-KK /Java қолданбасынан электрондық поштаны қалай жіберуге бол...
PodoBulge
Деңгей
Минск

Java қолданбасынан электрондық поштаны қалай жіберуге болады (мысалмен)

Топта жарияланған
Java қолданбасынан электрондық поштаны жіберу жалпы талап болып табылады. Негізгі Java қолданбасында, веб-бағдарламада немесе кәсіпорынның Java қолданбасында жұмыс істеп жатқаныңыз маңызды емес, қолдау көрсету қызметкерлерін қателер туралы ескерту үшін электрондық поштаны жіберу немесе тіркелгеннен кейін пайдаланушыларға жай ғана электрондық хат жіберу қажет болуы мүмкін. құпия сөзді қалпына келтіріңіз немесе тіркелгеннен кейін электрондық пошта мекенжайын растауды сұраңыз. Java қолданбасынан электрондық хаттарды жіберу мүмкіндігі қажет болған кезде көптеген сценарийлер бар. Java қолданбасынан электрондық поштаны қалай жіберуге болады (мысалмен) - 1Дайын қолданбаларда сізде электрондық хаттарды жіберуге арналған барлық мүмкіндіктермен жұмыс істейтін модуль немесе кітапхана бар, мысалы, тіркемелерді, суреттерді, соның ішінде электрондық хаттардағы қолтаңбаларды және пішімделген мәтінді жіберу мүмкіндігі, БІРАҚ сізге нөлден бірдеңе жазу қажет болса, онда Java Mail API тамаша нұсқа болып табылады. Бұл мақалада пошта API ( javax.mail ) арқылы Java қолданбасынан электрондық хаттарды жіберуді үйренеміз . Кодты жазбас бұрын электрондық пошта қалай жұмыс істейтінінің кейбір негіздерін білуіңіз керек, мысалы, сізге SMTP (қарапайым поштаны тасымалдау протоколы) serverі қажет . Егер сіз Java қолданбасын Linux жүйесінде іске қосып жатсаңыз, SMTP демоны 25-портты пайдаланатынын білуіңіз керек. GMail, Yahoo немесе кез келген басқа қызмет провайдері сияқты жалпыға қолжетімді пошта serverлерін қоса, Java арқылы хабарламалар жіберу үшін кез келген пошта 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шақыру арқылы жасаңыз Session.getDefaultInstance(properties), мұнда properties- барлық маңызды қасиеттерді қамтиды, мысалы, SMTP serverінің хост атауы.

  2. Алдыңғы қадамда алынған MimeMessageнысанды беру арқылы нысанды жасаңыз . SessionБізде осы нысанда электрондық пошта алушысы, тақырып, хабардың негізгі бөлігі, тіркемелер және т.б. сияқты әртүрлі сипаттар жинағы бар.

  3. Оны электрондық пошта нысаны болуы мүмкін javax.mail.Transportстатикалық әдісті шақыру арқылы жіберу үшін пайдаланыңыз .send(email)MimeMessage

Нысан жасау үшін берілетін сипаттардың саны SessionSMTP serverінің түріне байланысты әр түрлі болады, мысалы, егер сіз аутентификацияны қажет етпейтін SMTP serverін пайдалансаңыз, Sessionтек бір сипаты бар нысанды жасай аласыз, мысалы, 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
Электрондық пошта сәтті жіберілді.... Көріп отырғаныңыздай, Java бағдарламасынан электрондық хаттарды жіберу өте оңай. Объектіні жасағаннан кейін , , MimeMessageішінде көрсетуге болатын алушыларды қосу керек . Алушылармен жұмысты аяқтағаннан кейін, әдісті шақыру арқылы хаттың тақырыбын және, ең соңында, хаттың мазмұнын көрсету керек ; Егер сіз бірнеше хат жіберуді қаласаңыз, алушыларды анықтау үшін келесі әдістерді қолдануға болады: TOCCBCCmessage.setText()
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Адамдарды өріске TOарқылы Message.RecipientType.TO, өріске CCарқылы Message.RecipientType.CCжәне BCC- арқылы қосуға болады Message.RecipientType.BCC.

Қателер мен ерекшеліктер

Көптеген Java бағдарламашылары электрондық поштаны жіберу үшін бағдарламаны алғаш рет жаза бастағанда, олар қатеге тап болады, себебі олардың көпшілігі mail.jar және activation.jar Java қолданбасынан электрондық поштаны жіберу үшін жеткілікті деп ойлайды, бұл олай емес, әсіресе Linux жүйесіндегі жергілікті 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 және activation-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
Электрондық пошта сәтті жіберілді.... Ағымдағы каталог Classpath аргументінің соңында нүктемен белгіленгенін ескеріңіз. Мен бағдарламаны Linux жүйесінде іске қосқандықтан, нүктелі үтірдің (;) ​​орнына қос нүктені (:) қолдандым (Windows жүйесіндегідей). Мұның бәрі mail API арқылы Java қолданбасынан электрондық поштаны жіберу туралы. Сізге бұл өте қарапайым болуы мүмкін, өйткені сізге үш JAR файлынан артық ештеңе қажет емес. Тәуелділіктерді басқару үшін Gradle немесе Maven пайдалансаңыз, бұл әлдеқайда оңай. Келесі оқулықтарда біз тіркемелермен, суреттермен және есептер мен кестелерді жіберуге арналған әдемі пішімделген электрондық хаттарды жіберуге арналған Java Mail API интерфейсінің күрделі мысалдарын көреміз. Мақаланың аудармасы: Java бағдарламасынан электрондық поштаны мысалмен қалай жіберуге болады
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION