Методы проверки адреса электронной почты (Кнопка Subscribe)

Я кодирую сайт в php, и я в настоящее время нахожусь на связываться нас страница, и я задавался вопросом, что лучший способ состоял в том, чтобы проверить адрес электронной почты?

  1. Путем отправления ссылки проверки на их адрес электронной почты?
  2. Regex
  3. Какой-либо другой метод?

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

Также я собираюсь использовать эти методы для реализации подписать кнопки на моей веб-странице. Действительно ли это - лучший способ сделать это? какие-либо другие методы я должен condsider?

6
задан RSM 26 July 2010 в 09:48
поделиться

9 ответов

Обычно я выполняю эти шаги

  1. Регулярное выражение
  2. Отправляю код активации на адрес электронной почты

, если первый шаг терпит неудачу, он никогда не достигает второго шага. если отправка электронной почты не удалась из-за того, что электронная почта не существует, я удаляю учетную запись или выполняю другие действия

- отредактируйте

3 - Если по какой-либо причине электронное письмо для активации не отправляется, электронное письмо не приходит удален, он остается неутвержденным в течение 7 дней (или как настроено вами), повторная отправка электронной почты выполняется каждые 2-3 часа, по истечении этих дней, если безуспешно, электронное письмо удаляется

4 - Если электронное письмо отправлено успешно, но не активировано остается неутвержденным, но может быть повторно активирован в любое время, сгенерировав новый код активации

16
ответ дан 8 December 2019 в 02:17
поделиться

Я думаю, что лучшим будет сочетание 3. и 1.

На начальном этапе вы проверяете синтаксически письмо (чтобы отловить опечатки):

filter_var($email, FILTER_VALIDATE_EMAIL)

А на втором этапе вы посылаете письмо с адресом подтверждения (чтобы отловить ошибки и намеренно неверную информацию).

11
ответ дан 8 December 2019 в 02:17
поделиться

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

3
ответ дан 8 December 2019 в 02:17
поделиться

Лучший способ сделать это - отправить электронное письмо со ссылкой для подтверждения. По крайней мере, если вам не нужны электронные письма для активации, подтвердите адрес электронной почты. Лучшая функция проверки электронной почты - это RFC-совместимый валидатор адресов электронной почты от Доминика Сэйерса .

Просто включите php-файл в свой проект и используйте его следующим образом:

if (is_email($email, $checkDNS, $diagnose)) //$checkDNS and $diagnose are false by default
    echo 'Email valid';
else
    echo 'Email invalid';
  • Если для $ checkDNS установлено значение true, он подтвердит, что домен существует. Если домен не существует, функция вернет false, даже если адрес электронной почты действителен.
  • Если для $ Diagnose установлено значение true, функция возвращает код вместо логического, который сообщит вам, почему адрес электронной почты недействителен (или 0, если он действителен).
4
ответ дан 8 December 2019 в 02:17
поделиться

Это зависит от того, хочет ли пользователь получить ответ.

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

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

3
ответ дан 8 December 2019 в 02:17
поделиться

Регулярное выражение не совсем подходит для определения допустимости синтаксиса адреса электронной почты, и параметр FILTER_VALIDATE_EMAIL для функции filter_var также довольно ненадежен. Я использую EmailAddressValidator Class для проверки синтаксиса адреса электронной почты.

Я собрал несколько примеров неверных результатов, возвращаемых filter_var (PHP версии 5.3.2-1ubuntu4.2). Наверное, есть еще. Некоторые из них, по общему признанию, немного экстремальны, но все же стоит отметить:

RFC 1035 2.3.1. Предпочтительный синтаксис имени
http: //tools.ietf.org / search / rfc1035
Вкратце: домен состоит из меток, разделенных точками-разделителями (хотя это не обязательно верно для локальных доменов).

echo filter_var('name@example', FILTER_VALIDATE_EMAIL);
// name@example

RFC 1035 2.3.1. Предпочтительный синтаксис имени
Метки должны соответствовать правилам для имен хостов ARPANET. Они должны начинаться с буквы, а затем с буквы или цифры, а в качестве внутренних символов должны быть только буквы, цифры и дефис.

echo filter_var('name@1example.com', FILTER_VALIDATE_EMAIL);
// name@1example

RFC 2822 3.2.5. Строки в кавычках
http://tools.ietf.org/html/rfc2822#section-3.2.5
Это действительно (хотя и отклоняется многими почтовыми серверами):

echo filter_var('name"quoted"string@example', FILTER_VALIDATE_EMAIL);
// FALSE

RFC 5321 4.5.3.1. 1. Локальная часть
http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1
Максимальная общая длина имени пользователя или другой локальной части составляет 64 октета.
Тест с 70 символами:

echo filter_var('AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij@example.com', FILTER_VALIDATE_EMAIL);
// AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij@example.com

RFC 5321 4.5.3.1.2. Домен
http://tools.ietf.org/html/rfc5321#section-4.5.3.1.2
Максимальная общая длина доменного имени или номера составляет 255 октетов.
Тест с 260 символами:

echo filter_var('name@AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com', FILTER_VALIDATE_EMAIL);
// name@AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com

Для получения дополнительной информации см. Проверка адреса электронной почты с помощью PHP, правильный путь .

2
ответ дан 8 December 2019 в 02:17
поделиться

Перед отправкой проверочного электронного письма вы также можете использовать checkdnsrr () , чтобы убедиться, что домен существует и имеет ли настроенные записи MX. Это позволит обнаружить электронные письма, в которых используются поддельные домены (например, (скрытый)

function validateEmail($email, $field, $msg = '')
{
    if (!filter_var($email, FILTER_VALIDATE_EMAIL))
    {
        return false;
    }
    list($user, $domain) = explode('@', $email);
    if (function_exists('checkdnsrr') && !checkdnsrr($domain, 'MX'))
    {
        return false;
    }
    return true;
}

. Нам нужно использовать function_exists () , чтобы проверить, что checkdnsrr () доступен нам, потому что он не был доступен на Windows до PHP 5.3.

2
ответ дан 8 December 2019 в 02:17
поделиться
 function checkEmail($email) {
  if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])
  ↪*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",
               $email)){
    list($username,$domain)=split('@',$email);
    if(!checkdnsrr($domain,'MX')) {
      return false;
    }
    return true;
  }
  return false;
-1
ответ дан 8 December 2019 в 02:17
поделиться

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

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

1
ответ дан 8 December 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: