LINUX.ORG.RU

Проверить существование имейл адресов непосредственно у SMTP сервера


2

1

Поступил заказ на изготовление тулзы, которая должна проверить существование имейлов. Для того, чтоб узнать, что ящика нет - устанавливается соединение с нужным smtp-сервером, и говорим, что собираемся отослать письмо такому-то получателю. Ожидается, что в ответ на

rcpt to: recipient@example.com
сервер скажет либо:
250 2.1.5 Ok

либо

550 5.1.1 <recipient@example.com>: Recipient address rejected: User unknown in virtual mailbox table

Отслеживать, конечно же, будем код ответа. Если 250 - значит ок (с какой-то долей погрешности), если не 250 - значит считать, что такого пользователя нет. После этого от сервера отключаемся

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

А теперь суть вопроса: как лучше лучше всего сделать серверную часть и ее взаимодействие с браузерной? По одному конекту на каждый адрес - глупо. Не хотелось бы таким подозрительным поведением провоцировать бан.

Спросить в пределах одного подключения десяток адресов - отличная идея. Но тогда надо сразу знать все эти десять адресов. Тест гугловых смтп серверов показал, что они отвечают примерно с секундной задержкой. Нехорошо заставлять пользователя ждать целых 10 секунд. Но если приходится, то уж хоть по одному адресу отмечать - прошел он валидацию или нет. Но если получать ответ по каждому имейлу, то тогда придется делать по конекту на каждый имейл.

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

★★

сервер скажет либо: 250 2.1.5 Ok

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

anonymous ()

А какова цель таких манипуляций?

Hoodoo ★★★★★ ()

Как компромис - клиент отправляет серверу пачку, а сервер ответы по одному.

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

Если абстрагироваться, вопрос «Как проверить пачку рандомных адресов на валидность?» навивает на нехорошие мысли.

Kalashnikov ★★★ ()
Ответ на: комментарий от anonymous

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

azure ★★ ()
Ответ на: комментарий от Kalashnikov

Как компромис - клиент отправляет серверу пачку, а сервер ответы по одному.

Как реализовать с использованием jQuery и php? Хотя бы в общих чертах.

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

azure ★★ ()

Проверить существование имейл адресов непосредственно у SMTP сервера

В общем случае невозможно.

sdio ★★★★★ ()

спааамер?! лови его!!!111адинадин!

твой вопрос по-другому классифицировать нельзя. зачем честному человеку таким заниматься?!

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

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

aol ★★★★★ ()

Годный заказ, можешь стать миллионером как выполнишь его :)

gh0stwizard ★★★★★ ()
Ответ на: комментарий от aol

Для тех кто не читал, поясняю: я делаю заказ для заказчика. Для чего ему это надо - меня не интересует. А тебя? И почему?

azure ★★ ()
Ответ на: комментарий от azure

Хых, ну вот как доделаешь и сдашь, начнёт твой заказчик этой тулзой тыркать во всё, что шевелится, в том числе например в мой сервер. Будет больше спама мне приходить и на личный ящик, и на рабочий.

Вот почему мы интересуемся, зачем ты пишешь такую программу.

Hoodoo ★★★★★ ()
Ответ на: комментарий от azure

Зато если получить ответ не 250, то можно знать точно, что такого адреса на сервере нет.

Если на сервере исп. greylist, то ты гарантированно получишь ошибку 4##

sdio ★★★★★ ()
Ответ на: комментарий от azure

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

aol ★★★★★ ()
Ответ на: комментарий от sdio

Если на сервере исп. greylist, то ты гарантированно получишь ошибку 4##

Ценное замечание, спасибо!

azure ★★ ()
Ответ на: комментарий от Hoodoo

Это уже проблема тебя и моего заказчика, но не моя, не так ли? Авторы nmap вряд ли должны чувствовать угрызения совести от того, что их инструмент используется для поиска открытых портов не только хорошими дядями, но и плохими, так ведь?

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

azure ★★ ()
Ответ на: комментарий от azure

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

Не далее, чем сегодня днем занимался настройкой почтового сервера. Так вот, если ты пошлешь запрос с несуществующим адресом, сервер спокойно ответит тебе, что такой адрес существует, а потом так же спокойно твое письмо затолкает в фиктивный почтовый ящик spam и там его вряд ли уже кто-нибудь когда-нибудь посмотрит. Это не недоконфигурированный сервер. Это такой способ борьбы со спамом. Один из способов.

delete83 ★★ ()

И, да. Порядочный разработчик поинтересовался бы у заказчика, нафига ему такая утилита. Потому что плодить спамеров хреновая идея.

delete83 ★★ ()
Ответ на: комментарий от azure

Ну отправить просто аяксом:

$.get(url, {'mails': ['foo@bar.baz', 'john@doe.com']}, console.log)
Дальше лонг поллинг, либо клиент по таймауту дёргает сервер, тот отдаёт вердикты по адресам. Есть ещё server-sent events, но это пока только для смелых.

Kalashnikov ★★★ ()
Ответ на: комментарий от mmarkk

запрещена (если не ошибаюсь) у exim по умолчанию. иначе бы давно так проверяли

uspen ★★★★★ ()

однако ж ты обречён на неуспех. все большие сервера говорят ОК. и более того, они хорошо банят тех кто делает много подобных запросов, не отправляя письмо. ещё более того, если MX для адреса это не почтовый шлюз напрямую, а посредник - то он точно всегда будет говорить ОК если домен правильный в RCPT TO.

а для вычисления валидных аккаунтов надо делать хитрее - отправлять письмо в котором: джаваскрипт, который сам коннектится куда надо, <img src> на твой сервак, ссылка «отписаться» и т.д.

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

а вобще, если ты спамер, тебя насадить на швабру надобно.

mmarkk ()
Ответ на: комментарий от mmarkk

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

KivApple ★★★★★ ()

Ага, спамер. Надеюсь как-нибудь встретить тебя лично и обсудить моральные аспекты рассылки спама. С нанесением. Средней тяжести, для начала.

router ★★★★★ ()
Ответ на: комментарий от azure

Такие сервера просто недоконфигурированы админом

Ну да, не хотят действующие адреса палить, ога. Быдлоадмины, что с них взять?

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

anonymous ()
Ответ на: комментарий от mmarkk

А скрипт точно выполнится? Для онлайн ридеров это XSS, а в оффлайн и выполнять его некому.

Насчёт картинок - видел в некоторых клиентах заглушки типа "Изображение не показано из соображений безопасности".

Kalashnikov ★★★ ()
Ответ на: комментарий от Kalashnikov

Ну так у них , поди, и спаморезка стоит, и кнопку «отписаться» они не жмут. И вообще не являются ЦА спамеров, лол.

anonymous ()

Бессмысленная затея. Почти уверен, что это спам, хоть тебя это почему-то и не заботит.

Что касается технической стороны - есть овер5000 способов не дать этого сделать в «удобные» сроки. Все мои почтовые сервера всегда отвечали 250 ОК до тех пор, пока не слались данные, а затем выдавался отлуп по грейлистингу, и только после прохода грейлистинга (15-20 минут для нового адреса) мог дать ответ, что емейла нет. Конечно, не на всех серверах так, но таких много )

roy ★★★★★ ()
Ответ на: комментарий от anonymous

Предполагается, что это это затрудняет сбор спам-листов.

По-моему это изначально непродуманная стратегия. Сбор имейлов брут (или даже смарт) форсом - слишком накладная задача для потенциального спамера. Если только сервер не позволяет быстро проверять существование определенных получателей большим списоком.

Я бы скорее предположил, что адреса собираются другими способами.

На данный момент сделана такая реализация: браузер на основании имени фамилии и домена формирует десяток имейлов и одним запросом передает на сервер. Сервер добавляет в голову этого списка еще один имейл с того же домена, но который заведомо нас не интересует и с большой долей вероятностью не существует, напирмер xnjnjnfvytgjyznyj@example.com.

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

Пока серверная часть будет разговаривать с почтовиком, пользователю, видимо, придется смиренно ждать :( Можно включить какую-нибудь анимацию или обратный отсчет на 10 секунд.

А что имелось ввиду под long polling? Как именно предлагается использовать?

azure ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.