Эта статья начинается с проблемы, возникающей в проверке регистрации почтовых ящиков через Javamailsender, и подробно анализирует принципы и решения проблем.
Используя проверку регистрации электронной почты, нам нужно прояснить идеи дизайна:
Вопрос 1: После отправки регистрационной информации вам необходимо отправить электронное письмо на номер электронной почты, в котором вы заполнили.
Вопрос 2: Как пользователь активируется, когда поступает электронная почта, запрашивать независимо от того, запрашивать ли код проверки или получить (в этой статье используется интерфейс GET для его активации)
Вопрос 3: Как установить достоверное время для активации электронной почты
Через три приведенных выше вопроса блогер поможет всем мастеру javamailsender pervication persification
Вопрос 1
Сначала мне нужно решить, как отправить электронные письма на указанный номер почтового ящика
Добавьте следующие зависимости в POM:
<!-Электронная почта-> <Depected> <groupid> javax.mail </GroupId> <artifactId> mail </artifactid> <sersive> 1.4.7 </version> </dependent>
Правильно, мы используем Javax для расширения почтовых зависимостей в пакете, поэтому не выбирайте неправильный импорт в коде.
Этот код прост и легко понять
Сначала давайте сначала посмотрим на интерфейс:
@Requestmapping (value = "myajaxregister") @Responsebody public String sendEmail (@RequestParam string email) {user user = новый пользователь ("LuxiaOtao", "0331"); new Thread () {@Override public void run () {emailservice.senemail (пользователь, электронная почта); } }.начинать(); вернуть "электронное письмо было отправлено на ваш адрес электронной почты, пожалуйста, активируйте"; }Поскольку это тест, блоггер создал поддельные данные от пользователей, а получение электронной почты - ключ
Создайте новый поток для выполнения метода отправки почты для улучшения опыта пользователя
Представьте себе, если это не асинхронно, пользователю нужно ждать отправки электронной почты до перенаправления страницы.
Давайте посмотрим на метод отправки электронных писем:
@Override public boolean senemail (пользователь пользователя, строка Email) {try {javamailsenderimpl mailsender = new javamailsenderimpl (); mailsender.sethost ("smtp.163.com"); mailsender.setusername («Заполните свою учетную запись 163 почтового ящика»); mailsender.setpassword ("163 пароль почтового ящика"); Mimemessage mailmessage = mailsender.creatememessage (); MimemessageHelper Helper = new MimemessageHelper (MailMessage, True, "GBK"); helper.setfrom (mailsender.getusername ()); helper.setto (электронная почта); helper.setsubject ("title"); helper.settext ("почта успешно отправлена"); String emailToken = getEmailToken (пользователь); String url = "<a href = 'http: // localhost: 8088/activatemail? bar </h1> <h2> http: // localhost: 8088/activatemail? emailtoken = "+emailttoken+" </h2> "; helper.settext (url, true); mailsender.send (mailmessage); вернуть истину; } catch (Exception e) {e.printstackTrace (); вернуть ложь; }} Этот метод объясняет:
1. Если ваш почтовый ящик для вашего сервера является почтовым ящиком QQ, измените его на: mailSender.setHost("smtp.qq.com");
2. MimemessageHelper - это расширение класса для почты под Javax. Если вы используете Spring Incapsulate Mail, она вам не нужна. Если вы используете Spring Mail, метод SET будет другим
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 method = "get action ="/myajaxregister "> электронная почта <input type =" text "name =" Электронная почта "> </br> <input =" отправить " value = "Register"> </form> </body> </html>
Вопрос 2
Как активировать почту, используя API GET -запрошенной?
В вопросе 1, getEmailToken(user) под senEmail() используется для активации
Можно видеть, что содержание электронной почты, отправленное senEmail() является гиперссылкой, которая используется для запуска нашего интерфейса активации.
Но какое это имеет отношение к getEmailToken(user)
Как видно из буквального значения, мы будем использовать знак здесь
Сначала посмотрите на контроллер активации
@Requestmapping (value = "activateMail") public Stress ActivateMail (@requestparam string emailtoken) {if (emailservice.balancetoken (emelcomttoken)) {return "успех"; } вернуть "error1"; } Через гиперссылку мы отправляем параметр электронной почты на сервер
После того, как сервер получит этот токен, он будет сравниваться с локальным токеном. Если то же самое верно, это пройдет проверку.
Здесь я использую Redis для кэша и использую токен в качестве ключа и пользовательской информации (пользователя) в качестве значения
Давайте посмотрим на два метода:
@Override public String getEmailToken (пользователь пользователя) {string token = uuid.randomuuid (). ToString (); String value = user.toString (); redistemplate.opsforvalue (). set (token, value); вернуть токен; } @Override public boolean balancetoken (string emailtoken) {if (redistemplate.opforvalue (). Get (emailtoken)! = Null) {return true; } вернуть false; } Первый метод использует Redis для преобразования информации пользователя в строку и сохранить ее в памяти
Второй метод состоит в том, чтобы активировать проверку и использовать ключ (токен), чтобы проверить, есть ли значение в Redis, и успешно вернуть True.
Вопрос 3
Так что, если вы установите период достоверности проверки электронной почты?
Сказав это, студенты, которые часто используют Redis, вероятно, догадались
Просто добавьте строку кода, чтобы getEmailToken() :
@Override public String getEmailToken (пользователь пользователя) {string token = uuid.randomuuid (). ToString (); String value = user.toString (); redistemplate.opsforvalue (). set (token, value); redistemplate.expire (токен, 60, TimeUnit.seconds); вернуть токен; } Да, используйте redisTemplate.expire() чтобы установить время истечения срока текущей пары клавишных значений
Наконец, давайте посмотрим на электронное письмо с активацией:
Выше приведено все содержание реализации проверки регистрации регистрации электронной почты Javamailsender, представленной на этот раз. Если вы все еще не понимаете, вы можете обсудить это в области сообщений ниже.