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. Hazı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 API və Java Aktivləşdirmə Çərçivəsi (JAF) lazımdır ; daha dəqiq desək, sizə mail-1.4.5.jar , smtp-1.4.4.jar və aktivasiya-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.-
Session
Zəng edərək obyekt yaradınSession.getDefaultInstance(properties)
, buradaproperties
- bütün vacib xüsusiyyətləri ehtiva edir, məsələn, SMTP serverinin host adı. -
Əvvəlki addımda əldə edilmiş
MimeMessage
obyekti ona ötürərək obyekt yaradın .Session
Bu 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. -
E-poçtun obyekt ola biləcəyi
javax.mail.Transport
statik metoda zəng edərək e-poçt göndərmək üçün ondan istifadə edin .send(email)
MimeMessage
Session
SMTP 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ə, Session
yalnı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 MimeMessage
gö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: TO
CC
BCC
message.setText()
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Siz insanları sahəyə TO
istifadə edərək , istifadə edərək Message.RecipientType.TO
sahəyə və - ilə əlavə edə bilərsiniz . CC
Message.RecipientType.CC
BCC
Message.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: connect
O, 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:
NoClassDefFoundError
Bu 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
GO TO FULL VERSION