JavaRush /جاوا بلاگ /Random-SD /جاوا ايپليڪيشن مان اي ميل ڪيئن موڪليو (مثال سان)
PodoBulge
سطح
Минск

جاوا ايپليڪيشن مان اي ميل ڪيئن موڪليو (مثال سان)

گروپ ۾ شايع ٿيل
جاوا ايپليڪيشن مان هڪ اي ميل موڪلڻ هڪ عام گهرج آهي. اهو مسئلو ناهي ته ڇا توهان بنيادي جاوا ايپليڪيشن تي ڪم ڪري رهيا آهيو، هڪ ويب ايپليڪيشن، يا هڪ انٽرپرائز جاوا ايپليڪيشن، توهان کي شايد هڪ اي ميل موڪلڻ جي ضرورت هجي ته مدد ڪندڙ عملي کي غلطين جي باري ۾ خبردار ڪرڻ لاء، يا صرف رجسٽريشن تي صارفين کي اي ميل موڪليو، انهن جو پاسورڊ ٻيهر سيٽ ڪريو، يا انهن کان پڇو ته رجسٽريشن کان پوء اي ميل پتي جي تصديق ڪريو. اتي ڪيترائي منظرنامو آھن جڏھن توھان کي جاوا ايپليڪيشن مان اي ميلون موڪلڻ جي صلاحيت جي ضرورت آھي. جاوا ايپليڪيشن مان اي ميل ڪيئن موڪليو (مثال سان) - 1تيار ٿيل ايپليڪيشنن ۾ توهان وٽ اڳ ۾ ئي هڪ ماڊل يا لائبريري آهي جيڪا اي ميل موڪلڻ لاءِ سڀني خاصيتن سان ڪم ڪري ٿي، جهڙوڪ اٽيچمينٽ، تصويرون موڪلڻ جي صلاحيت، بشمول دستخط ۽ اي ميلن ۾ ڀرپور متن، پر جيڪڏهن توهان کي شروع کان ڪجهه لکڻ جي ضرورت آهي، پوءِ جاوا ميل API هڪ بهترين آپشن آهي. هن آرٽيڪل ۾، اسان سکنداسين ته ڪيئن موڪلجي جاوا ايپليڪيشن مان اي ميلون ميل API استعمال ڪندي ( javax.mail ). ڪوڊ لکڻ کان اڳ توھان کي ڪجھ بنيادي ڳالھيون ڄاڻڻ گھرجي ته اي ميل ڪيئن ڪم ڪري ٿي، مثال طور توھان کي ضرورت آھي SMTP (Simple Mail Transfer Protocol) سرور . جيڪڏهن توهان پنهنجي جاوا ايپليڪيشن لينڪس تي هلائي رهيا آهيو، ته توهان کي ڄاڻڻ گهرجي ته SMTP ڊيمون پورٽ 25 استعمال ڪري ٿو . توهان جاوا استعمال ڪندي پيغام موڪلڻ لاءِ ڪو به ميل سرور استعمال ڪري سگهو ٿا، بشمول پبلڪ ميل سرور جهڙوڪ GMail، Yahoo يا ڪنهن ٻئي خدمت فراهم ڪندڙ، سڀ توھان کي ضرورت آھي انھن جي SMTP سرور جي تفصيل ، جھڙوڪ ھوسٽ جو نالو، پورٽ، ڪنيڪشن پيٽرول وغيره. توهان پڻ استعمال ڪري سگهو ٿا SSL ( محفوظ ساکٽ پرت ) ، TLS ( ٽرانسپورٽ پرت سيڪيورٽي ) محفوظ طور تي ڳنڍڻ ۽ اي ميلون موڪلڻ لاءِ ، پر اسان هن مثال کي سادو ڪيو ۽ جاوا ايپليڪيشن مان خط موڪلڻ لاءِ گهٽ ۾ گهٽ منطق تي ڌيان ڏنو. مستقبل جي مضمونن ۾ اسين سکنداسين ته ڪيئن اٽيچمينٽ استعمال ڪندي اي ميل موڪلجي، HTML فارميٽ ٿيل اي ميل ڪيئن موڪلجي، تصويرن کي اي ميل سان ڪيئن ڳنڍجي، GMail سرور سان ڳنڍڻ لاءِ SSL تصديق ڪيئن ڪجي ۽ اي ميلون موڪليون، وغيره. ھاڻي، اچو ته سمجھون (بحث ڪريو) ھي سادو Java Mail API مثال .

مثال جاوا ڪوڊ اي ميل موڪلڻ لاءِ

جاوا پروگرام مان خط موڪلڻ لاءِ، توھان کي ضرورت پوندي Java Mail API ۽ Java Activation Framework (JAF) ؛ وڌيڪ درست ٿيڻ لاءِ، توھان کي ضرورت پوندي mail-1.4.5.jar , smtp-1.4.4.jar , and activation-1.1.jar . توھان کي انھن JAR فائلن کي ڊائون لوڊ ڪرڻ جي ضرورت آھي ۽ ھن پروگرام کي هلائڻ لاءِ انھن کي پنھنجي Classpath ۾ شامل ڪريو . متبادل طور تي، توھان استعمال ڪري سگھو ٿا Maven انحصار جي انتظام لاءِ ۽ اتي سڀ انحصار شامل ڪريو. هڪ دفعو توهان وٽ اهي سڀئي JAR فائلون آهن، صرف جاوا استعمال ڪندي اي ميل ٺاهڻ ۽ موڪلڻ لاءِ هيٺ ڏنل قدمن تي عمل ڪريو.
  1. Sessionڪال ڪندي هڪ اعتراض ٺاهيو Session.getDefaultInstance(properties)، جتي properties- سڀني اهم ملڪيتن تي مشتمل آهي، مثال طور، SMTP سرور جو ميزبان نالو.

  2. ھڪڙي شئي ٺاھيو ان کي گذرڻ سان پوئين قدم ۾ حاصل ڪيل MimeMessageاعتراض . Sessionاسان وٽ هن اعتراض ۾ مختلف ملڪيتن جو هڪ سيٽ آهي جهڙوڪ اي ميل وصول ڪندڙ، مضمون، پيغام جو جسم، منسلڪات، وغيره.

  3. ان کي استعمال ڪريو javax.mail.Transportاي ميل موڪلڻ لاءِ ڪال ڪري هڪ مستحڪم طريقو send(email)، جتي اي ميل هڪ اعتراض ٿي سگهي ٿو MimeMessage.

پراپرٽيز جو تعداد جيڪو توھان پاس ڪندا آھيو ھڪڙو اعتراض ٺاھيو ٿا SessionSMTP سرور جي قسم تي منحصر آھي، مثال طور، جيڪڏھن توھان ھڪڙو SMTP سرور استعمال ڪري رھيا آھيو جنھن کي ڪنھن به تصديق جي ضرورت نه آھي، توھان ھڪڙو اعتراض ٺاھي سگھو ٿا Sessionھڪڙي ملڪيت سان، مثال طور، smtp .mail.host، ۽ توهان کي پورٽ جي وضاحت ڪرڻ جي ڪا ضرورت ناهي ڇو ته ان ۾ پورٽ 25 ڊفالٽ آهي. ٻئي طرف، جيڪڏهن توهان هڪ SMTP سرور سان ڳنڍي رهيا آهيو جنهن کي TLS يا SSL تصديق جي ضرورت آهي، جهڙوڪ GMail جي SMTP ميزبان، پوء توهان کي ڪجهه وڌيڪ ملڪيت مهيا ڪرڻ جي ضرورت آهي، جهڙوڪ mail.smtp.port=547 TLS ۽ ميل لاءِ. smtp.port= 457 SSL لاءِ. هي هڪ مڪمل جاوا پروگرام آهي جيڪو هڪ معياري SMTP سرور سان ڳنڍي ٿو بغير تصديق جي ۽ موڪلي ٿو ٽيڪسٽ پيغام جاوا ميل API استعمال ڪندي.
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(); }

     }

}
ٻاھر ڪڍڻ: توھان ھن پروگرام کي گڏ ڪري سگھوٿا ۽ ھلائي سگھوٿا جاوا پروگرام مان ھڪڙو سادو اي ميل موڪلڻ لاءِ.
$ javac EmailSender.java
$ java EmailSender
اي ميل ڪاميابيءَ سان موڪليو ويو.... جيئن توهان ڏسي سگهو ٿا، جاوا پروگرام مان اي ميلون موڪلڻ تمام آسان آهي. هڪ دفعو توهان اعتراض ٺاهي ڇڏيو 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.

غلطيون ۽ استثنا

جڏهن جاوا جا ڪيترائي پروگرامر پهريون ڀيرو اي ميل موڪلڻ لاءِ پروگرام لکڻ شروع ڪندا آهن، انهن ۾ هڪ غلطي نظر ايندي آهي، ڇاڪاڻ ته انهن مان اڪثر اهو سمجهندا آهن ته mail.jar ۽ activation.jar جاوا ايپليڪيشن مان اي ميل موڪلڻ لاءِ ڪافي هوندا، جيڪو ائين ناهي. خاص طور تي جيڪڏهن توهان لينڪس ۾ مقامي SMTP سرور ذريعي اي ميل موڪليندا آهيو. جيڪڏهن توهان هن پروگرام کي صرف mail.jar ۽ activation.jar سان هلائيندا آهيو توهان جي CLASSPATH ۾، توهان کي گهڻو ڪري اها غلطي ملندي.

استثنا 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اهو عام طور تي تباھ ٿيندو آهي جڏهن سرور ڪم نه ڪري رهيو آهي يا بندرگاهه جنهن سان توهان ڳنڍي رهيا آهيو غلط طور تي بيان ڪيو ويو آهي. حل: mail-1.4.5.jar کان علاوه، توهان کي smtp-1.4.4.jar ۽ activation-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)
حل: مون پنهنجو مسئلو حل ڪرڻ ۾ ڪامياب ٿي ويو، اهو هڪ غلط ڪلاس پاٿ جي ڪري هو. جيتوڻيڪ مون وٽ سڀئي ٽي گهربل JARs هئا، هڪ ئي ڊاريڪٽري ۾ پروگرام لاءِ جاوا ڪلاس فائل، ۽ پروگرام اتان هليو ويو، جاوا ان کي سمجهي نه سگهيو. مون ھيٺ ڏنل حڪمن جي ڪوشش ڪئي ۽ پروگرام ٺيڪ ڪم ڪيو:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
ڪاميابيءَ سان اي ميل موڪليو ويو.... مهرباني ڪري نوٽ ڪريو ته موجوده ڊاريڪٽري کي ڪلاس پاٿ آرگيومينٽ جي آخر ۾ ڊاٽ سان نشان لڳايو ويو آهي. جيئن ته مان لينڪس تي پروگرام هلائي رهيو هوس، مون هڪ سيميڪولن (؛) جي بدران ڪولن (:) استعمال ڪيو (جيئن ونڊوز ۾). اهو سڀ ڪجهه آهي ته ڪيئن موڪليو جاوا ايپليڪيشن مان اي ميل ميل API استعمال ڪندي. توهان شايد اهو تمام سادو ڳولي سگهو ٿا، ڇو ته توهان کي ٽن JAR فائلن کان وڌيڪ ڪنهن به شيء جي ضرورت ناهي. اهو تمام آسان آهي جيڪڏهن توهان استعمال ڪريو Gradle يا Maven انحصار کي منظم ڪرڻ لاءِ. هيٺين سبقن ۾ اسان جاوا ميل API جا وڌيڪ پيچيده مثال ڏسندا اي ميلون موڪلڻ لاءِ منسلڪات سان، تصويرن سان، ۽ رپورٽون ۽ ٽيبل موڪلڻ لاءِ خوبصورت فارميٽ ٿيل اي ميلون. مضمون جو ترجمو: جاوا پروگرام مان اي ميل ڪيئن موڪليو مثال سان
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION