Как подтвердить почту на компьютере

Обновлено: 02.07.2024

Если у вас есть сайт или приложение, которые при регистрации нового пользователя просят подтвердить адрес электронной почты, у меня для вас есть совет и небольшая таблица с данными, которые помогут сделать процесс регистрации проще и удобнее для пользователя, а также позволят немного поднять процент конверсии посетителей в пользователи.

Что происходит после того, как пользователь указывает свой email в форме регистрации и отправляет форму на сервер?

Вариант первый, хороший: вы отправляете письмо и сразу же даете доступ к основным функциям вашего сайта или приложения, попутно напоминая пользователю о том, что неплохо бы перейти по ссылке из почты, чтобы убрать это назойливое напоминание и получить доступ ко всем функциям без исключения. Если адрес email не является для вас жизненно важным и вы можете дать частичный доступ без подтверждения почты, следует всегда делать именно так. Но эта схема применима не во всех случаях, поэтому…

Даже если слово «конверсия» для вас не имеет большого значения, такой хак имеет смысл внедрить просто потому, что это удобно и дарит пользователю приятное ощущение, что о нём заботятся.

Итак, как получить адрес и название почты, используя адрес email, который сообщил вам пользователь? Ловите табличку в формате CSV:

Разумеется, это далеко не все почтовые службы. Рекомендую заглянуть в список почтовых адресов ваших пользователей и добавить именно те сервисы, которыми они пользуются.

Создать таблицу и импортировать CSV-файл в MySQL можно следующей командой:

А дальше вы просто выделяете из адреса email почтовый домен, по нему находите в таблице название и адрес почтового сервиса, и показываете их пользователю.


Посмотреть этот простой хак в работе можно, например, на нашем сервисе для тестирования знаний программистов CrowdTest, для которого эта таблица и создавалась:

Подтвердить адрес электронной почты можно следующим образом:

Шаг 1

Если адресов электронной почты ранее не добавлялось, то окно подтверждения выглядит так:

phpEcolvd

Шаг 2

После нажмите "Добавить".

php9crx8e

Шаг 3

На указанный почтовый ящик придет письмо, содержащее код подтверждения и ссылку для подтверждения адреса.

Существует 2 способа подтвердить адрес почты:

Способ 1. Подтверждение адреса посредством ввода кода

Вам необходимо нажать на ссылку “Подтвердить” рядом с только что добавленным адресом в списке.

phpuamQ6X

Затем необходимо скопировать код из письма и вставить в текстовое поле, предназначенное для кода подтверждения.

После ввода необходимо нажать кнопку “Подтвердить”

Способ 2. Подтверждение адреса посредством ссылки

Просто перейдите по ссылке из письма.

При активации ссылки, система сообщит об успешном подтверждении адреса.

После подтверждения адреса посредством ссылки необходимо нажать в списке адресов на ссылку "Подтвердить".

phpuamQ6X

И далее в форме нажать кнопку “Готово”.

phpEf8mKE

Готово!

В случае если код введен верно, либо подтверждение по ссылке прошло успешно, адрес будет считаться подтвержденным и станет доступен доступен для выбора в качестве контактных данных.

Подтвержденный адрес отображается в списке адресов следующим образом:

phpdlfxir

Повторная отправка


phpZWdOtU

В случае повторной отправки, система предупредит, что запрашивать повторную отправку возможно не чаще, чем раз в 2 минуты.

Подтверждение email

Приветствую! Как и обещал, в этой статье мы добавим функционал подтверждения почты к форме регистрации, которую создали в статье " Создание формы регистрации и авторизации ". Архив с файлами сайта, которого создали в прошлой статье, Вы можете скачать по этой ссылке.

И так, погнали! Для начала, изменим немножко саму форму регистрации. Регистрируясь в различные сайты, Вы наверняка заметили что, у многих форм регистрации, присутствует поле для ввода повторного пароля. Данное поле добавляется для того чтобы подтвердить вводимый пароль. Так вот, у нашей формы регистрации мы также добавим это поле "повторите пароль".

Замечание! После скачивания архива, не забудьте поменять данные для подключения к базе данных и указать адрес Вашего сайта. Всё это нужно сделать в файле dbconnect.php.

Добавляем поле "повторите пароль" у формы регистрации

Для того чтобы добавить это поле, открываем файл form_register.php с формой регистрации, и сразу после ряда таблицы с полем для ввода пароля, добавляем поле "повторите пароль".

Сейчас, код JavaScript, у нас находится в файле header.php. Он действителен как для формы регистрации, так и для формы авторизации. Но, это не совсем правильно, так как это две разные формы. И при написании кода проверки для формы регистрации, возникнут проблемы с проверкой формы авторизации и наоборот.

Сохраняем изменения во всех затронутых файлах, возвращаемся к файлу form_register.php и приступаем к изменению JavaScript кода.

Значит, код, где проверяется email, мы не трогаем, изменения производим в коде, который находится ниже строчки с комментарием Проверка паролей. После строчки, где объявляем переменную password, объявляем ещё одну переменную confirm_password.

Теперь, производим изменения внутри функции, обработки события blur, для поля password. Заменяем старое содержимое на это:

Это были изменения для проверки поля, где вводится первый пароль. Здесь мы проверили такие случаи:

Длина паролей меньше шести символов и они не совпадают

Длина паролей меньше шести символов и они совпадают

Первый пароль имеет длину больше шести символов, но он не совпадает со вторым паролем

Но, также необходимо проверить совпадают ли пароли, после ввода второго пароля. То есть, когда поле для подтверждения пароля теряет фокус, мы должны проверить совпадает ли второй пароль с первым паролем.

В коде, который представлен выше, в указанное место " //(1) — Место для следующего куска кода " добавляем следующий кусок кода:

Проверка паролей на совпадение на стороне сервера

Выше, мы сделали проверку, совпадает ли пароль из поля password с паролем из поля confirm_password на языке JavaScript, используя библиотеку jQuery. Но мы должны сделать эту же проверку и на стороне сервера, вдруг пользователь отключил JavaScript в своём браузере.

В файле register.php после строчки, где обрезаем пробелы пароля в массиве POST.

Добавляем код, где проверяем, совпадают ли пароли.

Всё. С проверкой паролей на стороне сервера, мы также закончили. Идём дальше.

Подготовка базы данных

Замечание! Функционал подтверждения почты я делал на реальном сайте, так как на хостинге уже настроен функционал отправки почты и функция mail() работает без проблем. Если у Вас сайт на локальном хостинге, то, чтобы всё работало, нужно настроить сервер. Если вы пользуйтесь пакетом Denwer, то, отправленные письма будут сохраняться в папке tmp/!sendmail.

И ещё, у тега input добавляем атрибут maxlength со значением 100. С помощью этого атрибута мы устанавливаем максимальное количество символов для ввода.

В общем, код у нас получился таким:

Теперь переходим к разработке самого функционала подтверждения почты.

И начнём мы с базы данных. Как Вы помните из прошлой статьи, в базу данных, мы создали таблицу users, для хранения пользователей. У этой таблицы мы добавили поле email для сохранения почтового адреса пользователя и поле email_status, для указания, подтверждена ли почта у этого пользователя или нет. Если почта подтверждена, то поле email_status будет иметь значение 1, иначе, значение 0.

Поле для хранения статуса почты

Но этого не достаточно. Нам необходимо создать ещё одну таблицу, для временного хранения данных пользователей, которые ещё не подтвердили свою почту. Как создать таблицу я объяснил в статье Создание базы данных mysql в phpmyadmin. Эта таблица будет иметь такие поля: id, email, token и date_registrtion. И назовём мы эту таблицу confirm_users.

Поля таблицы confirm_users

Поле token предназначена для хранения уникального кода, для каждого пользователя. Этот код мы поставим в ссылке из письма, которую отправим пользователю на почту.

Когда пользователь нажмёт на ссылку из письма, он перейдёт обратно на наш сайт, где мы будем проверять, равен ли код из ссылки, с кодом который хранится в поле token. И если они равны, то мы удалим данные пользователя из таблицы confirm_users, а в таблицу users изменим значение поля email_status с 0 на 1.

С таблицами из базы данных мы разобрались, приступаем к программированию функционала подтверждения почты.

Отправление письма для подтверждения почты

Теперь же, в случаи успешной регистрации, то есть после успешного добавления пользователя в таблицу users, необходимо составить уникальный token, и вместе с адресом электронной почты и датой регистрации добавить пользователя в таблицу confirm_users.

Поэтому в нашем файле register.php, удаляем код, который находится в блоке else. Вот этот:

И вместо него пишем вот этот код:

Теперь, чтобы не было путаницы, необходимо удалить эти строчки, которые находятся сразу после блока else:

И вместо них записать вот эти:

То есть, теперь функция завершение запроса на добавления пользователя в таблицу users ( $result_query_insert->close() ) , находится внутри блока else, а не за этим блоком, как было раньше.

Дальше, обратите внимание, что в случае успешной отправки письма, в ссылку перенаправления пользователя обратно на страницу регистрации, мы добавили параметр hidden_form.

Теперь, для того чтобы спрятать эту форму регистрации, мы должны изменить условия её отображения. Открываем файл form_register.php и внутри этого условия:

Добавляем ещё одно условие, таким вот образом:

Переход по ссылки из письма для подтверждения почты

Замечание! Перед тем как продолжить, убедитесь в том, что при регистрации указали правильный почтовый ящик. Иначе Вы не получите письмо.

Настало время проверить, если письмо отправляется без проблем. Открываем в браузер страницу регистрации, вводим данные и нажимаем на кнопку зарегистрироваться.

Теперь, открываем наш почтовый ящик и видим, что нам пришло письмо с темой " Подтверждение почты на сайте develop.sozdatisite.ru ".

письмо для подтверждения почты

Открываем это письмо и видим ссылку для подтверждения почты.

содержимое письма для подтверждения почты

Обратите внимание на адрес ссылки. Когда мы составляли тело этого письма, мы указали ссылку подтверждения таким образом:

И видим что, после нажатия на эту ссылку, мы перейдём в файл activation.php, в котором мы должны закончить с подтверждением. То есть, в этом файле необходимо, удалить пользователя который подтвердил свою почту, из таблицы confirm_users, а в таблице users, поменять статус почты с 0 на 1.

Как видим ссылка из письма, содержит два параметра, токен и email. Поэтому, перейдя по этой ссылке, мы должны сначала проверить, существуют ли у неё эти параметры.

Создаём этот файл activation.php, открываем его и пишем этот код:

Если эти параметры существуют, то идём дальше. А дальше мы должны проверить, совпадает ли токен из ссылки с токеном из таблицы confirm_users.

Поэтому мы должны сделать запрос к этой таблице confirm_users, и выбрать значение поля token у соответствующего пользователя.

Дальше мы должны обновить статус у поля email_status из таблицы users и удалить временные данные пользователя из таблицы confirm_users.

В указанное место " //(1) Место для следующего куска кода ", пишем следующий код:

Почта успешно подтверждена

При авторизации проверяем, подтверждена ли почта

И перед тем как добавить email и пароль в сессию, то есть перед этими строчками:

В общем, код, у нас должен получиться таким:

Обратите внимание, что мы вырезали строки добавления данных в сессию и перенаправления пользователя на главную страницу и добавили их в блоке else, проверки статуса email.

Переходим в браузер на страницу с формой авторизации и проверяем. Попробуем авторизоваться с не подтверждённым почтовым адресом.

Не подтверждённый email

Удаление пользователей, которые не подтвердили свою почту в течении сутки

В принципе, с подтверждением почты мы закончили, осталось разобраться с удалением пользователей из базы данных, которые не подтвердили свою почту в течении сутки с момента регистрации. Но перед тем как приступить к удалению пользователей, мы должны добавить поле date_registration для таблицы users и изменить запрос на добавления пользователей в эту таблицу.

Открываем phpMyAdmin, выбираем таблицу users, кликаем на вкладку структура и нажимаем на кнопку OK.

структура таблицы users

Дальше, вводим название поля date_registration, тип выбираем datetime и нажимаем на кнопку сохранить.

Добавление нового поля в таблице users

Поле date_registration мы добавили, теперь нужно изменить запрос на добавления пользователей в таблицу users. То есть нужно указать, чтобы в поле date_registration записывалась дата регистрации пользователя.

Открываем файл register.php, идём к запросу на добавления пользователя в таблицу users и изменяем его таким образом:

То есть, в конце первых скобок, через запятую добавляем поле date_registration, а в значение для этого поля, указываем функцию NOW().

Теперь, можно приступить и к удалению неподтверждённых пользователей. При регистрации, мы добавляем пользователя сразу в обеих таблиц, в таблицу users и в таблицу confirm_users. Поэтому, удалить мы будем его также из обеих таблиц.

И тут у меня возник вопрос, в какой момент лучше всего этого сделать, то есть когда удалить не подтверждённых пользователей? В процессе регистрации, в процессе авторизации или после того как пользователь нажал на ссылку для подтверждения почты. Подумал я, и пришёл к выводу, что лучше всего сделать это во всех этих трёх случаях.

Удаление не подтверждённых пользователей в процессе регистрации

Начнём мы с момента регистрации. Открываем файл register.php, и перед добавлением пользователя в таблицу users, добавляем этот запрос:

В этом запросе мы указываем, что необходимо удалить пользователей, которые не подтвердили свою почту в течении сутки с момента регистрации, то есть у которых значение поля email_status равна нулю и разница между текущем временем ( функция NOW() ) и одной сутки (INTERVAL 1 DAY ) равна больше даты регистрации из поля date_registration.

Теперь, перед тем как составить токен и добавить пользователя в таблицу confirm_users, также добавим запрос на удаления не подтверждённых пользователей, но уже из таблицы confirm_users.

Теперь, перед тем как зарегистрировать нового пользователя, будут удаляться не подтверждённые пользователи.

Удаление не подтверждённых пользователей в процессе авторизации

Открываем файл auth.php, и перед запросом на выборе пользователя из таблицы users, добавляем сразу два запроса для удаления не подтверждённых пользователей из таблицы users и из таблицы confirm_users.

Удаление не подтверждённых пользователей в процессе подтверждения почты

Открываем файл activation.php и перед запросом на выборке токена из таблицы confirm_users, добавляем те же запросы для удаления неподтверждённых пользователей, из таблицы users и confirm_users.

И на этом завершается эта длинная статья. Надеюсь, что Вы хорошо освоили этот урок и теперь Вы точно знаете, как реализовать функционал подтверждения почты. А следующая статья будет о том, как реализовать функционал восстановления пароля, так что не забудьте подписаться на новые статьи. Желаю Вам всего хорошего!

Похожие статьи:

Понравилась статья?

Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

Читайте также: