Java колдонмосунан электрондук кат жөнөтүү жалпы талап болуп саналат. Негизги Java тиркемесинде, веб тиркемесинде же ишканалык Java тиркемесинде иштеп жатканыңыз маанилүү эмес, сизге каталар жөнүндө колдоо кызматкерлерин эскертүү үчүн электрондук кат жөнөтүшүңүз керек же жөн гана катталгандан кийин колдонуучуларга электрондук кат жөнөтүшүңүз керек болот. сырсөзүн баштапкы абалга келтириңиз же каттоодон өткөндөн кийин электрондук почта дарегин ырастоону сураныңыз. Java колдонмосунан электрондук каттарды жөнөтүү мүмкүнчүлүгү керек болгон көптөгөн сценарийлер бар. Даяр тиркемелерде сизде электрондук каттарды жөнөтүү үчүн бардык функциялар менен иштеген модул же китепкана бар, мисалы тиркемелерди, сүрөттөрдү, анын ичинде кол тамгаларды жана электрондук почталардагы бай тексттерди жөнөтүү мүмкүнчүлүгү, БИРОК сиз нөлдөн баштап бир нерсе жазуу керек болсо, анда Java Mail API сонун мүмкүнчүлүк. Бул макалада биз почта API ( javax.mail ) аркылуу Java колдонмосунан электрондук каттарды кантип жөнөтүүнү үйрөнөбүз . Кодду жазуудан мурун сиз электрондук почтанын иштешинин кээ бир негиздерин бorшиңиз керек, мисалы сизге SMTP (Жөнөкөй почта өткөрүп берүү протоколу) serverи керек . Эгер сиз Linux'та Java тиркемеңизди иштетип жатсаңыз, анда SMTP демону 25-портту колдоноорун бorшиңиз керек. Сиз Java аркылуу билдирүүлөрдү жөнөтүү үчүн каалаган почта serverин, анын ичинде GMail, Yahoo же башка кызмат көрсөтүүчү сыяктуу коомдук почта 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 аркылуу электрондук кат түзүү жана жөнөтүү үчүн төмөнкү кадамдарды аткарыңыз.-
Session
Чалуу аркылуу an object түзүңүзSession.getDefaultInstance(properties)
, мындаproperties
- бардык маанилүү касиеттерди камтыйт, мисалы, SMTP serverинин хост аты. -
Мурунку кадамда алынган
MimeMessage
an objectти өткөрүп берүү менен an object түзүңүз .Session
Бизде бул an objectте ар кандай касиеттердин топтому бар, мисалы, электрондук почтаны алуучу, тема, билдирүүнүн негизги бөлүгү, тиркемелер ж.б. -
javax.mail.Transport
Аны статикалык ыкманы чакырып электрондук кат жөнөтүү үчүн колдонуңузsend(email)
, мында электрондук почта an objectи болушу мүмкүнMimeMessage
.
Session
SMTP serverинин түрүнө жараша айырмаланат, мисалы, сиз эч кандай аутентификацияны талап кылбаган SMTP serverин колдонуп жатсаңыз, Session
бир гана касиети бар an object түзө аласыз, мисалы, 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
Ийгorктүү электрондук кат жөнөтүлдү.... Көрүнүп тургандай, Java программасынан электрондук каттарды жөнөтүү абдан оңой. Объектти түзгөндөн кийин MimeMessage
, сиз алуучуларды кошушуңуз керек, алар TO
, CC
, ичинде көрсөтүлүшү мүмкүн BCC
. алуучулар менен аяктагандан кийин, биз каттын темасын тактоо керек, жана, акырында, ыкмасын чакыруу менен каттын өзүнөн мазмуну message.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'тун жергorктүү 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 жана активация-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
Электрондук кат ийгorктүү жөнөтүлдү.... Сураныч, учурдагы каталог Класс жолунун аргументинин аягында чекит менен белгиленгенин эске алыңыз. Мен программаны Linuxда иштетип жүргөндүктөн, чекиттүү үтүрдүн (;) ордуна кош чекит (:) колдондум (Windowsдагыдай). Мунун баары mail API аркылуу Java колдонмосунан электрондук катты кантип жөнөтүү жөнүндө. Сиз муну абдан жөнөкөй деп тапсаңыз болот, анткени сизге үчтөн ашык JAR файлы керек эмес. Көз карандылыкты башкаруу үчүн Gradle же Maven колдонсоңуз, бул алда канча жеңил болот. Төмөнкү окуу куралдарында биз тиркемелери, сүрөттөрү бар электрондук каттарды жана отчетторду жана tableларды жөнөтүү үчүн сонун форматталган электрондук каттарды жөнөтүү үчүн Java Mail APIинин татаалыраак мисалдарын көрөбүз. Макаланын котормосу: Мисал менен Java программасынан электрондук почтаны кантип жөнөтүү керек
GO TO FULL VERSION