Как запретить отправку писем с определённых email доменов?

Ссылка скопирована
1 ответ

Суть такая, есть плагин на WP, называется Profile Builder, он позволяет создавать кастомную регистрацию. У него есть функция в настройках по ограничению или разрешению заполнять форму регистрации с определенных доменов электронной почты. Например, если там прописать gmail.com или berkeley.edu, то заполнять форму смогут только люди с почтой а-ля "blabla@gmail.com" или "blabla@berkeley.edu". Так вот, есть ли возможность прописать как-то поддомен почты так, чтобы отправка была не с конкретного почтового поддомена, а со всех поддоменов этого домена. Например, что-то типа указать *.com или $.com, или может %.com или еще как-то и тогда будет типа разрешена отправка письма не только с почтового поддомена gmail.com, а и со всех других поддоменов этого домена .com. Например, если пользователя почта blabla@list.com или blabla@mail.com.

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Для email-доменов важно различать домен, поддомен и зону. Адрес user@gmail.com относится к домену gmail.com. Адрес user@mail.berkeley.edu относится к поддомену mail.berkeley.edu. Маска вида *.com означает «любой домен в зоне .com», и разрешать такое в регистрации обычно бессмысленно: это почти весь интернет.

Если задача — запретить или разрешить все поддомены конкретного домена, логика должна быть такой:

  • разрешить berkeley.edu;
  • разрешить mail.berkeley.edu;
  • разрешить student.berkeley.edu;
  • не разрешать любой .edu или любой .com.

В коде это проверяется через окончание домена:

function email_matches_domain($email, $allowed_domain) {
    $domain = strtolower(substr(strrchr($email, '@'), 1));
    $allowed = strtolower($allowed_domain);
 
    return $domain === $allowed || str_ends_with($domain, '.' . $allowed);
}

function email_matches_domain($email, $allowed_domain) { $domain = strtolower(substr(strrchr($email, '@'), 1)); $allowed = strtolower($allowed_domain); return $domain === $allowed || str_ends_with($domain, '.' . $allowed); }

Тогда user@berkeley.edu и user@mail.berkeley.edu пройдут, а user@fakeberkeley.edu — нет.

Если плагин Profile Builder поддерживает только точные домены и не поддерживает wildcard, лучше не пытаться писать *.com, %.com или $.com — это не универсальный синтаксис. Нужно смотреть документацию конкретного поля. Если wildcard нет, добавьте свою валидацию через хук регистрации или используйте список точных доменов.

С точки зрения безопасности, домен email не доказывает принадлежность к организации, пока пользователь не подтвердил письмо. Поэтому обязательно включите email confirmation. Иначе человек может указать чужой адрес из разрешённого домена, если форма не требует подтверждения.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно