يستخدم Javamail API فئة javax.mail.message لتمثيل رسالة. فئة الرسائل عبارة عن فئة مجردة ، لذلك نحتاج إلى استخدام فئة الفئة الفرعية javax.mail.internet.mimemessage لإنشاء كائن مثيل لفئة الرسائل. إذا أنشأنا رسالة نصية بسيطة ، فيمكن أن تلبي فئة mimemessage احتياجاتنا. ومع ذلك ، إذا كنا بحاجة إلى إنشاء بريد إلكتروني معقد يحتوي على موارد أو مرفقات مضمنة ، فنحن بحاجة إلى استخدام فئات مثل mimemessage و javax.mail.internet.mimebodypart و javax.mail.internet.mimultipart في javamail API.
1. فئة mimemessage تمثل البريد الإلكتروني بأكمله
2. تمثل فئة MimebodyPart رسالة تمرير عبر البريد الإلكتروني
3. تمثل فئة Mimemultipart رسالة MIME مجتمعة تتكون من رسائل MIME متعددة.
وترد العلاقة العاملة لهذه الفئات الثلاث في الشكل أدناه:
على الرغم من أن مطوري التطبيقات عادة ما يحتاجون فقط إلى استخدام الفئات الرئيسية الثلاثة: mimemessage و mimebodypart و mimemultipart عند إنشاء محتوى البريد الإلكتروني باستخدام javamailapi ، من الضروري أيضًا فهم علاقة الميراث الصف. يسرد الشكل التالي علاقات الميراث والطرق المشتركة لهذه الفئات الثلاث.
بعد ذلك ، استخدم فئة javax.mail.internet.mimemessage لإنشاء رسالة نصية بسيطة.
استيراد java.util.date ؛ استيراد java.Util.properties ؛ استيراد javax.mail.message ؛ استيراد javax.mail.session ؛ استيراد javax.mail.internet.internetaddress args) يلقي الاستثناء {string من = "[email protected]" ؛ String to = "[email protected]" ؛ موضوع السلسلة = "اختبار" ؛ سلسلة body = "اختبار !!!" ؛ // إنشاء جلسة كائن مثيل الجلسة = session.getDefaultInstance (خصائص جديدة ()) ؛ // إنشاء كائن مثيل mimemessage mimemessage msg = new mimemessage (الجلسة) ؛ // set sender msg.setfrom (new InternetAddress (from)) ؛ // تعيين مستلم msg.setRecipients (message.recipienttype.to ، InternetAddress.parse (to)) ؛ // تعيين تاريخ إرسال msg.setsentDate (تاريخ جديد ()) ؛ // قم بتعيين موضوع البريد الإلكتروني msg.setsubject (الموضوع) ؛ // قم بتعيين نص البريد الإلكتروني لمحتوى النص العادي msg.settext (الجسم) ؛ // حفظ وإنشاء محتوى البريد الإلكتروني النهائي msg.savechanges () ؛ // اكتب محتويات كائن mimemessage إلى ملف msg.writeto (fileOutputStream جديد ("c: //test.eml")) ؛ }}نستخدم عميل البريد الإلكتروني (باستخدام FoxMail هنا) لفتح ملف test.eml ضمن محرك الأقراص C ، ويمكنك رؤية المعلومات التالية ، مما يشير إلى أن بريدنا الإلكتروني قد تم إنشاؤه بنجاح.
فيما يلي تفسير موجز لبعض الفصول التي تظهر أعلاه
1. فئة mimemessage: قدمت أعلاه أن mimemessage هي فئة تنفيذ ملموسة لفئة الرسائل ، والتي يتم استخدامها لإنشاء كائن مثيل لفئة الرسائل. هنا يمرر المنشئ كائن جلسة كمعلمة ؛
2. فئة الجلسة: يتم استخدام هذا الكائن لجمع معلومات اتصال الشبكة بين العميل وخادم البريد وتحديد معلومات البيئة المطلوبة لتحديد برنامج البريد بأكمله. يتم تخزين هذه المعلومات في كائن الجلسة كسمات لكائن الجلسة. يستخدم كائن الجلسة كائن java.util.properties للحصول على خادم البريد واسم المستخدم ومعلومات كلمة المرور والمعلومات المشتركة التي يحتاجها التطبيق بأكمله إلى استخدامه. نظرًا لأن مُنشئ فئة الجلسة خاصة ، فإننا نستخدم طريقة المصنع الثابت لـ GetDefaultInstance () التي توفرها فئة الجلسة للحصول على كائن جلسة افتراضي ؛
3. فئة الخصائص: تمثل هذه الفئة مجموعة خاصية ثابتة ، يتم استخدامها لتخزين معلومات زوج القيمة الرئيسية كمعلمات لإنشاء كائن جلسة. هنا يتم بناء مجموعة فارغة كمعلمة.
4. فئة InternetAddress: هذه الفئة هي فئة فرعية لفئة عنوان الفصل التجريدي ، وتستخدم لإنشاء عنوان بريد إلكتروني ؛
5. فئة RecientType: هذه الفئة هي فئة داخلية من فئة الرسائل. هذا الفئة لديها 3 متغيرات ثابتة. لتمثيل المستلم ، يمثل CC مرسل CC (يعرف المستلم مرسل CC) ، ويمثل BCC المرسل السري المرسل (لا يعرف المستلم مرسل المرسل).
يحتوي البريد الإلكتروني أعلاه فقط على نص بسيط. في بعض الأحيان ، نحتاج إلى استخدام ملفات HTML لإثراء جسم البريد الإلكتروني الخاص بنا ، مثل استخدام علامات HTML لكتابة جسم البريد الإلكتروني ، واستخدام علامات HTML لتقديم بعض الصور أو الأصوات في جسم البريد الإلكتروني. الرمز التالي ينشئ بريدًا إلكترونيًا يحتوي على تنسيق HTML
استيراد java.util.date ؛ استيراد java.util.properties ؛ استيراد javax.mail.message ؛ استيراد javax.mail.session ؛ استيراد javax.mail.internet.internetaddress Main (String [] args) يلقي استثناء {string من = "[email protected]" ؛ String to = "[email protected]" ؛ موضوع السلسلة = "اختبار" ؛ String Body = "<h4> مرحبًا بك في قراءة هذا البريد الإلكتروني </h4>" ؛ // إنشاء جلسة كائن مثيل الجلسة = session.getDefaultInstance (خصائص جديدة ()) ؛ // إنشاء كائن مثيل mimemessage mimemessage msg = new mimemessage (الجلسة) ؛ // set sender msg.setfrom (new InternetAddress (from)) ؛ // تعيين مستلم msg.setRecipients (message.recipienttype.to ، InternetAddress.parse (to)) ؛ // تعيين تاريخ إرسال msg.setsentDate (تاريخ جديد ()) ؛ // قم بتعيين موضوع البريد msg.setsubject (الموضوع) ؛ // قم بتعيين HTML تنسيق البريد الإلكتروني msg.setContent (الجسم ، "text/html ؛ charset = gb2312") ؛ // حفظ وإنشاء محتوى البريد النهائي msg.savechanges () ؛ // اكتب محتويات كائن mimemessage إلى ملف msg.writeto (fileOutputStream جديد ("c: //test.eml")) ؛ }}سوف نستخدم Foxmail لفتح test.eml ، والشاشة التالية
الفرق من الكود السابق هو أنه عندما نقوم بتعيين محتوى البريد الإلكتروني ، فإننا نستخدم طريقة setContent بدلاً من طريقة setText ، وتحديد نوع MIME لجسم البريد الإلكتروني كنص/HTML.
لقد تعلمنا الآن إنشاء رسائل بريد إلكتروني مع علامات HTML ، ولكن في بعض الأحيان قد نحتاج إلى إدراج بعض الصور في البريد الإلكتروني للتعبير عن معناها بشكل أكثر حدًا. ثم نحتاج إلى استخدام فئة mimemultipart وفئة MimeBodyPart
استيراد java.io.fileOutputStream ؛ استيراد java.util.properties ؛ استيراد javax.activation.datahandler javax.mail.internet.mimemessage ؛ import javax.mail.internet.mimemultipart ؛ public class picturemessage {public static void main (string [] args) reconsed {string from = "[email protected]" // strep string string string = "HTML email" ؛ string body = "<a href = http: //www.cnblogs.com>" + "مرحبًا بكم في حديقة المدونة </a> </br>" + "<img src =/" c: //dog.jpg/ ">" ؛ جلسة الجلسة = session.getDefaultInstance (خصائص جديدة ()) ؛ // إنشاء كائن mimemessage وقم بتعيين مختلف حقول رأس الرسائل mimemessage = mimemessage (الجلسة) ؛ message.setfrom (New InternetAddress (من)) ؛ message.setRecipients (message.RecipientType.to ، InternetAddress.parse (to)) ؛ message.SetSubject (الموضوع) ؛ // إنشاء كائن mimemultipart مع النوع الفرعي "ذات الصلة". mimemultipart multipart = new mimemultipart ("ذات الصلة") ؛ ] htmlbodypart.setContent (الجسم ، "النص/html ؛ charset = gb2312") ؛ multipart.addbodypart (htmlbodypart) ؛ ] FileDataSource fds = new FileDataSource ("c: //dog.jpg") ؛ gifbodypart.setFilename (fds.getName ()) ؛ gifbodypart.setdatahandler (New Datahandler (FDS)) ؛ multipart.addbodypart (gifbodypart) ؛ /** قم بتعيين كائن mimemultipart على محتوى الرسالة بأكملها ، انتبه إلى استدعاء طريقة savechanges للحصول على التحديثات*/ message.setContent (multipart) ؛ message.savechanges () ؛ // اكتب محتويات كائن mimemessage إلى message.writeto (fileOutputStream جديد ("c: //picturemessage.eml")) ؛ }}الرمز يبدو معقدا بعض الشيء. يمكنك إلقاء نظرة على مخطط العلاقة بين mimemessage المذكور أعلاه ، mimemultipart و mimebodypart. هذا سيجعل من السهل فهم الكود أعلاه. نفتح PictureMessage.eml ونرى المعلومات التالية ، والتي توضح أننا قد أنشأنا بريدًا إلكترونيًا بنجاح مع صورة ، ويتم تضمين الصورة في البريد الإلكتروني في شكل مرفق.
Mimemultipart لديه مُنشئان.
Mimemultipart العامة () Mimemultipart العامة (نوع السلسلة الفرعية)
الأول هو بدون معلمة ، وكائن المثيل الافتراضي يحتوي على نوع MIME مختلط. الثاني يضع نوعًا لإنشاء كائن مثيل لفئة mimemultipart. هناك ثلاثة أنواع شائعة الاستخدام: مختلطة ، ذات صلة ، وبديل. العلاقة الجمع بين هذه الأنواع الثلاثة في MIME هي كما يلي:
الآن نستخدم العلاقة الجمع الموضحة أعلاه لإنشاء رسالة مع مرفق ومورد مضمن في الجسم.
استيراد java.io.fileOutputStream ؛ استيراد java.util.properties ؛ استيراد javax.activation.datahandler javax.mail.internet.mimemessage ؛ import javax.mail.internet.MimeMultipart ؛ public class complexmessage {public static void main (string [] args) rems stispion {session = session.getDefaultInstance (properties ()) ؛ رسالة mimemessage = createMessage (الجلسة) ؛ message.writeto (fileOutputStream جديد ("c: //complexmessage.eml")) ؛ } static mimemessage createMessage (جلسة الجلسة) يلقي الاستثناء {string من = "[email protected]" ؛ // سلسلة عنوان المرسل إلى = "[email protected]" ؛ // strep string string string = "HTML email" ؛ // البريد الإلكتروني موضوع سلسلة body = "<a href = http: //www.cnblogs.com>" + "مرحبًا بك في حديقة المدونة </a> </br>" + "<img src =/" c: //dog.jpg/ "> ؛ رسالة mimemessage = mimemessage جديد (الجلسة) ؛ message.setfrom (New InternetAddress (من)) ؛ message.setRecipients (message.RecipientType.to ، InternetAddress.parse (to)) ؛ message.SetSubject (الموضوع) ؛ // إنشاء كل كائن mimebodypart الذي يمثل هيئة الرسائل والمرفق mimebodypart contentPart = createContent (الجسم ، "c: //dog.jpg") ؛ // يمكن أن يكون المرفق التالي هو الفيديو أو الصوت mimebodypart acnclespart1 = createAttachment ("c: //music.mp3") ؛ mimebodypart anclantpart2 = createAttachment ("c: //video.avi") ؛ // إنشاء كائن mimemultipart للجمع بين جسم الرسائل والمرفق mimemultipart allmultipart = new mimemultipart ("mixed") ؛ allmultipart.addbodypart (contentPart) ؛ AllMultipart.AddbodyPart (anclespart1) ؛ allmultipart.addbodypart (anclespart2) ؛ // قم بتعيين محتوى البريد الإلكتروني بأكمله على رسالة كائن mimemultipart المدمجة النهائية (allmultipart) ؛ message.savechanges () ؛ رسالة العودة ؛ } static static mimebodypart createContent (سلسلة السلسلة ، اسم ملف السلسلة) يلقي الاستثناء { /** إنشاء كائن mimemultipart الذي يمثل رسالة mime المشتركة ، وكائن mimebodypart الذي يتم حفظ كائن mimemultipart إليه* / mimebodypart contentPart = new mimebodpart () ؛ mimemultipart contentMultiPart = new mimemultipart ("ذات الصلة") ؛ /** إنشاء كائن mimebodypart لحفظ الجسم HTML وحفظه إلى mimemultipart*/ mimeBodyPart htmlbodypart = new mimebodypart () ؛ htmlbodypart.setContent (الجسم ، "النص/html ؛ charset = gb2312") ؛ contentMultipart.AddbodyPart (htmlbodypart) ؛ /** إنشاء كائن mimebodypart لحفظ الصورة وحفظها إلى mimemultipart*/ mimebodypart gifbodypart = new mimebodypart () ؛ FileDataSource FDS = FileDataSource جديد (اسم الملف) ؛ gifbodypart.setdatahandler (New Datahandler (FDS)) ؛ contentMultiPart.AddbodyPart (gifbodypart) ؛ // حفظ كائن mimemultipart إلى كائن mimebodypart contentPart.setContent (contentMultiPart) ؛ إرجاع contentpart ؛ } static mimebodypart createattachment (اسم ملف السلسلة) يلقي استثناء {// إنشاء كائن mimebodypart يحفظ المرفق ، ويضيف محتوى المرفق والمعلومات المقابلة mimebodypart anclantpart = new mimebodypart () ؛ FileDataSource FDS = FileDataSource جديد (اسم الملف) ؛ anclespart.setdatahandler (New Datahandler (FDS)) ؛ anclantpart.setFilename (fds.getName ()) ؛ إرجاع إرفاق. }}افتح ملف ComplexMessage.eml ويمكنك رؤية المحتوى التالي:
لقد تعلمنا الآن كيفية إنشاء بريد إلكتروني نصي عادي ، والبريد الإلكتروني بتنسيق HTML ، والبريد الإلكتروني مع صور ومرفقات مضمنة. ستقدم المقالة التالية كيفية إرسال رسائل بريد إلكتروني
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.