Как запретить отправку писем с определённых email доменов?
Суть такая, есть плагин на 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.
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для 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); }
Тогда
user@berkeley.eduиuser@mail.berkeley.eduпройдут, аuser@fakeberkeley.edu— нет.Если плагин Profile Builder поддерживает только точные домены и не поддерживает wildcard, лучше не пытаться писать
*.com,%.comили$.com— это не универсальный синтаксис. Нужно смотреть документацию конкретного поля. Если wildcard нет, добавьте свою валидацию через хук регистрации или используйте список точных доменов.С точки зрения безопасности, домен email не доказывает принадлежность к организации, пока пользователь не подтвердил письмо. Поэтому обязательно включите email confirmation. Иначе человек может указать чужой адрес из разрешённого домена, если форма не требует подтверждения.