مقدمة
أعتقد أن الجميع يجب أن يعلم أن واجهة برمجة تطبيقات Open العامة التي يتصل بنا ستحصل على قيمة إرجاع أو رمز الحالة لإخبارنا بما إذا كان التنفيذ ناجحًا أم لا. ومع ذلك ، لا توفر Javamail قيمة الإرجاع هذه.
لذلك ، عند الاتصال بـ Javamail لإرسال رسائل البريد الإلكتروني ، لا يمكننا إلا استخدام استثناء الصيد لتحديد ما إذا تم إرسال البريد الإلكتروني بنجاح. نعتقد أنه طالما لم يحدث استثناء ، سيتم إرسال البريد الإلكتروني بنجاح. ثم دعونا نحلل لماذا لا يوفر Javamail قيمة إرجاع ، وما إذا كانت حالة إرسال البريد الإلكتروني الناجحة موثوقة من خلال الاستثناءات.
Javamail إرسال مبدأ البريد
عند إرسال البريد باستخدام Javamail ، يجب أن نقدم جلسة بريد. عملية إنشاء جلسة بريد كما يلي:
خصائص الدعائم = خصائص جديدة () ؛ // IP ومنفذ الخادم الذي يرسل props.put mail ("mail.smtp.host" ، mail_smtp_host) ؛ props.put ("mail.smtp.port" ، mail_smtp_port) ؛ // ما إذا كانت المصادقة مطلوبة props.put ("mail.smtp.auth" ، "true") ؛ props.put ("mail.smtp.socketfactory.class" ، "javax.net.ssl.sslsocketfactory") ؛ جلسة Session = Session.getDefaultInstance (الدعائم ، المصادقة الجديدة () {محمية passwordauthentication getPasswordAuthentication () {// تسجيل الدخول إلى اسم المستخدم وكلمة مرور البريد الإلكتروني إرسال خادم إرسال كلمة مرور جديدة (mail_sender_mail ، mail_sender_pass) ؛}}) ؛تحليل الكود.
قبل إنشاء الجلسة ، نقوم أولاً بإنشاء خصائص. تعين هذه الخصائص المعلمات التالية: mail.smtp.host ، mail.smtp.port ، mail.smtp.auth و mail.smtp.socketFactory.class . عند إنشاء جلسة ، يجب عليك أيضًا تمرير اسم المستخدم وكلمة المرور لإرسال البريد الإلكتروني.
رمز البريد الإلكتروني إرسال كما يلي:
// 5 خطوات لإرسال رسائل البريد الإلكتروني باستخدام Javamail // 1. إنشاء جلسة جلسة جلسة = session.getInstance (prop) ؛ // تمكين وضع تصحيح الجلسة ، بحيث يمكنك عرض حالة تشغيل البريد الإلكتروني المرسلة بواسطة Session.setDebug (TRUE) ؛ // 2. احصل على كائن النقل من خلال نقل الجلسة ts = session.getTransport () ؛ // 3. استخدم اسم المستخدم وكلمة المرور للبريد الإلكتروني للاتصال بخادم البريد. عند إرسال البريد الإلكتروني ، يحتاج المرسل إلى إرسال اسم المستخدم وكلمة المرور للبريد الإلكتروني إلى خادم SMTP. يمكن التحقق من اسم المستخدم وكلمة المرور قبل إرسال البريد الإلكتروني إلى المستلم بشكل طبيعي. Ts.Connect ("smtp.sohu.com" ، "GACL" ، "Email Password") ؛ // 4. قم بإنشاء رسالة رسالة = CreateSimplemail (جلسة) ؛ // 5. إرسال mail ts.sendMessage (message ، message.getAllRecipients ()) ؛ // أغلق الاتصال ts.close () ؛ملخص لعملية إرسال رسائل البريد الإلكتروني لديه الخطوات التالية:
1. إنشاء كائن جلسة يحتوي على رابط شبكة لخادم البريد
2. قم بإنشاء كائن رسالة يمثل محتوى البريد الإلكتروني
3. إنشاء كائن نقل
4. رابط للخادم
5. إرسال الرسالة
6. أغلق الرابط
نظرًا لأن النقل هو مجرد فئة مجردة ، فإن طريقة ts.sendMessage هي في الواقع طريقة sendMessage لفئة تطبيق SMTPTransport SMTPTransport .
تعتمد طريقة sendMessage لـ SMTPTransport على بروتوكول SMTP لإرسال رسائل البريد الإلكتروني.
لذلك ، عندما تستخدم Javamail خدمة SMTP لإرسال رسائل البريد الإلكتروني ، عندما ترسل البريد الإلكتروني إلى خادم SMTP ، يمكنك فقط الحصول على الحالة التي تم إرسالها إلى قائمة انتظار SMTP ، ولكن لا يمكنك الحصول عليها سواء كان خادم البريد يمكنه إرساله بنجاح. وهذا يعني ، لا يمكنك ضمان إرسال البريد الإلكتروني بنجاح. هذا يعتمد على نقل محتوى بروتوكول SMTP.
ومع ذلك ، إذا فشل بروتوكول SMTP ، فسيتم الإبلاغ عن خطأ. خدمة نقل البيانات الموثوقة من SMTP التي توفرها TCP تنقل رسائل البريد من خادم بريد المرسل إلى خادم بريد المستلم.
لذلك يمكننا أن نعتقد أنه عندما ندعو Javamail لإرسال رسائل بريد إلكتروني ، إذا لم يبلغ البرنامج عن خطأ ، فهذا يعني أن البريد الإلكتروني يتم إرساله بنجاح.
آلية العمل SMTP
يحتوي SMTP عادةً على وضعين يعملان: إرسال SMTP واستلام SMTP.
طريقة العمل المحددة هي: بعد تلقي طلب البريد الإلكتروني للمستخدم ، فإنه يحدد ما إذا كان البريد الإلكتروني هو البريد الإلكتروني المحلي. إذا تم إرساله مباشرة إلى البريد الإلكتروني للمستخدم ، وإلا ، فقم بالاستعلام عن سجل MX لخادم البريد عن بُعد من DNS ، وقم بإنشاء قناة نقل ثنائية الاتجاه مع SMTP المستقبلة عن بُعد. بعد ذلك ، يتم إرسال أمر SMTP بواسطة SMTP المرسل ، الذي يتلقاه SMTP المستلم ، ويتم إرسال الاستجابة في الاتجاه المعاكس. بمجرد إنشاء قناة الإرسال ، يرسل مرسل SMTP أمر بريد للإشارة إلى مرسل البريد. إذا تمكن مستلم SMTP من تلقي البريد ، فسيتم إرجاع إجابة موافق. ثم يصدر مرسل SMTP أمر RCPT لتأكيد ما إذا كان قد تم تلقي البريد الإلكتروني. إذا استقبلها مستلم SMTP ، فإنه يعيد إجابة موافق ؛ إذا كان لا يمكن استلامه ، فإنه يرسل استجابة للرفض (ولكن لا يتم إحباط عملية البريد الإلكتروني بأكملها) ، وسيكرر كلا الطرفين ذلك عدة مرات. عندما يتلقى المستلم جميع رسائل البريد الإلكتروني ، سيتم استلام تسلسل خاص. إذا نجح المستلم في معالجة رسائل البريد الإلكتروني ، فسوف يعيد رد موافق.
عملية عمل SMTP
بروتوكول نقل البريد البسيط (SMTP) هو بروتوكول نقل البريد الإلكتروني المستند إلى النص الذي يتم استخدامه على الإنترنت لتبادل البريد بين خوادم البريد. SMTP هي خدمة على مستوى التطبيق يمكن تكييفها مع أنظمة الشبكة المختلفة.
تعتمد أوامر واستجابات SMTP على النص ، مع وحدات سلوك الأوامر ، والخط الجديد هو CR/LF. تحتوي معلومات الاستجابة عمومًا على سطر واحد فقط ، بدءًا من رمز مكون من 3 أرقام ، ويمكن إرفاق وصف نص قصير جدًا لاحقًا.
يحتاج SMTP إلى المرور عبر ثلاث مراحل: إنشاء اتصال ، وتقديم البريد وإطلاق اتصال. خاصة:
(1) إنشاء اتصال TCP.
(2) يرسل العميل أمر HELO إلى الخادم لتحديد هوية المرسل الخاصة ، ثم يرسل العميل أمر بريد.
(3) يستجيب الخادم بـ OK ، مما يشير إلى أنه جاهز لتلقيه.
(4) يرسل العميل الأمر RCPT.
(5) يشير جانب الخادم إلى ما إذا كان على استعداد لتلقي رسائل البريد الإلكتروني للمستلم.
(6) نهاية التفاوض ، وإرسال البريد الإلكتروني ، واستخدم بيانات الأوامر لإرسال محتوى الإدخال.
(7) إنهاء هذا الإرسال والخروج باستخدام أمر QUIT.
يقوم SMTP Server بتوجيه رسائل البريد الإلكتروني بناءً على Exchange (MX) في DNS. عند إرسال رسائل البريد الإلكتروني ، يوجد خادم البريد الإلكتروني وفقًا لعنوان اللاحقة للمستلم. يكمل SMTP وظائف التحرير وجمع وقراءة رسائل البريد الإلكتروني من خلال وكيل المستخدم (UA) ؛ وينقل رسائل البريد الإلكتروني إلى الوجهة من خلال وكيل نقل البريد (MTA).
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة لدراستك أو عملك. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.