Отправить активационное письмо пользователю

Как мне проверить, действительно ли существует электронная почта? Не могу понять, как сайты отправляют письма с уникальной ссылкой, по которой пользователь щелкает, чтобы подтвердить, что он является владельцем электронной почты =/

Создайте 2 новых столбца с именем активация и активируйте и сохраните некоторую случайную строку, отправьте электронное письмо с активационным ключом и обновите активированных пользователей = 1, которые соответствуют этой ссылке активации.

register.php?a=activate&key=9cdfb439c7876e703e307864c9167a15

Есть идеи получше?


person Martin    schedule 06.01.2010    source источник


Ответы (3)


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

Когда они зарегистрируются, я сгенерирую, возможно, 32 символа буквенно-цифровых символов верхнего/нижнего регистра и установлю их в качестве ключа активации. На этом этапе вы можете создать поле под названием «активировано» или предположить, что пользователь не активирован, если у него есть ключ активации.

uid |        email       | key
------------------------------------------------------------
001 | [email protected] | e09141f3f5a17fed6222fc0279b9afdf
------------------------------------------------------------
002 | [email protected] | 
------------------------------------------------------------

Когда пользователь обращается к сценарию активации, просто проверьте предоставленный ключ вместе с предоставленным идентификатором, и, если совпадение найдено, сотрите ключ из записи пользователя в файле (или обновите свое логическое поле «активировано») и откройте двери. .

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

person Sampson    schedule 06.01.2010
comment
Приятно! большое спасибо! Кстати, для генерации ключа, как вы думаете, md5(uniqid()); будет в порядке? не хочу 2 пользователей с одним и тем же ключом: P - person Martin; 07.01.2010
comment
md5 того же uniqid останется прежним — вы можете просто использовать префикс (возможно, md5 их электронной почты) для uniqid или использовать флаг «больше энтропии» для uniq id - person eCaroth; 07.01.2010
comment
Мартин, если ты собираешься хешировать письмо, то сначала добавь соль - person rick; 07.01.2010
comment
+1 @rick: если вы просто хешируете адрес электронной почты, его можно будет легко обойти, как только кто-нибудь заметит (не то, чтобы это действительно имело значение, поскольку любой может создать любое количество мусорных адресов электронной почты) - person o0'.; 07.05.2010

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

person Alix Axel    schedule 06.01.2010

Нет простого способа проверить, действительно ли электронное письмо существует программно. Есть несколько способов (пингование почтового сервера и т. д.), но ни один из них не доказал свою эффективность при настройке каждого почтового сервера. Заставить пользователя активировать свою учетную запись по ссылке, как вы описали, — лучший способ сделать это. Кроме того, вы можете захотеть иметь какой-то повторяющийся скрипт, такой как cron-job, который удаляет неактивированные члены по истечении определенного периода времени (для чего потребуется еще один столбец в вашей таблице, временная метка).

Это полезно, потому что если пользователь зарегистрируется, но никогда не активирует свою учетную запись и не удалит электронное письмо, а вы используете его электронную почту в качестве идентификатора (просто пример), он никогда не сможет завершить активацию. В качестве альтернативы, если они попытаются войти в систему, вы можете просто повторно отправить электронное письмо с активацией на этот адрес еще раз.

Просто убедитесь, что в электронном письме вы указали все заголовки (ответить, от и т. д.), чтобы ваше письмо не было помечено как спам.

person eCaroth    schedule 06.01.2010
comment
Этот метод проверки существования электронной почты не является надежным. Это не гарантирует, что электронная почта принадлежит пользователю. Существуют одноразовые почтовые сервисы, где вы получаете временный адрес электронной почты. Пользователь может использовать одну из этих служб, активировать свою учетную запись и войти в систему. Через некоторое время временный адрес отключается. - person Inf.S; 07.01.2010