JavaRush /Java blogi /Random-UZ /Java ilovasidan elektron pochta xabarini qanday yuborish ...
PodoBulge
Daraja
Минск

Java ilovasidan elektron pochta xabarini qanday yuborish kerak (misol bilan)

Guruhda nashr etilgan
Java ilovasidan elektron pochta xabarini yuborish umumiy talabdir. Asosiy Java ilovasi, veb-ilovasi yoki korporativ Java ilovasi ustida ishlayapsizmi, farqi yoʻq, qoʻllab-quvvatlash xodimlarini xatolar haqida ogohlantirish uchun elektron pochta xabarini yuborishingiz yoki roʻyxatdan oʻtgandan soʻng foydalanuvchilarga shunchaki elektron pochta xabarini yuborishingiz kerak boʻlishi mumkin. parolni qayta o'rnating yoki ro'yxatdan o'tgandan keyin elektron pochta manzilini tasdiqlashni so'rang. Java ilovasidan elektron pochta xabarlarini yuborish qobiliyatiga muhtoj bo'lgan ko'plab stsenariylar mavjud. Java ilovasidan elektron pochta xabarini qanday yuborish mumkin (misol bilan) - 1Tayyor ilovalarda siz allaqachon elektron pochta xabarlarini jo'natishning barcha xususiyatlari bilan ishlaydigan modul yoki kutubxonaga ega bo'lasiz, masalan, qo'shimchalar, rasmlar, shu jumladan elektron pochta xabarlarida imzolar va boy matnlarni yuborish imkoniyati, LEKIN agar siz noldan biror narsa yozishingiz kerak bo'lsa, keyin Java Mail API ajoyib tanlovdir. Ushbu maqolada biz pochta API ( javax.mail ) yordamida Java ilovasidan elektron pochta xabarlarini qanday yuborishni bilib olamiz . Kod yozishdan oldin siz elektron pochta qanday ishlashining ba'zi asoslarini bilishingiz kerak, masalan, sizga SMTP (Simple Mail Transfer Protocol) serveri kerak . Agar siz Java ilovangizni Linuxda ishlayotgan bo'lsangiz, SMTP dasturi 25 -portdan foydalanishini bilishingiz kerak . Java-dan foydalanib xabarlarni yuborish uchun istalgan pochta serveridan, jumladan GMail, Yahoo yoki boshqa xizmat ko'rsatuvchi provayder kabi umumiy pochta serverlaridan foydalanishingiz mumkin. Sizga ularning SMTP serveri tafsilotlari kerak bo'ladi , masalan, xost nomi, port, ulanish parametrlari va boshqalar. Elektron pochta xabarlarini xavfsiz ulash va jo‘natish uchun siz SSL ( xavfsiz rozetkalar qatlami ), TLS ( Transport qatlami xavfsizligi ) dan ham foydalanishingiz mumkin , ammo biz bu misolni sodda qilib, Java ilovasidan xat jo‘natish uchun minimal mantiqqa e’tibor qaratdik. Kelgusi maqolalarda biz qo'shimchalar yordamida elektron pochta xabarini qanday yuborishni, HTML formatidagi elektron pochtani qanday yuborishni, elektron pochtaga rasmlarni qanday qo'shishni, GMail serveriga ulanish va elektron pochta xabarlarini yuborish uchun SSL autentifikatsiyasidan qanday foydalanishni o'rganamiz. Keling, ushbu oddiy Java Mail API misolini tushunamiz (muhokama qilamiz) .

Elektron pochta xabarini yuborish uchun Java kodi misoli

Java dasturidan xat yuborish uchun sizga Java Mail API va Java Activation Framework (JAF) kerak bo'ladi ; aniqroq bo'lish uchun sizga mail-1.4.5.jar , smtp-1.4.4.jar va activation-1.1.jar kerak bo'ladi . Ushbu dasturni ishga tushirish uchun ushbu JAR fayllarini yuklab olishingiz va ularni Classpath- ga kiritishingiz kerak . Shu bilan bir qatorda, qaramlikni boshqarish uchun Maven dan foydalanishingiz va u erda barcha bog'liqliklarni kiritishingiz mumkin. Ushbu barcha JAR fayllariga ega bo'lganingizdan so'ng, Java yordamida elektron pochta xabarini yaratish va yuborish uchun quyidagi amallarni bajaring.
  1. Ob'ektni Sessionchaqirish orqali yarating Session.getDefaultInstance(properties), bu erda properties- barcha muhim xususiyatlarni o'z ichiga oladi, masalan, SMTP serverining xost nomi.

  2. Oldingi bosqichda olingan MimeMessageob'ektni unga o'tkazish orqali ob'ekt yarating . SessionUshbu ob'ektda bizda elektron pochta qabul qiluvchisi, mavzu, xabarning asosiy qismi, qo'shimchalar va boshqalar kabi turli xil xususiyatlar mavjud.

  3. Elektron pochta ob'ekt bo'lishi mumkin bo'lgan javax.mail.Transportstatik usulni chaqirish orqali elektron pochta xabarini yuborish uchun foydalaning .send(email)MimeMessage

Ob'ektni yaratish uchun o'tadigan xususiyatlar soni SessionSMTP serveri turiga qarab farq qiladi, masalan, agar siz hech qanday autentifikatsiyani talab qilmaydigan SMTP serveridan foydalansangiz, Sessionfaqat bitta xususiyatga ega ob'ekt yaratishingiz mumkin, masalan, smtp .mail.host va siz portni ko'rsatishingiz shart emas, chunki u sukut bo'yicha 25-portga ega. Boshqa tomondan, agar siz GMail SMTP xosti kabi TLS yoki SSL autentifikatsiyasini talab qiluvchi SMTP serveriga ulansangiz, TLS va pochta uchun mail.smtp.port=547 kabi biroz ko'proq xususiyatlarni taqdim etishingiz kerak bo'ladi. SSL uchun smtp.port= 457. Bu to'liq Java dasturi bo'lib, standart SMTP serveriga autentifikatsiyasiz ulanadi va Java Mail API yordamida matnli xabar yuboradi.
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(); }

     }

}
Natija: Java dasturidan oddiy elektron pochta xabarini yuborish uchun ushbu dasturni kompilyatsiya qilishingiz va ishga tushirishingiz mumkin:
$ javac EmailSender.java
$ java EmailSender
Muvaffaqiyatli elektron pochta yuborildi.... Ko'rib turganingizdek, Java dasturidan elektron pochta xabarlarini yuborish juda oson. Ob'ektni yaratganingizdan so'ng MimeMessage, qabul qiluvchilarni qo'shishingiz kerak, ular TO, CC, da ko'rsatilishi mumkin BCC. Qabul qiluvchilarni tugatgandan so'ng, biz usulni chaqirib, xatning mavzusini va nihoyat, xatning mazmunini belgilashimiz kerak message.setText(); Agar siz bir nechta pochta jo'natmalarini yubormoqchi bo'lsangiz, qabul qiluvchilarni aniqlash uchun quyidagi usullardan foydalanishingiz mumkin:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Siz odamlarni maydonga , TOyordamida Message.RecipientType.TOmaydonga va - CCyordamida qo'shishingiz mumkin . Message.RecipientType.CCBCCMessage.RecipientType.BCC

Xatolar va istisnolar

Ko'pgina Java dasturchilari birinchi marta elektron pochta xabarlarini yuborish uchun dastur yozishni boshlaganlarida, ular xatoga duch kelishadi, chunki ularning ko'pchiligi mail.jar va activation.jar Java ilovasidan elektron pochta xabarlarini yuborish uchun etarli bo'ladi deb o'ylashadi, bu esa unday emas. ayniqsa, agar siz Linuxda mahalliy SMTP serveri orqali elektron pochta xabarlarini yuborsangiz. Agar siz ushbu dasturni CLASSPATH-da faqat mail.jar va activation.jar bilan ishlatsangiz, katta ehtimol bilan bu xatoga duch kelasiz.

Istisno 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
Ushbu xatoning yechimi juda oddiy bo'lsa-da, sizni chalkashtirib yuborishi mumkin. java.net.ConnectException: Connection refused: connectOdatda server ishlamayotganida yoki siz ulanayotgan port noto'g'ri ko'rsatilganda ishdan chiqadi. Yechim: mail-1.4.5.jar dan tashqari smtp-1.4.4.jar va activation-1.1.jar ham kerak.

Istisno 2:

Bu NoClassDefFoundErrorodatda Classpath-da etishmayotgan JAR fayliga ishora qiluvchi yana bir xato
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)
Yechim: Muammoni hal qilishga muvaffaq bo'ldim, bu noto'g'ri Classpath tufayli edi. Garchi menda bitta katalogdagi dastur uchun Java sinf fayli bo'lgan uchta talab qilinadigan JAR bo'lsa ham va u erdan dasturni ishga tushirgan bo'lsam ham, Java buni aniqlay olmadi. Men quyidagi buyruqlarni kiritishga harakat qildim va dastur yaxshi ishladi:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
Email muvaffaqiyatli yuborildi.... Iltimos, joriy katalog Classpath argumentining oxirida nuqta bilan belgilanganligini unutmang. Men dasturni Linuxda ishga tushirganim uchun nuqtali vergul (;) o'rniga ikki nuqta (:) qo'ydim (Windowsda bo'lgani kabi). Bu mail API yordamida Java ilovasidan elektron pochta xabarini qanday yuborish haqida. Siz buni juda oddiy deb topishingiz mumkin, chunki sizga uchta JAR faylidan ortiq hech narsa kerak emas. Agar bog'liqliklarni boshqarish uchun Gradle yoki Maven dan foydalansangiz, bu juda oson. Keyingi o'quv qo'llanmalarida biz Java Mail API-ning qo'shimchalar, rasmlar va hisobotlar va jadvallarni yuborish uchun chiroyli formatlangan elektron pochta xabarlarini yuborish uchun yanada murakkab misollarini ko'ramiz. Maqolaning tarjimasi: Misol bilan Java dasturidan elektron pochta xabarlarini qanday yuborish mumkin
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION