Автоматически проверять возвращенные письма через POP3?

Может ли кто-нибудь порекомендовать программное обеспечение или библиотеку .NET, которая будет проверять наличие отказов электронной почты и причину отказов? Я получаю отсканированные электронные письма в аккаунт pop3, которые я могу читать.

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

Ответов (5)

Решение

Я проделал огромную работу по обработке писем-отказов и разных типов. Если вы хотите быть абсолютно уверены в том, что просматриваемое вами электронное письмо действительно является отказом определенного типа, я настоятельно рекомендую приобрести хороший фильтр. Я работал с Boogie Tools, и он работал очень хорошо. Он позволяет узнать, что это за отскок: жесткий, мягкий, временный или даже пытается ли кто-то отписаться. У него есть несколько API, включая .Net, и мне было довольно легко начать работать.

как говорит abfo , протокол POP3 очень прост, получать сообщения не составляет труда. Анализировать сообщения для выявления сбоев труднее, а надежно определить, какое электронное письмо вызвало сбой и почему оно не удалось. Проблема в том, что сообщения о недоставке не имеют стандартного формата, формы по умолчанию варьируются от MTA до MTA. Затем причина сбоя может быть изменена администратором сайта, что затрудняет распознавание, и администратор сайта может изменить шаблон сообщения об ошибке, что делает его практически невозможным.

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

Спасибо за ответ, отлично! Я сам провел небольшое исследование и нашел ListNanny - также очень простой в использовании и сообщающий вам тип отскока. Напишу какое-нибудь доказательство концепции и посмотрим, какой из них мне больше нравится ...

Это довольно просто сделать с помощью 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 .

Ваш вопрос заставил меня понять, что плагин Wordpress Newsletter, который я собирался использовать, не имеет управления отказами, и мне тоже что-то нужно.

Я немного огляделся и остановился на бесплатном менеджере рассылки PHPlist с открытым исходным кодом .

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

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