JavaRush /Java Blogu /Random-AZ /Java proqramından necə e-poçt göndərmək olar (nümunə ilə)...
PodoBulge
Səviyyə
Минск

Java proqramından necə e-poçt göndərmək olar (nümunə ilə)

Qrupda dərc edilmişdir
Java proqramından e-poçt göndərmək ümumi tələbdir. Əsas Java proqramı, veb tətbiqi və ya müəssisə Java tətbiqi üzərində işləməyinizin fərqi yoxdur, dəstək işçilərini səhvlər barədə xəbərdar etmək üçün e-poçt göndərmək və ya qeydiyyatdan keçərkən istifadəçilərə sadəcə e-poçt göndərmək lazım ola bilər. parollarını sıfırlayın və ya qeydiyyatdan sonra e-poçt ünvanını təsdiqləmələrini xahiş edin. Java proqramından e-poçt göndərmək qabiliyyətinə ehtiyacınız olan bir çox ssenari var. Java proqramından necə e-poçt göndərmək olar (nümunə ilə) - 1Hazır tətbiqlərdə sizin artıq e-poçt göndərmək üçün bütün funksiyalarla işləyən modul və ya kitabxananız var, məsələn, əlavələr, şəkillər, o cümlədən e-poçtlarda imzalar və zəngin mətnlər göndərmək imkanı, AMMA sıfırdan nəsə yazmaq lazımdırsa, onda Java Mail API əla seçimdir. Bu yazıda biz poçt API ( javax.mail ) istifadə edərək Java proqramından e-poçt göndərməyi öyrənəcəyik . Kod yazmazdan əvvəl siz e-poçtun necə işləməsi ilə bağlı bəzi əsasları bilməlisiniz, məsələn, sizə SMTP (Sadə Mail Transfer Protocol) serveri lazımdır . Əgər siz Java proqramınızı Linux-da işlədirsinizsə, onda bilməlisiniz ki, SMTP demonu port 25- dən istifadə edir . Siz GMail, Yahoo və ya hər hansı digər xidmət provayderi kimi ictimai poçt serverləri də daxil olmaqla, Java-dan istifadə edərək mesaj göndərmək üçün istənilən poçt serverindən istifadə edə bilərsiniz. sizə onların SMTP server təfərrüatları lazımdır , məsələn, host adı, port, əlaqə parametrləri və s. Siz həmçinin təhlükəsiz qoşulmaq və e-poçt göndərmək üçün SSL ( təhlükəsiz yuvalar təbəqəsi ), TLS ( Nəqliyyat Layeri Təhlükəsizliyi ) istifadə edə bilərsiniz , lakin biz bu nümunəni sadə etdik və Java proqramından məktubların göndərilməsi üçün minimal məntiqə diqqət yetirdik. Gələcək məqalələrdə biz əlavələrdən istifadə edərək e-poçt göndərməyi, HTML formatlı e-poçt göndərməyi, şəkilləri e-poçta necə əlavə etməyi, GMail serverinə qoşulmaq və e-poçt göndərmək üçün SSL autentifikasiyasından necə istifadə etməyi öyrənəcəyik. İndi gəlin bu sadə Java Mail API nümunəsini anlayaq (müzakirə edək) .

E-poçt göndərmək üçün nümunə Java kodu

Java proqramından məktub göndərmək üçün sizə Java Mail APIJava Aktivləşdirmə Çərçivəsi (JAF) lazımdır ; daha dəqiq desək, sizə mail-1.4.5.jar , smtp-1.4.4.jaraktivasiya-1.1.jar lazımdır . Bu proqramı işə salmaq üçün bu JAR fayllarını yükləməli və onları Classpath -a daxil etməlisiniz . Alternativ olaraq, asılılığın idarə edilməsi üçün Maven-dən istifadə edə və bütün asılılıqları oraya daxil edə bilərsiniz. Bütün bu JAR faylları əldə etdikdən sonra Java istifadə edərək e-poçt yaratmaq və göndərmək üçün aşağıdakı addımları yerinə yetirin.
  1. SessionZəng edərək obyekt yaradın Session.getDefaultInstance(properties), burada properties- bütün vacib xüsusiyyətləri ehtiva edir, məsələn, SMTP serverinin host adı.

  2. Əvvəlki addımda əldə edilmiş MimeMessageobyekti ona ötürərək obyekt yaradın . SessionBu obyektdə e-poçt alıcısı, mövzu, mesajın mətni, qoşmalar və s. kimi müxtəlif xassələrimiz var.

  3. E-poçtun obyekt ola biləcəyi javax.mail.Transportstatik metoda zəng edərək e-poçt göndərmək üçün ondan istifadə edin .send(email)MimeMessage

Obyekt yaratmaq üçün ötürdüyünüz xassələrin sayı SessionSMTP serverinin növündən asılı olaraq fərqlənir, məsələn, heç bir autentifikasiya tələb etməyən SMTP serverindən istifadə edirsinizsə, Sessionyalnız bir xassə ilə obyekt yarada bilərsiniz, məsələn, smtp .mail.host və portu göstərməyə ehtiyac yoxdur, çünki onun standart olaraq 25 portu var. Digər tərəfdən, GMail-in SMTP Hostu kimi TLS və ya SSL identifikasiyası tələb edən SMTP serverinə qoşulursunuzsa, TLS və poçt üçün mail.smtp.port=547 kimi bir az daha çox xüsusiyyət təqdim etməlisiniz. SSL üçün smtp.port= 457. Bu, autentifikasiya olmadan standart SMTP serverinə qoşulan və Java Mail API istifadə edərək mətn mesajı göndərən tam Java proqramıdır.
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(); }

     }

}
Nəticə: Java proqramından sadə e-poçt göndərmək üçün bu proqramı tərtib edib işlədə bilərsiniz:
$ javac EmailSender.java
$ java EmailSender
E-poçt uğurla göndərildi.... Gördüyünüz kimi, Java proqramından e-poçt göndərmək çox asandır. Obyekti yaratdıqdan sonra , , -da MimeMessagegöstərilə bilən alıcıları əlavə etməlisiniz . Qəbul edənlərlə başa çatdıqdan sonra, məktubun mövzusunu və nəhayət, metodu çağıraraq məktubun özünün məzmununu dəqiqləşdirməliyik ; Bir neçə poçt göndərişi etmək istəyirsinizsə, alıcıları müəyyən etmək üçün aşağıdakı üsullardan istifadə edə bilərsiniz: TOCCBCCmessage.setText()
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Siz insanları sahəyə TOistifadə edərək , istifadə edərək Message.RecipientType.TOsahəyə və - ilə əlavə edə bilərsiniz . CCMessage.RecipientType.CCBCCMessage.RecipientType.BCC

Səhvlər və İstisnalar

Bir çox Java proqramçıları ilk dəfə e-poçt göndərmək üçün proqram yazmağa başlayanda xəta ilə qarşılaşırlar, çünki onların əksəriyyəti mail.jar və activation.jar-ın Java proqramından e-poçt göndərmək üçün kifayət edəcəyini düşünür, bu belə deyil, xüsusilə Linux-da yerli SMTP serveri vasitəsilə e-poçt göndərirsinizsə. Bu proqramı CLASSPATH-də yalnız mail.jar və activation.jar ilə işlədirsinizsə, çox güman ki, bu xətanı alacaqsınız.

İstisna 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
Bu səhvin həlli çox sadə olsa da, sizi çaşdıra bilər. java.net.ConnectException: Connection refused: connectO, adətən server işləmədikdə və ya qoşulduğunuz port səhv göstərildikdə çökür. Həlli: mail-1.4.5.jar ilə yanaşı smtp-1.4.4.jar və aktivasiya-1.1.jar da lazımdır.

İstisna 2:

NoClassDefFoundErrorBu adətən Classpath-da çatışmayan JAR faylına istinad edən başqa bir səhvdir
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)
Həll yolu: Problemimi həll edə bildim, bu səhv Sinif yolu ilə bağlı idi. Mən eyni qovluqda proqram üçün Java sinif faylı olan hər üç tələb olunan JAR-a malik olsam da və proqramı oradan idarə etsəm də, Java bunu başa düşə bilmədi. Aşağıdakı əmrləri daxil etməyə çalışdım və proqram yaxşı işlədi:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
E-poçt uğurla göndərildi.... Nəzərə alın ki, cari kataloq Classpath arqumentinin sonunda nöqtə ilə işarələnib. Proqramı Linux-da işlətdiyim üçün nöqtəli vergül (;) əvəzinə iki nöqtə (:) işarəsindən istifadə etdim (Windows-da olduğu kimi). Bütün bunlar poçt API-dən istifadə edərək Java proqramından e-poçtun necə göndərilməsi ilə bağlıdır. Bunu çox sadə tapa bilərsiniz, çünki üçdən çox JAR faylına ehtiyacınız yoxdur. Asılılıqları idarə etmək üçün Gradle və ya Maven istifadə etsəniz, daha asan olar. Aşağıdakı dərsliklərdə biz əlavələr, şəkillər və hesabatlar və cədvəllər göndərmək üçün gözəl formatlaşdırılmış e-poçt məktubları göndərmək üçün Java Mail API-nin daha mürəkkəb nümunələrini görəcəyik. Məqalənin tərcüməsi: Nümunə ilə Java Proqramından E-poçtu Necə Göndərmək olar
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION