이 기사는 Javamailsender를 통한 사서함 등록 검증에서 발생하는 문제로 시작하여 문제에 대한 원칙과 솔루션을 자세히 분석합니다.
이메일 등록 확인을 사용하여 설계 아이디어를 명확히해야합니다.
질문 1 : 등록 정보를 제출 한 후에 작성한 이메일 번호로 이메일을 보내야합니다.
질문 2 : 이메일이 도착했을 때 사용자가 어떻게 활성화됩니까?
질문 3 : 이메일 활성화를위한 유효한 시간을 설정하는 방법
위의 세 가지 질문을 통해 블로거는 모든 사람이 Javamailsender Mailbox Verification을 마스터하는 데 도움이됩니다.
질문 1
먼저 지정된 우편함 번호로 이메일을 보내는 방법을 해결해야합니다.
POM에 다음 종속성을 추가하십시오.
<!!
맞습니다. 우리는 Javax를 사용하여 패키지의 메일 종속성을 확장하므로 코드에서 잘못된 가져 오기를 선택하지 마십시오.
이 코드는 모든 사람이 이해하기 쉽고 쉽습니다.
위에서 아래로 먼저 인터페이스를 살펴 보겠습니다.
@RequestMapping (value = "myajaxregister") @ResponseBody public String SendEmail (@requestParam String email) {user user = new user ( "luxiaotao", "0331"); new Thread () {@override public void run () {emailservice.senemail (user, email); } }.시작(); 반품 "이메일이 이메일 주소로 전송되었습니다. 활성화하십시오"; }테스트이기 때문에 블로거는 사용자로부터 가짜 데이터를 만들었고 이메일을 얻는 것이 중요합니다.
사용자의 경험을 향상시키기 위해 메일 전송 방법을 실행하기 위해 새 스레드를 만듭니다.
비동기식이 아닌 경우 사용자는 페이지를 리디렉션하기 전에 이메일이 전송 될 때까지 기다려야한다고 상상해보십시오.
이메일을 보내는 비즈니스 계층 방법을 살펴 보겠습니다.
@override public boolean senemail (사용자 사용자, 문자열 이메일) {try {javamailsenderimpl mailsender = new javamailsenderimpl (); MailSender.sethost ( "smtp.163.com"); MailSender.SetUserName ( "163 사서함 계정 작성"); MailSender.SetPassword ( "163 Mailbox Password"); mimemessage mailmessage = mailsender.createmimemessage (); MimeSageHelper 도우미 = New MimemessageHelper (MailMessage, True, "GBK"); helper.setfrom (mailsender.getusername ()); Helper.setto (이메일); helper.setsubject ( "title"); Helper.settext ( "성공적인 메일 보내기"); String emailToken = GetEmailToken (사용자); 문자열 URL = "<a href = 'http : // localhost : 8088/activateMail? emailToken ="+emailToken+"'> 활성화"+"</a> </br> <h1> 위의 과장에 액세스 할 수없는 경우 브라우저 주소에 다음 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. MimemesageHelper는 Javax에 따른 메일의 확장 클래스입니다. 스프링 캡슐화 메일을 사용하는 경우 필요하지 않습니다. Spring Mail을 사용하면 설정 방법이 다릅니다.
3. helper.setText(url,true); 현재 문자열이 HTML 형식이므로 태그가 작동합니다.
4. getEmailToken(user); 방법은 아래에서 설명합니다
지금까지 이메일은 정상적으로 보낼 수 있습니다. 편의를 위해 HTML 페이지 코드를 제공합니다.
<! docType html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title </title> </head> <body> <form 메소드 = "get"action = "/myajaxregister"> 이메일 <입력 유형 = "text"name = "이메일"> <입력 유형 = "제출" 값 = "레지스터"> </form> </body> </html>
질문 2
GET 요청 된 API를 사용하여 메일을 활성화하는 방법은 무엇입니까?
질문 1에서, senEmail() 의 getEmailToken(user) 활성화하는 데 사용됩니다.
senEmail() 에서 보낸 이메일 컨텐츠는 Hyperlink이며 활성화 인터페이스를 시작하는 데 사용됩니다.
그러나 이것이 getEmailToken(user) 과 무엇이 관련되어 있습니까?
문자 그대로의 의미에서 볼 수 있듯이, 우리는 여기에서 토큰을 사용할 것입니다.
먼저 활성화 컨트롤러를보십시오
@requestmapping (value = "activeAtemail") public String activeAmail (@requestparam String emailToken) {if (emailService.balanCetoken (emailToken)) {return "success"; } return "error1"; } 하이퍼 링크를 통해 서버에 이메일 테이크 매개 변수를 보냅니다.
서버 가이 토큰을 얻은 후에는 로컬 토큰과 비교됩니다. 마찬가지라면 확인이 동일하면 확인이 전달됩니다.
여기서는 Redis를 사용하여 캐시를 사용하고 Token을 키 및 사용자 정보 (사용자)로 값으로 사용합니다.
두 가지 방법을 보자.
@override public String getEmailToken (사용자 사용자) {String token = uuid.randomUuid (). toString (); 문자열 값 = user.toString (); redistemplate.opsforValue (). set (토큰, 값); 복귀 토큰; } @override public boolean balancetoken (string emailtoken) {if (redistemplate.opsforValue (). get (emailToken)! = null) {return true; } false를 반환합니다. } 첫 번째 방법은 redis를 사용하여 사용자 정보를 문자열로 변환하고 메모리에 저장합니다.
두 번째 방법은 검증을 활성화하고 키 (토큰)를 사용하여 redis에 값이 있는지 확인하고 성공적으로 True를 반환하는 것입니다.
질문 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의 이메일 등록 확인 구현의 전체 내용입니다. 여전히 이해하지 못하면 아래 메시지 영역에서 논의 할 수 있습니다.