Este artigo começa com o problema encontrado na verificação de registro da caixa de correio através do JavamailSender e analisa os princípios e soluções para os problemas em detalhes.
Usando a verificação do registro de e -mail, precisamos esclarecer as idéias de design:
Pergunta 1: Depois de enviar as informações de registro, você precisa enviar um email para o número de e -mail que preencher.
Pergunta 2: Como o usuário é ativado quando o email chega, seja para solicitar ou obter o código de verificação (este artigo usa a interface GET para ativá -lo)
Pergunta 3: Como definir o tempo válido para a ativação por e -mail
Através das três perguntas acima, o blogueiro ajudará todos a Master Master Javamailsender Caixa de correio Verificação
Pergunta 1
Primeiro preciso resolver como enviar e -mails para o número da caixa de correio especificada
Adicione as seguintes dependências ao POM:
<!-Email-> <Depencency> <GroupId> javax.mail </frupid> <TRATIFACTID> Mail </ArtifactId> <versão> 1.4.7 </sipers> </dependency>
É isso mesmo, usamos o Javax para expandir as dependências de email no pacote; portanto, não escolha a importação errada no código.
Este código é simples e fácil para todos entenderem
De cima para baixo, vejamos primeiro a interface:
@RequestMapping (value = "myajaxregister") @Responsebody public String sendEmail (@RequestParam String email) {Usuário user = new User ("Luxiaotao", "0331"); novo thread () {@Override public void run () {emailservice.senemail (usuário, email); } }.começar(); retornar "O email foi enviado para o seu endereço de e -mail, ativar"; }Por ser um teste, o blogueiro criou dados falsos dos usuários, e receber email é a chave
Crie um novo thread para executar o método de envio de correio para melhorar a experiência do usuário
Imagine se não for assíncrono, o usuário precisa esperar que o email seja enviado antes que a página seja redirecionada.
Vamos dar uma olhada no método da camada de negócios de enviar e -mails:
@Override public boolean Senemeil (usuário do usuário, string email) {tente {javamailsenderImpl MailSender = new JavamailSenderImpl (); MailSender.Sethost ("smtp.163.com"); MailSender.SetUserName ("Preencha sua conta de caixa de correio 163"); MailSender.setPassword ("163 Caixa de correio senha"); Mimemessage MailMessage = MailSender.createmimemessage (); MimemessageHelper Helper = New MimemessageHelper (MailMessage, True, "GBK"); helper.setFrom (MailSender.getUserName ()); helper.setto (email); Helper.SetSubject ("Title"); helper.settext ("envio de correio com sucesso"); String emailToken = getEmailToken (usuário); String url = "<a href = 'http: // localhost: 8088/ativatemail? EmailToken ="+EmailToken+"'> ativar"+"</a> </br> <H1> se a hiperconneção acima não puder ser acessada, copie o seguinte URL para o endereço do sobrantista bar </h1> <h2> http: // localhost: 8088/ativatemail? EmailToken = "+EmailToken+" </h2> "; Helper.Settext (URL, True); MailSender.send (MailMessage); retornar true; } catch (Exceção e) {e.printStackTrace (); retornar falso; }} Este método explica:
1. Se a caixa de correio do servidor for uma caixa de correio QQ, modifique -a para: mailSender.setHost("smtp.qq.com");
2.MimemessageHelper é uma classe de extensão para correio sob Javax. Se você usar o email encapsulado da mola, não precisará dele. Se você usar o Spring Mail, o método definido será diferente
3. O segundo parâmetro true do helper.setText(url,true); significa que a string atual está no formato HTML, para que as tags funcionem
4. getEmailToken(user); O método será discutido abaixo
Até agora, o email pode ser enviado normalmente. Por uma questão de conveniência, dou o código da página HTML:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title </title> </head> <body> <form method = "get" action = "/myajaxregister"> email <input type = "text" = "email"> </br> value = "Register"> </morm> </body> </html>
Pergunta 2
Como ativar o e -mail usando a API GET solicitada?
Na pergunta 1, getEmailToken(user) sob senEmail() é usado para ativar
Pode -se observar que o conteúdo de email enviado pelo senEmail() é um hiperlink, usado para iniciar nossa interface de ativação.
Mas o que isso tem a ver com getEmailToken(user)
Como pode ser visto a partir do significado literal, usaremos um token aqui
Primeiro olhe para o controlador de ativação
@RequestMapping (Value = "ActivatEmail") Public String ActiveMail (@RequestParam String emailToken) {if (emailservice.balanceteken (emailToken)) {return "success"; } retornar "error1"; } Através do hiperlink, enviamos um parâmetro emailToken para o servidor
Depois que o servidor recebe esse token, ele será comparado com o token local. Se o mesmo for verdadeiro, ele passará a verificação.
Aqui eu uso o Redis para armazenar em cache e uso o token como informações de chave e usuário (usuário) como valor
Vamos ver dois métodos:
@Override public String getemailToken (usuário do usuário) {String token = uuid.randomuuid (). Tostring (); String value = user.toString (); redistemplate.opsforValue (). set (token, valor); Token de retorno; } @Override public boolean balanceteken (string emailToken) {if (redistemplate.opsforValue (). Get (emailToken)! = Null) {return true; } retornar false; } O primeiro método usa o Redis para converter as informações do usuário em string e armazená -las na memória
O segundo método é ativar a verificação e usar a chave (token) para verificar se há um valor no redis e retornar com sucesso true.
Pergunta 3
E daí se você definir o período de validade da verificação de email?
Dito isto, estudantes que costumam usar Redis provavelmente adivinharam
Basta adicionar uma linha de código para getEmailToken() :
@Override public String getemailToken (usuário do usuário) {String token = uuid.randomuuid (). Tostring (); String value = user.toString (); redistemplate.opsforValue (). set (token, valor); redistemplate.expire (token, 60, timeunit.segunds); Token de retorno; } Sim, use redisTemplate.expire() para definir o tempo de expiração do par de valores-chave atual
Por fim, vamos dar uma olhada no email de ativação:
O exposto acima está o conteúdo inteiro da implementação da verificação de registro de email de Javamailsender, desta vez. Se você ainda não entende, pode discutir isso na área de mensagens abaixo.