JavaRush /جاوا بلاگ /Random-UR /جاوا ایپلیکیشن سے ای میل کیسے بھیجیں (مثال کے ساتھ)
PodoBulge
سطح
Минск

جاوا ایپلیکیشن سے ای میل کیسے بھیجیں (مثال کے ساتھ)

گروپ میں شائع ہوا۔
جاوا ایپلیکیشن سے ای میل بھیجنا ایک عام ضرورت ہے۔ اس سے کوئی فرق نہیں پڑتا کہ آپ بنیادی جاوا ایپلیکیشن، ویب ایپلیکیشن، یا انٹرپرائز جاوا ایپلیکیشن پر کام کر رہے ہیں، آپ کو سپورٹ سٹاف کو غلطیوں کے بارے میں آگاہ کرنے کے لیے ای میل بھیجنے کی ضرورت پڑ سکتی ہے، یا رجسٹریشن کے بعد صارفین کو صرف ایک ای میل بھیجنا پڑ سکتا ہے، ان کا پاس ورڈ دوبارہ ترتیب دیں، یا ان سے رجسٹریشن کے بعد ای میل ایڈریس کی تصدیق کرنے کو کہیں۔ ایسے بہت سے منظرنامے ہیں جب آپ کو جاوا ایپلیکیشن سے ای میل بھیجنے کی اہلیت کی ضرورت ہوتی ہے۔ جاوا ایپلیکیشن سے ای میل کیسے بھیجیں (مثال کے طور پر) - 1ریڈی میڈ ایپلی کیشنز میں آپ کے پاس پہلے سے ہی ایک ماڈیول یا لائبریری موجود ہے جو ای میلز بھیجنے کے لیے تمام خصوصیات کے ساتھ کام کرتی ہے، جیسے اٹیچمنٹ، تصاویر، بشمول دستخط اور ای میلز میں بھرپور متن بھیجنے کی صلاحیت، لیکن اگر آپ کو شروع سے کچھ لکھنا ہو، پھر جاوا میل API ایک بہترین آپشن ہے۔ اس آرٹیکل میں، ہم سیکھیں گے کہ میل API ( javax.mail ) کا استعمال کرتے ہوئے جاوا ایپلیکیشن سے ای میلز کیسے بھیجیں۔ کوڈ لکھنے سے پہلے آپ کو کچھ بنیادی باتیں معلوم ہونی چاہئیں کہ ای میل کیسے کام کرتی ہے، مثال کے طور پر آپ کو ایک SMTP (Simple Mail Transfer Protocol) سرور کی ضرورت ہے ۔ اگر آپ اپنی جاوا ایپلیکیشن لینکس پر چلا رہے ہیں، تو آپ کو معلوم ہونا چاہیے کہ SMTP ڈیمون پورٹ 25 استعمال کرتا ہے ۔ آپ جاوا کا استعمال کرتے ہوئے پیغامات بھیجنے کے لیے کسی بھی میل سرور کا استعمال کر سکتے ہیں، بشمول عوامی میل سرورز جیسے GMail، Yahoo یا کوئی اور سروس فراہم کرنے والا، سبھی آپ کو ان کے SMTP سرور کی تفصیلات کی ضرورت ہے ، جیسے میزبان نام، بندرگاہ، کنکشن پیرامیٹرز، وغیرہ۔ آپ محفوظ طریقے سے رابطہ قائم کرنے اور ای میلز بھیجنے کے لیے SSL ( محفوظ ساکٹ لیئر ) ) TLS ( ٹرانسپورٹ لیئر سیکیورٹی ) بھی استعمال کر سکتے ہیں، لیکن ہم نے اس مثال کو سادہ بنایا اور جاوا ایپلیکیشن سے خطوط بھیجنے کے لیے کم سے کم منطق پر توجہ مرکوز کی۔ مستقبل کے مضامین میں ہم سیکھیں گے کہ اٹیچمنٹ کا استعمال کرتے ہوئے ای میل کیسے بھیجنا ہے، ایچ ٹی ایم ایل فارمیٹ شدہ ای میل کیسے بھیجی جائے، ای میل کے ساتھ تصاویر کیسے منسلک کی جائیں، جی میل سرور سے جڑنے اور ای میل بھیجنے کے لیے ایس ایس ایل کی توثیق کا استعمال کیسے کیا جائے، وغیرہ۔ اب، آئیے اس سادہ جاوا میل API مثال کو سمجھتے ہیں (بات چیت کریں) ۔

ای میل بھیجنے کے لیے جاوا کوڈ کی مثال

جاوا پروگرام سے خط بھیجنے کے لیے، آپ کو Java Mail API اور Java ایکٹیویشن فریم ورک (JAF) کی ضرورت ہوگی ۔ زیادہ درست ہونے کے لیے، آپ کو mail-1.4.5.jar ، smtp-1.4.4.jar ، اور ایکٹیویشن-1.1.jar کی ضرورت ہوگی ۔ اس پروگرام کو چلانے کے لیے آپ کو ان JAR فائلوں کو ڈاؤن لوڈ کرنے اور اپنے کلاس پاتھ میں شامل کرنے کی ضرورت ہے۔ متبادل طور پر، آپ 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 ہوسٹ، تو آپ کو تھوڑی زیادہ خصوصیات فراہم کرنے کی ضرورت ہے، جیسے TLS اور میل کے لیے mail.smtp.port=547۔ 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فیلڈ میں ، اور ٹو - ۔ CCMessage.RecipientType.CCBCCMessage.RecipientType.BCC

غلطیاں اور مستثنیات

جب بہت سے جاوا پروگرامرز ای میل بھیجنے کے لیے پروگرام لکھنا شروع کرتے ہیں، تو ان میں ایک غلطی نظر آتی ہے کیونکہ ان میں سے اکثر کا خیال ہے کہ mail.jar اور activation.jar جاوا ایپلی کیشن سے ای میل بھیجنے کے لیے کافی ہوں گے، جو کہ ایسا نہیں ہے، خاص طور پر اگر آپ لینکس میں مقامی SMTP سرور کے ذریعے ای میل بھیجتے ہیں۔ اگر آپ اس پروگرام کو اپنے 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یہ عام طور پر اس وقت کریش ہو جاتا ہے جب سرور کام نہیں کر رہا ہوتا ہے یا جس پورٹ سے آپ جڑ رہے ہیں اس کی غلط وضاحت کی گئی ہے۔ حل: 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)
حل: میں اپنا مسئلہ حل کرنے میں کامیاب ہوگیا، یہ غلط کلاس پاتھ کی وجہ سے تھا۔ اگرچہ میرے پاس تینوں درکار 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