Автоматически проверять отклоненные письма через POP3?
Кто-нибудь может порекомендовать программное обеспечение или библиотеку.NET, которая будет проверять наличие отклоненных писем и причину отказа? Я получаю отскоченные электронные письма в учетную запись pop3, которую я могу прочитать.
Мне нужно, чтобы моя база данных была чистой от недействительных адресов электронной почты, и хочу автоматизировать это (пометить пользователя как недействительный адрес электронной почты).
5 ответов
Я проделал большую работу по обработке отказов электронных писем и разных типов. Если вы хотите быть абсолютно уверены, что электронная почта, которую вы просматриваете, действительно является отскоком определенного вида, я настоятельно рекомендую получить хороший фильтр. Я работал с Boogie Tools, и он работал очень хорошо. Это позволяет узнать, какой это отскок, Hard, Soft, Transient или даже если кто-то пытается отписаться. Он имеет множество API, включая.Net, и мне было довольно легко начать работать.
Как говорит abfo, протокол POP3 очень прост, получение сообщений не составляет труда. Разобрать сообщения, чтобы получить сообщения о сбоях, сложнее, и надежно разобрать, какая электронная почта вызвала сбой и почему произошел сбой, действительно сложно. Проблема в том, что отскок сообщения не имеют стандартного формата, формы по умолчанию варьируются от MTA к MTA. Затем администратор сайта может изменить причину сбоя, затрудняя ее распознавание, а администратор сайта может изменить шаблон сообщения об ошибке, что делает его почти невозможным.
Посмотрите, сможете ли вы найти менеджер списков рассылки.NET и сможете ли вы повторно использовать код обработки отказов. В противном случае, посмотрите, можете ли вы изменить инструмент, который отправляет сообщения, чтобы отправлять каждое электронное письмо от уникального (и обратимого) отправителя разработчика (VERP, я думаю, это называется?). Таким образом, вам не нужно сканировать тело письма, вы можете определить, какой получатель не прошел проверку, изучив адрес получателя сообщения об ошибке.
Это довольно легко сделать с TcpClient. Откройте сервер:
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(POP3Server, POP3Port);
NetworkStream stream = tcpClient.GetStream();
Прочитайте приветственное сообщение:
int read = stream.Read(inBuffer, 0, inBuffer.Length);
string response = Encoding.ASCII.GetString(inBuffer, 0, read);
if (response.IndexOf("+OK") != 0) throw new ...;
Напишите обратно на сервер:
byte[] outBuffer = Encoding.ASCII.GetBytes("USER " + account + "\r\n");
stream.Write(outBuffer, 0, outBuffer.Length);
Это посылает команду USER. Вам нужно войти в систему, а затем вы можете начать собирать сообщения - полный список команд см. В POP3 RFC. Если вы не хотите раскручивать свой собственный, ознакомьтесь с этой статьей CodeProject.
Спасибо за ответ, отлично! Я сам провел небольшое исследование и обнаружил, что ListNanny также очень прост в использовании и сообщает вам тип отказов. Напишу какое-нибудь доказательство концепции и посмотрим, какая мне больше нравится...
Ваш вопрос заставил меня понять, что плагин Wordpress Newsletter, который я собирался использовать, не имеет управления отказов, и мне тоже что-то нужно.
Я некоторое время оглядывался по сторонам и остановился на бесплатном менеджере рассылки PHPlist с открытым исходным кодом.
Они подробно описывают свои настройки для обработки отказов и имеют экспериментальную расширенную функцию обработки отказов, которая позволит вам настроить обработку отказов именно так, как вы хотите.
Evem, если вы решите не использовать PHPlist, чтение того, как они это делают, будет для вас полезной информацией.