Artikel ini dimulai dengan masalah yang dihadapi dalam verifikasi pendaftaran kotak surat melalui Javamailsender, dan menganalisis prinsip -prinsip dan solusi untuk masalah secara rinci.
Menggunakan verifikasi pendaftaran email, kita perlu mengklarifikasi ide desain:
Pertanyaan 1: Setelah mengirimkan informasi pendaftaran, Anda perlu mengirim email ke nomor email yang Anda isi.
Pertanyaan 2: Bagaimana pengguna aktif ketika email tiba, apakah akan meminta get atau mendapatkan kode verifikasi (artikel ini menggunakan antarmuka GET untuk mengaktifkannya)
Pertanyaan 3: Bagaimana cara mengatur waktu yang valid untuk aktivasi email
Melalui tiga pertanyaan di atas, blogger akan membantu semua orang menguasai verifikasi kotak surat javamailsender
Pertanyaan 1
Saya pertama -tama perlu menyelesaikan cara mengirim email ke nomor kotak surat yang ditentukan
Tambahkan dependensi berikut ke pom:
<!-Email-> <dependency> <GroupId> javax.mail </groupid> <ArTifactId> mail </artifactId> <version> 1.4.7 </version> </gandendency>
Itu benar, kami menggunakan Javax untuk memperluas dependensi surat dalam paket, jadi jangan pilih impor yang salah dalam kode.
Kode ini sederhana dan mudah untuk dipahami semua orang
Dari atas ke bawah, mari kita lihat antarmuka terlebih dahulu:
@RequestMapping (value = "myAJaxRegister") @ResponseBody public String sendeMail (@RequestParam String email) {user user = baru pengguna ("luxiaotao", "0331"); utas baru () {@Override public void run () {emailService.senemail (pengguna, email); } }.awal(); Kembalikan "Email telah dikirim ke alamat email Anda, silakan aktifkan"; }Karena ini adalah tes, blogger telah membuat data palsu dari pengguna, dan mendapatkan email adalah kuncinya
Buat utas baru untuk menjalankan metode pengiriman surat untuk meningkatkan pengalaman pengguna
Bayangkan jika tidak sinkron, pengguna perlu menunggu email yang akan dikirim sebelum halaman akan dialihkan.
Mari kita lihat metode lapisan bisnis untuk mengirim email:
@Override public boolean seneMail (pengguna pengguna, email string) {coba {javamailsenderImpl mailsender = new javamailsenderImpl (); mailsender.sethost ("smtp.163.com"); mailsender.setusername ("Isi akun 163 kotak surat Anda"); mailsender.setPassword ("163 Kata sandi kotak surat"); Mimemessage mailmessage = mailsender.createMimeStage (); MimemessageHelper helper = mimemessageHelper baru (mailmessage, true, "gbk"); helper.setfrom (mailsender.getusername ()); helper.setto (email); helper.setsubject ("judul"); helper.setText ("Mail Sage berhasil"); String emailToken = geteMailToken (pengguna); String url = "<a href = 'http: // localhost: 8088/activateMail? EmailToken ="+emailToken+"> Activate"+"</a> </br> <h1> Jika hyperconnection di atas tidak dapat diakses, silakan salin URL berikut ke alamat browser berikut bar </h1> <h2> http: // localhost: 8088/activateMail? emailToken = "+emailToken+" </h2> "; helper.setext (url, true); mailsender.send (mailmessage); Kembali Benar; } catch (Exception e) {E.PrintStackTrace (); mengembalikan false; }} Metode ini menjelaskan:
1. Jika kotak surat server Anda adalah kotak surat QQ, ubah ke: mailSender.setHost("smtp.qq.com");
2.MimeSageHelper adalah kelas ekstensi untuk surat di bawah Javax. Jika Anda menggunakan surat yang dienkapsulasi Spring, Anda tidak membutuhkannya. Jika Anda menggunakan Spring Mail, metode set akan berbeda
3. Parameter kedua True dari helper.setText(url,true); berarti string saat ini dalam format HTML, sehingga tag akan berfungsi
4. getEmailToken(user); Metode akan dibahas di bawah ini
Sejauh ini, email dapat dikirim secara normal. Demi kenyamanan, saya memberikan kode halaman HTML:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <itement> title </iteme> </head> <body> <form method = "dapatkan" action = "/myajaxregister"> Email <input type = "teks" nama = "email"> </br> <input = "kirim =" kirim "nama" name = "email"> </br> <input = " value = "register"> </form> </body> </html>
Pertanyaan 2
Bagaimana cara mengaktifkan surat menggunakan API yang diminta?
Dalam pertanyaan 1, getEmailToken(user) di bawah senEmail() digunakan untuk mengaktifkan
Dapat dilihat bahwa konten email yang dikirim oleh senEmail() adalah hyperlink, yang digunakan untuk memulai antarmuka aktivasi kami.
Tapi apa hubungannya ini dengan getEmailToken(user)
Seperti yang dapat dilihat dari makna literal, kami akan menggunakan token di sini
Pertama lihat pengontrol aktivasi
@RequestMapping (value = "ActivateMail") Public String ActivateMail (@RequestParam String EmailToken) {if (emailService.balanCetoken (emailToken)) {return "Success"; } return "error1"; } Melalui hyperlink, kami mengirim parameter email ke server
Setelah server mendapatkan token ini, itu akan dibandingkan dengan token lokal. Jika hal yang sama benar, itu akan melewati verifikasi.
Di sini saya menggunakan redis untuk cache, dan menggunakan token sebagai kunci dan informasi pengguna (pengguna) sebagai nilai
Mari kita lihat dua metode:
@Override public String geteMailToken (pengguna pengguna) {string token = uuid.randomuuid (). ToString (); Nilai string = user.toString (); redistemplate.opsforvalue (). Set (token, nilai); Token kembali; } @Override public boolean balancetoken (string emailToken) {if (redistemplate.opsforvalue (). Get (emailToken)! = Null) {return true; } return false; } Metode pertama menggunakan Redis untuk mengonversi informasi pengguna menjadi string dan menyimpannya di memori
Metode kedua adalah mengaktifkan verifikasi, dan menggunakan kunci (token) untuk memeriksa apakah ada nilai di Redis, dan berhasil mengembalikan true.
Pertanyaan 3
Jadi bagaimana jika Anda mengatur periode validitas verifikasi email?
Karena itu, siswa yang sering menggunakan Redis mungkin telah menebaknya
Cukup tambahkan baris kode ke getEmailToken() :
@Override public String geteMailToken (pengguna pengguna) {string token = uuid.randomuuid (). ToString (); Nilai string = user.toString (); redistemplate.opsforvalue (). Set (token, nilai); redistemplate.Expire (token, 60, timeunit.seconds); Token kembali; } Ya, gunakan redisTemplate.expire() untuk mengatur waktu kedaluwarsa dari pasangan nilai kunci saat ini
Akhirnya, mari kita lihat email aktivasi:
Di atas adalah seluruh konten implementasi verifikasi pendaftaran email Javamailsender yang diperkenalkan kali ini. Jika Anda masih belum mengerti, Anda dapat mendiskusikannya di area pesan di bawah ini.