ملخص
1. المعايير المتعلقة بالبريد الإلكتروني
يمكن لبرامج خدمة Javamail التي توفرها الشركات المصنعة تنفيذ بروتوكولات بريد معينة بشكل انتقائي ، وتشمل بروتوكولات البريد الشائعة:
SMTP (بروتوكول نقل البريد البسيط) هو بروتوكول بسيط نقل البريد. إنها مجموعة من القواعد لنقل البريد من عنوان المصدر إلى عنوان الوجهة. يتحكم في طريقة عبور الحروف.
POP3 (إصدار بروتوكول البريد 3): إنه بروتوكول قياسي يستخدم لتلقي رسائل البريد الإلكتروني.
IMAP (بروتوكول الوصول إلى البريد عبر الإنترنت): أي بروتوكول الوصول إلى البريد عبر الإنترنت. إنه بروتوكول بديل لـ POP3.
تحتوي هذه البروتوكولات الثلاثة على بروتوكولات مقابلة لنقل SSL المشفر ، وهي SMTPs و POP3S و IMAPs.
MIME (ملحقات بريد الإنترنت متعددة الأغراض): أي معيار تمديد بريد الإنترنت متعدد الأغراض. إنه ليس بروتوكول نقل البريد. ومع ذلك ، يتم تعريف التنسيق للرسائل والمرفقات والمحتويات الأخرى التي يتم إرسالها.
2. مقدمة إلى Javamail
Javamail هي واجهة برمجة تطبيقات تم نشرها بواسطة Sun للتعامل مع البريد الإلكتروني. لا يتم تضمينه في Java SE ، ولكنه جزء من Java EE.
Mail.jar: يحتوي ملف الجرة هذا على API Javamail و SMTP المقدمة من SMTP و IMAP و POP3 ؛
Activation.jar: يحتوي ملف الجرة هذا على تطبيقات JAF API و Sun.
الفصول الأساسية المستخدمة في حزم Javamail لمعالجة رسائل البريد الإلكتروني هي: الخصائص ، الجلسة ، الرسالة ، العنوان ، المصادقة ، النقل ، المتجر ، إلخ.
3. عملية نقل البريد
كما هو موضح في الصورة أعلاه ، فإن خطوات معالجة رسائل البريد الإلكتروني هي كما يلي:
4. بنية الرسالة
Mimemessage Class: يمثل البريد الإلكتروني بأكمله.
فئة MimebodyPart: رسالة MIME تمثل الرسالة.
فئة Mimemultipart: تمثل معلومات MIME مجتمعة تتكون من معلومات MIME المتعددة.
5. الفئة الأساسية من Javamail
يوفر Javamail تجريدًا عالي المستوى لإرسال واستلام رسائل البريد الإلكتروني ، وتشكيل بعض الواجهات والفئات الرئيسية ، والتي تشكل أساس البرنامج. دعونا نلقي نظرة على هذه الأشياء الأكثر شيوعًا.
6. java.util.properties فئة (كائن خاصية)
تمثل فئة java.util.properties مجموعة من الخصائص.
كل من مفاتيحها وقيمها هي من نوع سلسلة.
نظرًا لأن Javamail يحتاج إلى التواصل مع خادم البريد ، فإن هذا يتطلب من البرنامج تقديم الكثير من المعلومات مثل عنوان الخادم والمنفذ وكلمة المرور وكلمة المرور ، إلخ.
مثال: على سبيل المثال ، يلف الرمز التالي العديد من معلومات السمة:
Properties Prop = New Properties () ؛ Prop.SetProperty ("mail.debug" ، "true") ؛ prop.setProperty ("mail.host" ، "[البريد الإلكتروني المحمي]") ؛ prop.setProperty ("mail.transport.protocol" ، "smtp") ؛ prop.setProperty (بالنسبة لبروتوكولات البريد المختلفة ، ينص Javamail على أنه يجب على مقدمي الخدمات دعم سلسلة من السمات.
الجدول التالي هو بعض السمات الشائعة (يتم تعيين قيم السمة كنوع سلسلة ، ويشير شريط نوع السمة فقط إلى كيفية تحليل السمات):
7. جافاكس.
تمثل الجلسة جلسة بريد.
تشمل الوظائف الرئيسية للجلسة جانبين:
تلقي معلومات سمة التكوين المختلفة: معلومات السمة المحددة من خلال كائن الخصائص ؛
تهيئة بيئة Javamail: تهيئة بيئة Javamail وفقًا لملف تكوين Javamail لإنشاء مثيلات من الفئات المهمة الأخرى من خلال كائن الجلسة.
يوفر Javamail معلومات التكوين الأساسية من خلال الملفات التالية في دليل META-Inf لحزمة JAR بحيث يمكن للجلسة تحميل فئة تنفيذ المزود وفقًا لملف التكوين هذا:
javamail.default.providers ؛
javamail.default.address.map.
مثال:
Properties Props = New Properties () ؛ props.setProperty ("mail.transport.protocol" ، "smtp") ؛ جلسة الجلسة = session.getInstance (الدعائم) ؛8. Javax.Mail.Transport Class (نقل البريد)
لا يوجد سوى طريقتان للتعامل مع عمليات البريد الإلكتروني: الإرسال أو الاستلام.
يصف جافاميل هاتين العمليتين المختلفين على أنهما ناقل حركة (javax.mail.transport) والتخزين (javax.mail.store) ، وإرسال إرسال البريد المقابل ، وتخزين استلام البريد المقابل.
GetTransport: GetTransport () في فصل الجلسة لديه طرق متعددة محملة يمكن استخدامها لإنشاء كائنات النقل.
الاتصال: إذا تم تعيين أمر المصادقة - mail.smtp.auth ، ثم عند الاتصال بالخادم باستخدام طريقة الاتصال لفئة النقل ، يجب إضافة اسم المستخدم وكلمة المرور.
SendMessage: يتم استخدام طريقة SendMessage لفئة النقل لإرسال رسائل البريد.
إغلاق: يتم استخدام الطريقة الإغلاق لفئة النقل لإغلاق الاتصال بخادم البريد.
9. javax.mail.store فئة (تخزين البريد)
GetStore: GetStore () في فئة الجلسة لديها طرق متعددة محملة يمكن استخدامها لإنشاء كائنات المتجر.
الاتصال: إذا تم تعيين أمر المصادقة - mail.smtp.auth ، ثم عند الاتصال بالخادم باستخدام طريقة الاتصال لفئة المتجر ، يجب إضافة اسم المستخدم وكلمة المرور.
GetFolder: يمكن أن تحصل طريقة GetFolder لفئة المتجر على كائن مجلد المجلد في صندوق البريد.
إغلاق: يتم استخدام الطريقة الإغلاق لفئة المتجر لإغلاق الاتصال بخادم البريد.
10. javax.mail.message (كائن الرسالة)
javax.mail.message هو فئة مجردة لا يمكن إنشاء مثيل لها إلا بواسطة الفئات الفرعية ، وفي معظم الحالات تكون javax.mail.internet.mimessage.
يمثل Mimemessage رسالة بريد إلكتروني من نوع MIME.
لإنشاء رسالة ، تحتاج إلى تمرير كائن الجلسة إلى مُنشئ Mimemessage:
رسالة mimemessage = mimemessage جديد (الجلسة) ؛
ملاحظة: هناك منشئون آخرون ، مثل استخدام تدفقات الإدخال بتنسيق RFC822 لإنشاء رسائل.
setFrom: اضبط مرسل البريد الإلكتروني
setRecipient: اضبط المرسل ، شخص CC ، والشخص السري للبريد الإلكتروني
أنواع العناوين الثلاثة المحددة مسبقًا هي:
message.RecipientType.to: المستلم
Message.RecipientType.cc: CC شخص
message.RecipientType.BCC: التخلي سراً
SetSubject: اضبط موضوع البريد الإلكتروني
setContent: اضبط محتوى البريد
setText: إذا كان محتوى البريد الإلكتروني هو نص عادي ، فيمكنك استخدام هذه الواجهة لتعيين المحتوى النصي.
10. javax.mail.address (العنوان)
بمجرد إنشاء جلسة ورسالة وملء الرسالة ، يمكنك استخدام العنوان لتحديد عنوان البريد. مثل الرسالة ، العنوان هو أيضا فئة مجردة. أنت تستخدم فئة javax.mail.internet.internetaddress.
إذا كان العنوان الذي تم إنشاؤه يحتوي فقط على عنوان بريد إلكتروني ، فما عليك سوى تمرير عنوان البريد الإلكتروني إلى المنشئ.
مثال:
عنوان العنوان = جديد InternetAddress ("[البريد الإلكتروني المحمي]") ؛
المصادقة: معتمد
مثل فئة Java.net ، يمكن لـ Javamail API أيضًا الاستفادة من المصادقة للوصول إلى الموارد المحمية من خلال اسم المستخدم وكلمة المرور. بالنسبة إلى Javamail API ، هذه الموارد هي خوادم البريد. يوجد Javamail Authenticator في حزمة javax.mail ، ويختلف عن مصادقة الفئة مع نفس الاسم في java.net. لا يشارك الاثنان نفس المصادقة لأن API Javamail يستخدم لـ Java 1.1 ، ولا يحتوي على فئة Java.net.
لاستخدام Authenticator ، قم أولاً بإنشاء فئة فرعية من الفئة التجريدية وإرجاع مثيل لكلمة مرور من طريقة GetPasswordauthentication (). بعد اكتمال الإنشاء ، يجب عليك تسجيل Authenticator مع الجلسة. ثم ، عند الحاجة إلى المصادقة ، سيتم إخطار المصادقة. يمكنك تشغيل Windows أو قراءة أسماء المستخدمين وكلمات المرور من ملف التكوين (على الرغم من أنه غير آمن لعدم تشفيره) وإعادتها إلى برنامج الاتصال ككائنات لكلمة مرور.
مثال:
Properties Props = New Properties () ؛ Authenticator Auth = new MyAuthentIcator () ؛ جلسة الجلسة = Session.getDefaultInstance (الدعائم ، AUTH) ؛
مثال
إرسال البريد النص
static static void main (string [] args) يلقي الاستثناء {properties prop = new properties () ؛ prop.SetProperty ("mail.debug" ، "true") ؛ prop.setProperty ("mail.host" ، mail_server_host) ؛ prop.SetProperty ("mail.transport.protocol" ، "smtp") ؛ prop.SetProperty ("mail.smtp.auth" ، "true") ؛ // 1. إنشاء جلسة جلسة = جلسة. getInstance (prop) ؛ نقل ts = فارغة ؛ // 2. احصل على كائن النقل من خلال الجلسة ts = session.getTransport () ؛ // 3. الاتصال بخادم البريد TS.Connect (mail_server_host ، المستخدم ، كلمة المرور) ؛ // 4. إنشاء رسالة mimemessage رسالة = جديد mimemessage (الجلسة) ؛ // رسالة رسائل البريد الإلكتروني رسالة. // مرسل message.setRecipient (message.RecipientType.to ، New InternetAddress (mail_to)) ؛ . // cc message.setRecipient (message.recipienttype.bcc ، new InternetAddress (mail_bcc)) ؛ // رسالة مرسل الرسالة. // عنوان البريد الإلكتروني // رسالة message.settext ("لا مثيل لها في العالم.") ؛ // 5. إرسال mail ts.sendMessage (message ، message.getAllRecipients ()) ؛ ts.close () ؛}أرسل رسائل البريد الإلكتروني التي تناسبه HTML
static static void main (string [] args) يلقي الاستثناء {properties prop = new properties () ؛ prop.SetProperty ("mail.debug" ، "true") ؛ prop.setProperty ("mail.host" ، mail_server_host) ؛ prop.SetProperty ("mail.transport.protocol" ، "smtp") ؛ prop.SetProperty ("mail.smtp.auth" ، "true") ؛ // 1. إنشاء جلسة جلسة = جلسة. getInstance (prop) ؛ نقل ts = فارغة ؛ // 2. احصل على كائن النقل من خلال الجلسة ts = session.getTransport () ؛ // 3. الاتصال بخادم البريد TS.Connect (mail_server_host ، المستخدم ، كلمة المرور) ؛ // 4. إنشاء رسالة mimemessage رسالة = جديد mimemessage (الجلسة) ؛ // رسالة رسائل البريد الإلكتروني رسالة. // مرسل message.setRecipient (message.RecipientType.to ، New InternetAddress (mail_to)) ؛ . // cc message.setRecipient (message.recipienttype.bcc ، new InternetAddress (mail_bcc)) ؛ // مستلم رسالة البريد الإلكتروني. // عنوان سلسلة البريد الإلكتروني htmlcontent = "<h1> hello </h1>" + "<p> عرض الصورة <img src = 'cid: abc.jpg'> 1.jpg </p>" ؛ نص mimebodypart = جديد mimebodypart () ؛ text.setContent (htmlcontent ، "text/html ؛ charset = utf-8") ؛ mimebodypart صورة = جديد mimebodypart () ؛ Datahandler DH = New Datahandler (New FileDataSource ("d: // [04] temp // img // 1.jpg") ؛ Image.setDatahandler (DH) ؛ Image.setContentId ("ABC.JPG") ؛ // وصف علاقة البيانات mimemultipart mm = new mimemultipart () ؛ mm.addbodypart (text) ؛ mm.addbodypart (Image) ؛ mm.setsubtype ("ذات الصلة") ؛ message.setContent (mm) ؛ message.savechanges () ؛ // 5. إرسال mail ts.sendMessage (message ، message.getAllRecipients ()) ؛ ts.close () ؛}إرسال رسائل البريد الإلكتروني مع المرفقات
static static void main (string [] args) يلقي الاستثناء {properties prop = new properties () ؛ prop.SetProperty ("mail.debug" ، "true") ؛ prop.setProperty ("mail.host" ، mail_server_host) ؛ prop.SetProperty ("mail.transport.protocol" ، "smtp") ؛ prop.SetProperty ("mail.smtp.auth" ، "true") ؛ // 1. إنشاء جلسة جلسة = جلسة. getInstance (prop) ؛ نقل ts = فارغة ؛ // 2. احصل على كائن النقل من خلال الجلسة ts = session.getTransport () ؛ // 3. الاتصال بخادم البريد TS.Connect (mail_server_host ، المستخدم ، كلمة المرور) ؛ // 4. إنشاء رسالة mimemessage رسالة = جديد mimemessage (الجلسة) ؛ // رسالة رسائل البريد الإلكتروني رسالة. // مرسل message.setRecipient (message.RecipientType.to ، New InternetAddress (mail_to)) ؛ . // cc message.setRecipient (message.recipienttype.bcc ، new InternetAddress (mail_bcc)) ؛ // مستلم رسالة البريد الإلكتروني. // عنوان البريد الإلكتروني mimebodypart = جديد mimebodypart () ؛ text.setContent ("يوجد ملحقان في البريد الإلكتروني." ، "text/html ؛ charset = utf-8") ؛ // وصف علاقة البيانات mimemultipart mm = new mimemultipart () ؛ mm.setsubtype ("ذات الصلة") ؛ mm.addbodypart (text) ؛ string [] files = {"d: // [04] temp // img // 1.jpg" ، "d: // [04] temp // img // 2.jpg"} ؛ // أضف مرفق بريد إلكتروني لـ (اسم ملف السلسلة: الملفات) {mimebodypart atchepart = new mimebodypart () ؛ anclespart.attachfile (اسم الملف) ؛ Mm.AddbodyPart (anclespart) ؛ } message.setContent (mm) ؛ message.savechanges () ؛ // 5. إرسال mail ts.sendMessage (message ، message.getAllRecipients ()) ؛ ts.close () ؛}احصل على رسائل البريد الإلكتروني في صندوق البريد الخاص بك
الفئة العامة storemail {Final Static String user = "Robot" ؛ // اسم المستخدم Final Static String Password = "Password520" ؛ // Password Public Final Static String mail_server_host = "mail. ***. com" ؛ . // text content type public final static string mail_from = "[email protected]" ؛ // Sender Public Final Static String Mail_to = "[البريد الإلكتروني المحمي]" ؛ // إلى سلسلة Static Static Static Mail_CC = المستلم للمستلم ؛ "؛ // cc person public static string mail_bcc = "[البريد الإلكتروني المحمي]" ؛ // أرسل سرا من الفراغ الثابت العام (سلسلة [] args) إلقاء الاستثناء {// إنشاء كائن خصائص مع خصائص معلومات اتصال محددة prop = new properties () ؛ prop.SetProperty ("mail.debug" ، "true") ؛ prop.SetProperty ("mail.store.protocol" ، "pop3") ؛ prop.SetProperty ("mail.pop3.host" ، mail_server_host) ؛ // 1. إنشاء جلسة جلسة الجلسة = session.getInstance (prop) ؛ // 2. // 3. الاتصال بمتجر خادم البريد. Connect (mail_server_host ، المستخدم ، كلمة المرور) ؛ // 4. احصل على مجلد البريد في مجلد صندوق البريد = store.getFolder ("Inbox") ؛ Folder.Open (folder.read_only) ؛ // احصل على جميع الرسائل في رسالة كائنات رسالة المجلد [] الرسائل = folder.getMessages () ؛ لـ (int i = 0 ؛ i <messages.length ؛ i ++) {string subsic = messages [i] .getSubject () ؛ سلسلة من = (الرسائل [i] .getFrom () [0]). toString () ؛ System.out.println ("th" + (i + 1) + "موضوع الرسالة:" + موضوع) ؛ system.out.println ("th" + (i + 1) + "عنوان المرسل للبريد الإلكتروني:" + من) ؛ } // 5. Folder.Close (false) ؛ store.close () ؛ }}البريد الإلكتروني إلى الأمام
مثال: احصل على البريد الإلكتروني الأول ضمن مجلد البريد المحدد وقم بإعادة توجيهه
static static void main (string [] args) يلقي الاستثناء {properties prop = new properties () ؛ prop.put ("mail.store.protocol" ، "pop3") ؛ prop.put ("mail.pop3.host" ، mail_server_host) ؛ prop.put ("mail.pop3.starttls.enable" ، "true") ؛ prop.put ("mail.smtp.auth" ، "true") ؛ prop.put ("mail.smtp.host" ، mail_server_host) ؛ // 1. إنشاء جلسة جلسة = session.getDefaultInstance (prop) ؛ // 2. اقرأ متجر مجلد البريد = Session.getStore ("pop3") ؛ store.connect (mail_server_host ، المستخدم ، كلمة المرور) ؛ مجلد المجلد = store.getFolder ("Inbox") ؛ Folder.Open (folder.read_only) ؛ // احصل على رسالة البريد الإلكتروني الأولى في رسالة مجلد البريد [] الرسائل = folder.getMessages () ؛ if (messages.length <= 0) {return ؛ رسالة رسالة = رسائل [0] ؛ // طباعة سلسلة رسالة المفتاح من = InternetAddress.toString (message.getFrom ()) ؛ if (من! = null) {system.out.println ("من:" + من) ؛ } replyto replyto = InternetAddress.toString (message.getReplyto ()) ؛ if (replyto! = null) {system.out.println ("reply-to:" + replyto) ؛ } string to = InternetAddress.toString (message.getRecipients (message.RecipientType.to)) ؛ if (to! = null) {system.out.println ("to:" + to) ؛ } string substr = message.getSubject () ؛ if (الموضوع! = null) {system.out.println ("الموضوع:" + موضوع) ؛ } تاريخ إرسال = message.getSentDate () ؛ if (send! = null) {system.out.println ("send:" + sent) ؛ } // قم بتعيين رسالة رأس رسالة البريد الإلكتروني إلى الأمام = new mimemessage (الجلسة) ؛ forward.setFrom (New InternetAddress (mail_from)) ؛ forward.setRecipient (message.recipienttype.to ، new InternetAddress (mail_to)) ؛ forward.setsubject ("FWD:" + message.getSubject ()) ؛ // قم بتعيين محتوى البريد الإلكتروني للأمام mimebodypart bodypart = new MimebodyPart () ؛ bodypart.setContent (رسالة ، "Message/RFC822") ؛ multipart multipart = جديد mimemultipart () ؛ multipart.addbodypart (bodypart) ؛ forward.setContent (multipart) ؛ forward.savechanges () ؛ Transport ts = session.getTransport ("smtp") ؛ Ts.Connect (المستخدم ، كلمة المرور) ؛ Ts.SendMessage (forward ، forward.getAllRecipients ()) ؛ المجلد. store.close () ؛ ts.close () ؛ System.out.println ("تم إعادة توجيه الرسالة بنجاح ...") ؛}ما سبق هو كل شيء عن هذا المقال. آمل أن يكون من المفيد للجميع أن يتعلموا كيفية إرسال واستقبال رسائل البريد الإلكتروني بواسطة Javamail.