Java programmasyndan e-poçta ibermek umumy talapdyr. Esasy Java programmasynda, web programmasynda ýa-da kärhana Java programmasynda işleýändigiňiziň ähmiýeti ýok, goldaw işgärlerine ýalňyşlyklar barada duýduryş bermek ýa-da hasaba alnandan soň ulanyjylara e-poçta ibermek zerur bolup biler, parolyny täzeden düzüň ýa-da hasaba alnandan soň e-poçta salgysyny tassyklamagyny haýyş ediň. Java programmasyndan e-poçta ibermek ukybyna mätäç wagtyňyz köp ssenariýa bar. Taýýar programmalarda e-poçta ibermegiň ähli aýratynlyklary bilen işleýän modul ýa-da kitaphana bar, meselem, e-poçta hatlary, gollary we baý tekstleri ibermek mümkinçiligi ýaly, ýöne başdan bir zat ýazmaly bolsaňyz, onda Java Mail API ajaýyp wariantydyr. Bu makalada, poçta API ( javax.mail ) ulanyp, Java programmasyndan e-poçta ibermegiň usullaryny öwreneris . Kod ýazmazdan ozal e-poçta işleýşiniň käbir esaslaryny bilmelisiňiz, mysal üçin size SMTP (pleönekeý poçta geçiriş protokoly) serweri gerek . Java programmaňyzy Linux-da işleýän bolsaňyz, SMTP daemonynyň 25-nji porty ulanýandygyny bilmelisiňiz. Java - dan habar ibermek üçin islendik poçta serwerini ulanyp bilersiňiz, şol sanda GMail, Yahoo ýa-da başga bir hyzmat üpjün ediji ýaly jemgyýetçilik poçta serwerleri. size olaryň SMTP serwer jikme-jiklikleri , host ady, port, baglanyşyk parametrleri we ş.m. gerek. Şeýle hem, e-poçtalary ygtybarly birikdirmek we ibermek üçin SSL ( ygtybarly rozetka gatlagy ), TLS ( Transport Layer Security ) ulanyp bilersiňiz , ýöne bu mysaly ýönekeýleşdirdik we Java programmasyndan hat ibermek üçin minimal logika üns berdik. Geljekki makalalarda goşundylary ulanyp e-poçta ibermegiň usullaryny, HTML formatlanan e-poçta nädip ibermelidigini, suratlary e-poçta nädip birikdirmelidigini, GMail serwerine birikmek we e-poçta ibermek we ş.m. SSL tassyklamasyny nädip ulanmalydygyny öwreneris. Indi, bu ýönekeý Java Mail API mysalyna düşüneliň (ara alyp maslahatlaşalyň) .
E-poçta ibermek üçin Java kody mysal
Java programmasyndan hat ibermek üçin size Java Mail API we Java işjeňleşdirme çarçuwasy (JAF) gerek bolar ; has takyk bolmagy üçin size 1.4.5.jar , smtp-1.4.4.jar we işjeňleşdirme-1.1.jar gerek bolar . Bu JAR faýllaryny göçürip alyp, bu programmany işletmek üçin olary Classpath -a goşmaly . Ativea-da bolmasa, Maveni garaşlylygy dolandyrmak üçin ulanyp bilersiňiz we ähli garaşlylygy şol ýere goşup bilersiňiz. Bu JAR faýllaryňyzyň hemmesi bolansoň, Java ulanyp e-poçta döretmek we ibermek üçin aşakdaky ädimleri ýerine ýetiriň.-
Session
Çagyryp bir obýekt dörediňSession.getDefaultInstance(properties)
, bu ýerdeproperties
- ähli möhüm häsiýetleri, mysal üçin, SMTP serweriniň baş adyny öz içine alýar. -
Öňki ädimde alnan
MimeMessage
obýekti geçip, bir obýekt dörediň .Session
Bu obýektde e-poçta alyjy, mowzuk, habar göwrümi, goşundylar we ş.m. ýaly dürli häsiýetler bar. -
E-poçta obýekt bolup bilýän
javax.mail.Transport
statiki usula jaň edip, e-poçta ibermek üçin ulanyň .send(email)
MimeMessage
Session
SMTP serweriniň görnüşine baglylykda tapawutlanýar, mysal üçin, hiç hili tassyklamany talap etmeýän SMTP serwerini ulanýan bolsaňyz, Session
diňe bir emläk bilen obýekt döredip bilersiňiz, mysal üçin smtp .mail.host, porty görkezmegiň zerurlygy ýok, sebäbi deslapky 25 porty bar. Başga bir tarapdan, GMail-iň SMTP Hosty ýaly TLS ýa-da SSL tassyklamasyny talap edýän SMTP serwerine birikýän bolsaňyz, TLS we poçta üçin mail.smtp.port = 547 ýaly birneme has köp aýratynlyk bermeli. smtp.port = SSL üçin 457. Bu, tassyklama bolmazdan adaty SMTP serwerine birigýän we Java Mail API ulanyp tekst habaryny iberýän doly Java programmasy.
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(); }
}
}
Çykyş: Java programmasyndan ýönekeý e-poçta ibermek üçin bu programmany düzüp we işledip bilersiňiz:
$ javac EmailSender.java
$ java EmailSender
E-poçta üstünlikli iberildi .... Görşüňiz ýaly, Java programmasyndan e-poçta ibermek gaty aňsat. Obýekti döredeniňizden soň MimeMessage
, TO
,, CC
. BCC
Alyjylar bilen gutaranymyzdan soň, hatyň mowzugyny we iň soňunda usula jaň edip hatyň mazmunyny görkezmeli message.setText()
; Birnäçe poçta ibermek isleseňiz, alyjylary kesgitlemek üçin aşakdaky usullar ulanylyp bilner:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
TO
Adamlary ulanyp Message.RecipientType.TO
, meýdana we - CC
ulanyp bilersiňiz . Message.RecipientType.CC
BCC
Message.RecipientType.BCC
Rorsalňyşlyklar we kadadan çykmalar
Java programmaçylarynyň köpüsi ilki e-poçta ibermek üçin programma ýazyp başlanda, bir ýalňyşlyga duş gelýärler, sebäbi köpüsi mail.jar we activation.jar Java programmasyndan e-poçta ibermek üçin ýeterlik bolar öýdýärler, bu beýle däl, esasanam Linux-da ýerli SMTP serweri arkaly e-poçta iberseňiz. Bu programmany diňe CLASSPATH-da diňe mail.jar we activation.jar bilen işledseňiz, bu ýalňyşlygy başdan geçirersiňiz.1-nji kadadan çykma:
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 ýalňyşlygyň çözgüdi gaty ýönekeý bolsa-da, sizi bulaşdyryp biler. java.net.ConnectException: Connection refused: connect
Adatça serwer işlemeýän bolsa ýa-da birikdirýän portuňyz nädogry görkezilse ýykylýar. Çözgüdi: poçta-1.4.5.jar-dan başga-da smtp-1.4.4.jar we işjeňleşdirme-1.1.jar gerek.
2-nji kadadan çykma:
Bu,NoClassDefFoundError
adatça, Classpath-da ýiten JAR faýlyny aňladýan başga bir ýalňyşlyk
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)
Çözgüt: Meselämi çözmegi başardym, nädogry “Classpath” sebäpli boldy. Şol bir katalogda programma üçin Java synp faýly talap edilýän üç sany JAR-ym bar bolsa-da, programmany şol ýerden işledenem bolsa, Java düşünip bilmedi. Aşakdaky buýruklary girizmäge synanyşdym we programma gowy işledi:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
E-poçta üstünlikli iberildi .... Häzirki katalogda “Classpath” argumentiniň ahyrynda nokat bilen bellik edilendigini ýadyňyzdan çykarmaň. Programmany Linux-da işledip ýörkäm, nokatly (;) ýerine (Windows-da bolşy ýaly) bir sütün (:) ulandym. Bu, poçta API ulanyp, Java programmasyndan nädip e-poçta ibermelidigi hakda. Muny gaty ýönekeý tapyp bilersiňiz, sebäbi üç JAR faýlyndan köp zat gerek däl. Baglylyklary dolandyrmak üçin Gradle ýa-da Maven ulansaňyz has aňsat. Aşakdaky sapaklarda goşundylar, suratlar we e-poçta ibermek üçin Java Mail API-iň has çylşyrymly mysallaryny göreris, hasabat we tablisa ibermek üçin owadan formatlanan e-poçta. Makalanyň terjimesi: Java programmasyndan mysal bilen nädip e-poçta ibermeli
GO TO FULL VERSION