هذه المقالة هي المادة الثانية عشرة من سلسلة VHR ، مع عنوان المشروع https://github.com/lenve/vhr
إرسال البريد الإلكتروني هو أيضا مشكلة شائعة. على الرغم من أن الكود بسيط ، إلا أن العديد من الأصدقاء لا يفهمون العملية جيدًا ، لذلك ما زالوا يخططون للتحدث معك حول هذا الموضوع.
اتفاق البريد الإلكتروني
غالبًا ما نسمع بروتوكولات البريد الإلكتروني المختلفة ، مثل SMTP و POP3 و IMAP. إذن ما هي وظائف هذه البروتوكولات وما هي الاختلافات؟ دعنا نناقش هذه القضية أولاً.
SMTP هو بروتوكول طبقة التطبيق يعتمد على TCP/IP. وضعه يشبه إلى حد ما HTTP. رقم المنفذ الافتراضي لخادم SMTP هو 25 عامًا. رؤية هذا ، قد يعتقد الأصدقاء أنه نظرًا لأن بروتوكول SMTP يعتمد على بروتوكول طبقة تطبيق TCP/IP ، هل يمكنني أيضًا إرسال بريد إلكتروني عبر Socket؟ الجواب نعم.
في الحياة ، علينا أن نمر بالخطوات التالية:
1. Xiao Wang من Shenzhen قام أولاً بتسليم البريد الإلكتروني إلى مكتب البريد في Shenzhen
2. سيقوم مكتب البريد في Shenzhen بتسليم البريد إلى مكتب البريد في شنغهاي
3. جاء شياو تشانغ من شنغهاي إلى مكتب البريد لالتقاط البريد
هذه نسخة مخفضة من عملية إرسال البريد في الحياة. يمكن أن تتوافق هذه الخطوات الثلاث مع عملية إرسال بريدنا الإلكتروني بشكل منفصل. لنفترض أنه يتم إرسال رسائل البريد الإلكتروني من [email protected] إلى [email protected]:
[email protected] يسلم أولاً البريد الإلكتروني إلى Tencent’s Mail Server
2. يقوم خادم بريد Tencent بتسليم بريدنا إلى خادم البريد الخاص بـ Netease
[email protected] قم بتسجيل الدخول إلى خادم البريد الإلكتروني الخاص بـ Netease لعرض رسائل البريد الإلكتروني
تسليم البريد الإلكتروني هي هذه العملية تقريبًا ، والتي تتضمن بروتوكولات متعددة. دعونا نلقي نظرة عليه بشكل منفصل.
الاسم الكامل لبروتوكول SMTP هو بروتوكول نقل البريد البسيط ، والذي يتم ترجمته كبروتوكول بسيط نقل البريد. يحدد قواعد الاتصال بين برنامج عميل البريد وخادم SMTP وخادم SMTP. بمعنى آخر ، تستخدم عملية توصيل رسائل البريد الإلكتروني إلى SMTP Server من Tencent أولاً بروتوكول SMTP ، ثم يقدم SMTP Server من Tencent رسائل البريد الإلكتروني إلى خادم SMTP الخاص بـ Netease يستخدم بروتوكول SMTP ، والذي يستخدم لتلقي رسائل البريد الإلكتروني. الاسم الكامل لبروتوكول POP3 هو بروتوكول مكتب البريد ، والذي يتم ترجمته كبروتوكول مكتب البريد. يحدد قواعد الاتصال بين عميل البريد وخادم POP3. إذن في أي سيناريو ، سيتم استخدام هذا البروتوكول؟ عندما يصل البريد الإلكتروني إلى SMTP Server's Netease ، يحتاج مستخدم [email protected] إلى تسجيل الدخول إلى الخادم لعرض البريد الإلكتروني. في هذا الوقت ، يتم استخدام الاتفاقية: سيوفر مزود خدمة البريد الإلكتروني لكل مستخدم مساحة تخزين بريد إلكتروني خاصة. بعد أن يتلقى خادم SMTP البريد الإلكتروني ، يحفظ البريد الإلكتروني إلى مساحة تخزين البريد الإلكتروني المقابلة للمستخدم. إذا أراد المستخدم قراءة البريد الإلكتروني ، فيجب إكماله من خلال خادم البريد الإلكتروني الخاص بمزود خدمة البريد الإلكتروني. أخيرًا ، ربما يكون بعض الأصدقاء قد سمعوا عن بروتوكول IMAP ، وهو امتداد لبروتوكول POP3 ، مع وظائف أقوى ووظائف مماثلة. لن أكررها هنا.
التحضير لإرسال رسائل البريد الإلكتروني QQ
بادئ ذي بدء ، نحتاج إلى تسجيل الدخول إلى إصدار ويب QQ Email ونقر فوق الزر "الإعدادات" أعلاه:
ثم انقر فوق علامة تبويب الحسابات:
ابحث عن خيار تمكين pop3/smtp في علامة التبويب الحساب ، على النحو التالي:
انقر لتمكين الوظائف ذات الصلة. تتطلب عملية التنشيط التحقق من رقم الهاتف المحمول. فقط اتبع الخطوات ولا تشرح. بعد تمكينه بنجاح ، يمكنك الحصول على رمز تفويض ، وحفظ الرقم واستخدامه لفترة من الوقت.
ثم نحتاج إلى حزمة Javaxmail Jar. يمكن للأصدقاء تنزيله مباشرة في Maven Central Warehouse. لن أذهب إلى التفاصيل التالية هنا.
يرسل
بريد إلكتروني بسيط
إذا أرسلنا نصًا بسيطًا فقط ، فستكون طريقة الإرسال بسيطة نسبيًا. يمكن تقسيم العملية برمتها إلى ثلاث خطوات على النحو التالي:
الخطوة 1: بناء البيئة الأساسية لخادم بريد SMTP
خصائص الخصائص = خصائص جديدة () ؛ خصائص. "true") ؛ properties.setProperty ("mail.smtp.socketfactory.class" ، "javax.net.ssl.sslsocketfactory") ؛ properties.setProperty ("mail.smtp.port" ، "465") session.setDebug (true) ؛الخطوة 2: بناء البريد الإلكتروني
mimemessage mimemessage = new mimemessage (جلسة) ؛ mimemessage.addrecipients (message.recipienttype.to ، "[email protected]") ؛ // اضبط المستلم mimemessage.addrecipient mimemessage.setfrom ("[email protected]") ؛ // البريد الإلكتروني مرسل mimemessage.setsubject ("اختبار البريد الإلكتروني موضوع")
الخطوة 3: إرسال البريد الإلكتروني
Transport Transport = Session.getTransport () ؛ Transport.connect ("smtp.qq.com" ، "[email protected]" ، "رمز التفويض تم تطبيقه للتو") ؛ Transport.SendMessage (mimemessage ، mimemessage.getallrecipients () ؛ // إرسال بريد إلكتروني ، فإن المعلمة الثانية هي النقل المستلم () ؛رسائل البريد الإلكتروني المعقدة
عند إرسال رسائل بريد إلكتروني معقدة ، فإن الخطوتين الأولى والثالثة هي نفسها. الخطوة الثانية فقط هي أكثر إزعاجًا في بناء رسائل البريد الإلكتروني. بعد ذلك ، اسمحوا لي أن أظهر لك بريدًا إلكترونيًا يرسل صورة ونصًا + مرفقتين. لإرسال رسائل بريد إلكتروني معقدة ، يجب أولاً أن تكون على دراية بثلاثة مفاهيم ، على النحو التالي:
1.Mimemessage: هذه الفئة هي رسالة بريد إلكتروني يمكنها فهم أنواع ورؤوس MIME.
2.MimeMultipart: يحدد هذه الفئة طرقًا لإضافة وحذف والحصول على أجزاء مختلفة من البريد الإلكتروني
3.MimeBodyPart: يمثل هذا الكائن جزءًا من محتويات كائن mimemessage. يعتبر كل mimebodypart يحتوي على جزأين: نوع MIME والمحتوى الذي يطابق هذا النوع
عملية توليد البريد الإلكتروني الكاملة هي كما يلي (انظر أعلاه للخطوات الأولى والثالثة):
mimemessage mimemessage = new mimemessage (جلسة) ؛ mimemessage.addrecipients (message.recipienttype.to ، "[email protected]") ؛ // اضبط المستلم mimemessage.addrecipient mimemessage.setfrom ("[email protected]") ؛ // البريد الإلكتروني مرسل mimemessage.setsubject ("Test Email Topic") ؛ // البريد الإلكتروني mimemultipart mixed = new mimemultipart ("mimedbound mimeed mimeed mimed = mimedpart mimeed mimedp mimeed mimedp mimeed mimedp mimeBodyPart () ؛ // إنشاء مرفق 1 mimebodypart attach2 = new mimebodypart () ؛ // إنشاء مرفق 2mimebodypart content = new mimebodypart () ؛ // إنشاء جسم البريد الإلكتروني milected.addbodypart (excense1) ؛ mileced.addbodypart (content) ؛ // إضافة الجسم إلى رسالة الرسائل filedatasource fds1 = new FileDataSource (ملف جديد ("c: //users//sang//desktop//1.png") include1.setdatahandler (DH1) ؛ // قم بتعيين مصدر بيانات المرفق 1 المرفق 1.SetFilename ("1.png") ؛ // تعيين اسم ملف المرفق 1 // تشبه تشغيل المرفق 2 المرفق 1 ، لذلك لن نعلق كل واحد هنا. FileDataSource fds2 = new FileDataSource (ملف جديد ("c: // user // sang // desktop // blog note.xlsx") ؛ datahandler dh2 = new datahandler (fds2) ؛ include.setdatahandler (dh2) ؛ الاسم ، إذا كان هناك صيني ، يمكنك تشفيره من خلال طريقة encodetext في فئة mimeutility لتجنب مشوهة mimemultipart bodymimultipart = new mimemultipart ("ذات الصلة") mimebodypart () ؛ // html جزء من bodypart.setContent ("<h1> مرحبًا بالجميع ، هذا اختبار بريد إلكتروني اختبار <img src = 'cid: 2.png' // </h1> ،" text/html ؛ charset = utf-8 ") New Datahandler (New FileDataSource ("C: //users//sang//desktop//2.png") ؛ picpart.setdatahandler (Datahandler) ؛ picpart.setContentId ("2.png") ؛ // أضف HTML وأجزاء الصورة من الجسم إلى bodymimultipart.addbodypart (bodypart) ؛ bodymimemultipart.addbodypart (picpart) ؛ mimemessage.savechanges () ؛
حسنًا ، من السهل إرسال رسائل البريد الإلكتروني QQ بواسطة Java Mail. أما بالنسبة لأشياء أخرى مثل 163 ، Sina ، وما إلى ذلك ، فإن أسلوب الكتابة مشابه ، ولن أوضحه هنا.
لخص
ما سبق هو رمز التنفيذ لوظيفة البريد الإلكتروني QQ في Springboot المقدمة لك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!