تبدأ هذه المقالة بالمشكلة التي تمت مواجهتها في التحقق من تسجيل صندوق البريد من خلال Javamailsender ، وتحليل مبادئ وحلول المشكلات بالتفصيل.
باستخدام التحقق من تسجيل البريد الإلكتروني ، نحتاج إلى توضيح أفكار التصميم:
السؤال 1: بعد إرسال معلومات التسجيل ، تحتاج إلى إرسال بريد إلكتروني إلى رقم البريد الإلكتروني الذي قمت بملئه.
السؤال 2: كيف يتم تنشيط المستخدم عند وصول البريد الإلكتروني ، سواء لطلب الحصول على رمز التحقق (هذه المقالة تستخدم واجهة الحصول على تنشيطها)
السؤال 3: كيفية تعيين الوقت الصحيح لتفعيل البريد الإلكتروني
من خلال الأسئلة الثلاثة المذكورة أعلاه ، سيساعد المدون الجميع على إتقان التحقق من صندوق بريد Javamailsender
السؤال 1
أحتاج أولاً إلى حل كيفية إرسال رسائل بريد إلكتروني إلى رقم صندوق البريد المحدد
أضف التبعيات التالية إلى POM:
<!-البريد الإلكتروني-> <reperency> <roupiD> javax.mail </groupId> <intifactid> mail </stifactid> <sophy> 1.4.7 </version> </sependency>
هذا صحيح ، نستخدم Javax لتوسيع تبعيات البريد في الحزمة ، لذلك لا تختار الاستيراد الخاطئ في الكود.
هذا الرمز بسيط وسهل على الجميع فهمه
من أعلى إلى أسفل ، دعونا نلقي نظرة على الواجهة أولاً:
requestmapping (value = "myajaxRegister") @Responsebody public sendemail ( @requestparam string email) {user user = new user ("luxiaotao" ، "0331") ؛ new Thread () {Override public void run () {eilsservice.senemail (المستخدم ، البريد الإلكتروني) ؛ } }.يبدأ()؛ إرجاع "تم إرسال البريد الإلكتروني إلى عنوان بريدك الإلكتروني ، يرجى التنشيط" ؛ }نظرًا لأنه اختبار ، قام المدون بإنشاء بيانات مزيفة من المستخدمين ، والحصول على البريد الإلكتروني هو المفتاح
قم بإنشاء مؤشر ترابط جديد لتنفيذ طريقة إرسال البريد لتحسين تجربة المستخدم
تخيل لو لم يكن غير متزامن ، يحتاج المستخدم إلى انتظار إرسال البريد الإلكتروني قبل إعادة توجيه الصفحة.
دعونا نلقي نظرة على طريقة طبقة العمل لإرسال رسائل البريد الإلكتروني:
Override Senemail Boolean Senemail (مستخدم المستخدم ، سلسلة البريد الإلكتروني) {try {javamailsenderimpl mailsender = new javamailsenderimpl () ؛ mailsender.sethost ("smtp.163.com") ؛ mailsender.setuserName ("املأ حساب صندوق البريد 163") ؛ mailsender.setPassword ("163 Mailbox Password") ؛ mimemessage mailMessage = mailsender.createmimemessage () ؛ MimemessageHelper Helper = new MimemessageHelper (MailMessage ، true ، "GBK") ؛ Helper.setFrom (mailsender.getUserName ()) ؛ Helper.Setto (البريد الإلكتروني) ؛ Helper.SetSubject ("title") ؛ Helper.settext ("إرسال البريد بنجاح") ؛ سلسلة البريد الإلكتروني = getEmailToken (المستخدم) ؛ url url = "<a href = 'http: // localhost: 8088/activateMail؟ emailtoken ="+emailtoken+"'> تنشيط"+"</a> </br> <h1> إذا كان لا يمكن الوصول إلى HyperConnection أعلاه ، يرجى نسخ عنوان URL التالي إلى عنوان المتصفح إلى عنوان المتصفح Bar </h1> <h2> http: // localhost: 8088/activateMail؟ emailToken = "+EmailToken+" </h2> "؛ Helper.settext (url ، true) ؛ mailsender.send (MailMessage) ؛ العودة صحيح. } catch (استثناء e) {E.PrintStackTrace () ؛ العودة كاذبة }} تشرح هذه الطريقة:
1. إذا كان صندوق بريد الخادم الخاص بك عبارة عن صندوق بريد QQ ، فقم بتعديله إلى: mailSender.setHost("smtp.qq.com");
2.MimemessageHelper هو فئة تمديد للبريد تحت Javax. إذا كنت تستخدم البريد المغلف الربيع ، فلن تحتاج إليه. إذا كنت تستخدم بريد الربيع ، فستكون طريقة SET مختلفة
3. المعلمة الثانية صحيحة من helper.setText(url,true); يعني أن السلسلة الحالية بتنسيق HTML ، وبالتالي ستعمل العلامات
4. getEmailToken(user); ستتم مناقشة الطريقة أدناه
حتى الآن ، يمكن إرسال البريد الإلكتروني بشكل طبيعي. من أجل الراحة ، أعطي رمز صفحة HTML:
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> العنوان </title> </head> <body> <method method = "get" action = "/myajaxRegister"> البريد الإلكتروني <type type = "text" value = "register"> </form> </body> </html>
السؤال 2
كيفية تنشيط البريد باستخدام واجهة برمجة تطبيقات الحصول على الحصول على طلب؟
في السؤال 1 ، يتم استخدام getEmailToken(user) بموجب senEmail() للتنشيط
يمكن ملاحظة أن محتوى البريد الإلكتروني الذي تم إرساله بواسطة senEmail() هو ارتباط تشعبي ، والذي يستخدم لبدء واجهة التنشيط الخاصة بنا.
ولكن ما علاقة هذا مع getEmailToken(user)
كما يمكن رؤيته من المعنى الحرفي ، سنستخدم رمزًا هنا
انظر أولاً إلى وحدة تحكم التنشيط
requestmapping (value = "activateMail") السلسلة العامة activateMail (requestparam string emailToken) {if (EmailService.BalanCetoken (emailToken)) {return "success" ؛ } إرجاع "error1" ؛ } من خلال الارتباط التشعبي ، نرسل معلمة بريد إلكتروني إلى الخادم
بعد أن يحصل الخادم على هذا الرمز المميز ، سيتم مقارنة الرمز المميز المحلي. إذا كان الشيء نفسه صحيحًا ، فسوف يمر بالتحقق.
أنا هنا أستخدم Redis لتخزين ذاكرة التخزين المؤقت ، واستخدام الرمز المميز كمفتاح ومستخدم (مستخدم) كقيمة
دعونا نرى طريقتين:
Override public string getEmailToken (مستخدم المستخدم) {string token = uuid.randomuuid (). toString () ؛ قيمة السلسلة = user.toString () ؛ redistemplate.opsforvalue (). set (الرمز المميز ، القيمة) ؛ الرمز الرمز المميز. } Override Public Boolean Balancetoken (سلسلة البريد الإلكتروني) {if (redistemplate.opsforvalue (). get (emailToken)! = null) {return true ؛ } إرجاع خطأ ؛ } تستخدم الطريقة الأولى Redis لتحويل معلومات المستخدم إلى سلسلة وتخزينها في الذاكرة
الطريقة الثانية هي تنشيط التحقق ، واستخدام المفتاح (الرمز المميز) للتحقق مما إذا كانت هناك قيمة في redis ، والعودة بنجاح.
السؤال 3
فماذا لو قمت بتعيين فترة صحة التحقق من البريد الإلكتروني؟
بعد قولي هذا ، ربما يكون الطلاب الذين يستخدمون Redis قد خمنوا ذلك
فقط أضف سطر رمز إلى getEmailToken() :
Override public string getEmailToken (مستخدم المستخدم) {string token = uuid.randomuuid (). toString () ؛ قيمة السلسلة = user.toString () ؛ redistemplate.opsforvalue (). set (الرمز المميز ، القيمة) ؛ redistemplate.expire (Token ، 60 ، timeUnit.Seconds) ؛ الرمز الرمز المميز. } نعم ، استخدم redisTemplate.expire() لتعيين وقت انتهاء صلاحية الزوج الرئيسي الحالي
أخيرًا ، دعونا نلقي نظرة على البريد الإلكتروني للتنشيط:
ما سبق هو المحتوى الكامل لتنفيذ Javamailsender للتحقق من تسجيل البريد الإلكتروني الذي تم تقديمه هذه المرة. إذا كنت لا تزال لا تفهم ، يمكنك مناقشتها في منطقة الرسالة أدناه.