Подтвердить что ты не робот

Отказованная почта Обработка в PHP - Какие-нибудь современные решения?

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

Есть 3 PHP-решения, которые я нашел, которые, как предполагается, предназначены для обработки отскок почты, но они все устарели и больше не поддерживаются из того, что я вижу. (PHPList, PHPMailer-BMH, Bounce Handler @PHPClasses.org)

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

Спасибо за любую помощь.

4b9b3361

Ответ 1

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

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

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

Здесь есть большой ответ на SO (но я не нашел его для этого ответа), который содержит множество подробностей по этой теме. Если я найду его, добавлю его.

Общим моментом является то, что я не знаю о многих PHP-инструментах для обработки отскоков, я знаю, что PHPList (компоненты PHP для обработки почтового списка) имеет что-то в своем репозитории:

Изменить: Связанный с очень информативным ответом вопрос:

Изменить: Это немного, только некоторые ссылки:

Мне интересно, почему нет стандартного в подборе электронной почты, который позволяет легко идентифицировать отскоки и причину отказов - или есть? (например, RFC)

Существует RFC3834 - Рекомендации по автоматическим ответам на электронную почту, которые обновляются с помощью RFC5436 Механизм уведомления сита: mailto.

Bouncing также частично рассматривается в RFC5321 Simple Mail Transfer Protocol, в котором четко указывается причина, по которой MTA должен отчитываться, если сообщение не может быть доставлен.

Основная проблема заключается в том, что bounce-address (отправитель) не может быть проверен в SMTP, поэтому отправка сообщения о отказе несет проблему, которая, вероятно, относится к неправильному человеку (Backscatter Spam).

Поэтому надежная почтовая программа не только проверяет наличие отказов, но и делает больше с SMTP для получения определенного уровня качества, см.:

Вся страница Википедии Отчет о доставке может быть интересен для первого просмотра изображения.

Ответ 2

Вот как я это сделал раньше. Он может захватывать по крайней мере более 70% сообщений отказов последовательно.

В отправляемых электронных сообщениях введите собственный заголовок (например, "x-email-check-id" ), чтобы иметь уникальный идентификатор для каждого отправляемого письма (возможно, создать GUID и сохранить его в базе данных для каждого электронная почта)

В конце сервера напишите задание cron, чтобы периодически загружать электронные письма с адреса bounce и искать этот заголовок в ответном сообщении. Таким образом, вы можете сопоставить почту отказов с отправленным электронным письмом. Таким образом, вы можете установить, что это письмо отскакивает от вашей отправки и не является спамом.

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

$Email__Full[] = 'databytes limit';
$Email__Full[] = 'exceeded dropfile size';
$Email__Full[] = 'exceeded email quota';
$Email__Full[] = 'exceeded storage';
$Email__Full[] = 'exceeding receiving limits';
$Email__Full[] = 'exceeds the maximum size';
$Email__Full[] = 'folder is full';
$Email__Full[] = 'mail system full';
$Email__Full[] = 'mailbox exceeds allowed size';
$Email__Full[] = 'mailbox full';
$Email__Full[] = 'mailbox has exceeded the limit';
$Email__Full[] = 'mailbox is full';
$Email__Full[] = 'mail box full';
$Email__Full[] = 'out of disk space';
$Email__Full[] = 'out of diskspace';
$Email__Full[] = 'over disk quota';
$Email__Full[] = 'over quota';
$Email__Full[] = 'over the allowed quota';
$Email__Full[] = 'problem with the recipient\ mailbox';
$Email__Full[] = 'quota exceeded';
$Email__Full[] = 'quota violation';
$Email__Full[] = 'space has been used up';
$Email__Full[] = 'space not enough';
$Email__Full[] = 'status: 5.2.1';
$Email__Full[] = 'status: 5.2.2';
$Email__Full[] = 'status: 5.2.3';
$Email__Full[] = 'status: 5.3.3';

$Email__NotExist[] = '/var/mail/nobody';
$Email__NotExist[] = '550 5.1.1';
$Email__NotExist[] = 'account expired';
$Email__NotExist[] = 'account inactive';
$Email__NotExist[] = 'account suspended';
$Email__NotExist[] = 'address is administratively disabled';
$Email__NotExist[] = 'address is not recognized';
$Email__NotExist[] = 'address is rejected';
$Email__NotExist[] = 'address not recognized';
$Email__NotExist[] = 'address rejected';
$Email__NotExist[] = 'bad destination email address';
$Email__NotExist[] = 'cname lookup failed';
$Email__NotExist[] = 'connection refused';
$Email__NotExist[] = 'couldn\'t find any host';
$Email__NotExist[] = 'could not be found';
$Email__NotExist[] = 'deactivated mailbox';
$Email__NotExist[] = 'delivery time expired';
$Email__NotExist[] = 'destination server not responding';
$Email__NotExist[] = 'disabled or discontinued';
$Email__NotExist[] = 'does not exist';
$Email__NotExist[] = 'does not like recipient';
$Email__NotExist[] = 'doesn\'t have a yahoo.com account';
$Email__NotExist[] = 'doesn\'t have a yahoo.com.sg account';
$Email__NotExist[] = 'domain is for sale';
$Email__NotExist[] = 'find a mail exchanger';
$Email__NotExist[] = 'find any host named';
$Email__NotExist[] = 'following address(es) failed';
$Email__NotExist[] = 'host unknown';
$Email__NotExist[] = 'i couldn\'t find any host by that name';
$Email__NotExist[] = 'illegal user';
$Email__NotExist[] = 'in the queue too long';
$Email__NotExist[] = 'inactive recipient';
$Email__NotExist[] = 'inactive user';
$Email__NotExist[] = 'incorrectly addressed';
$Email__NotExist[] = 'invalid recipient';
$Email__NotExist[] = 'invalid user';
$Email__NotExist[] = 'isn\'t in my control/locals file';
$Email__NotExist[] = 'mailbox not available';
$Email__NotExist[] = 'mailbox not found';
$Email__NotExist[] = 'mailbox unavailable';
$Email__NotExist[] = 'mail is looping';
$Email__NotExist[] = 'message is looping';
$Email__NotExist[] = 'name is not recognized';
$Email__NotExist[] = 'name not found';
$Email__NotExist[] = 'name not recognized';
$Email__NotExist[] = 'no local mailbox';
$Email__NotExist[] = 'no longer accepts mail';
$Email__NotExist[] = 'no longer an employee';
$Email__NotExist[] = 'no longer on server';
$Email__NotExist[] = 'no longer valid';
$Email__NotExist[] = 'no mailbox';
$Email__NotExist[] = 'no route found to domain';
$Email__NotExist[] = 'no such user';
$Email__NotExist[] = 'none of the mail servers for the destination domain has so far responded';
$Email__NotExist[] = 'no valid host';
$Email__NotExist[] = 'no valid recipients';
$Email__NotExist[] = 'not a valid mailbox';
$Email__NotExist[] = 'not listed';
$Email__NotExist[] = 'not listed in domino';
$Email__NotExist[] = 'possible mail loop';
$Email__NotExist[] = 'recipient cannot be verified';
$Email__NotExist[] = 'recipient unknown';
$Email__NotExist[] = 'recipients are invalid';
$Email__NotExist[] = 'recipnotfound';
$Email__NotExist[] = 'relaying denied';
$Email__NotExist[] = 'several matches found in domino';
$Email__NotExist[] = 'status: 5.1.1';
$Email__NotExist[] = 'status: 5.1.3';
$Email__NotExist[] = 'status: 5.1.4';
$Email__NotExist[] = 'status: 5.1.6';
$Email__NotExist[] = 'status: 5.1.7';
$Email__NotExist[] = 'this user doesn\'t have a yahoo';
$Email__NotExist[] = 'too many hops';
$Email__NotExist[] = 'unable to deliver';
$Email__NotExist[] = 'unable to relay';
$Email__NotExist[] = 'unknown address';
$Email__NotExist[] = 'unknown recipient';
$Email__NotExist[] = 'unknown user';
$Email__NotExist[] = 'unrouteable address';
$Email__NotExist[] = 'user doesn\'t have';
$Email__NotExist[] = 'user unknown';
$Email__NotExist[] = 'x-notes; 550 5.1.1';
$Email__NotExist[] = 'x-notes; recipient\ domino directory';
$Email__NotExist[] = '$B%G%#%l%/%H%j$K$O8+$D$+$j$^$;$s!#'; //* Returned from japanese domino . Somehow means directory is not found.

$Email__Banned[] = '_spam_';
$Email__Banned[] = '550 5.7.1';
$Email__Banned[] = '550 access denied';
$Email__Banned[] = '550 no thanks';
$Email__Banned[] = '550 spam';
$Email__Banned[] = '554 5.7.0';
$Email__Banned[] = '554 5.7.1';
$Email__Banned[] = '554 denied';
$Email__Banned[] = '554 message does not conform to standards';
$Email__Banned[] = '554 message refused';
$Email__Banned[] = '571 message Refused';
$Email__Banned[] = 'activated my anti-spam features';
$Email__Banned[] = 'administrative prohibition';
$Email__Banned[] = 'appears to contain uce/spam';
$Email__Banned[] = 'appears to be spam';
$Email__Banned[] = 'appears to be unsolicited';
$Email__Banned[] = 'banned for spamming';
$Email__Banned[] = 'blackholed by uribl.com';
$Email__Banned[] = 'blacklisted by surbl';
$Email__Banned[] = 'blocked by filter';
$Email__Banned[] = 'blocked by kbas system';
$Email__Banned[] = 'blocked by our content filter';
$Email__Banned[] = 'blocked by spamsssassin';
$Email__Banned[] = 'blocked by the recipient';
$Email__Banned[] = 'blocked by user\ personal blacklist';
$Email__Banned[] = 'blocked due to spam like qualities';
$Email__Banned[] = 'blocked using spam pattern';
$Email__Banned[] = 'blocked using uceprotect';
$Email__Banned[] = 'body part contains disallowed string';
$Email__Banned[] = 'classified as **spam**';
$Email__Banned[] = 'content blacklist';
$Email__Banned[] = 'content filter rejected the message';
$Email__Banned[] = 'consider the message to be spam';
$Email__Banned[] = 'considered spam';
$Email__Banned[] = 'contains spam';
$Email__Banned[] = 'content filter rejection';
$Email__Banned[] = 'content rejected';
$Email__Banned[] = 'denied by policy';
$Email__Banned[] = 'detected your message as spam';
$Email__Banned[] = 'does not accept UCE';
$Email__Banned[] = 'domain is banned';
$Email__Banned[] = 'email abuse detected';
$Email__Banned[] = 'error 553';
$Email__Banned[] = 'help_spam_16.htm';
$Email__Banned[] = 'high on spam scale';
$Email__Banned[] = 'http://www.google.com/mail/help/bulk_mail.html';
$Email__Banned[] = 'http://www.surbl.org/lists.html';
$Email__Banned[] = 'identified as spam';
$Email__Banned[] = 'identified your message as spam';
$Email__Banned[] = 'listed in multi.surbl.org';
$Email__Banned[] = 'looks like spam';
$Email__Banned[] = 'mail rejected by windows live hotmail for policy reasons';
$Email__Banned[] = 'message bounced by administrator';
$Email__Banned[] = 'message content rejected, ube';
$Email__Banned[] = 'message contains a virus or other harmful content';
$Email__Banned[] = 'message has too high spam probability';
$Email__Banned[] = 'message is blacklisted';
$Email__Banned[] = 'message refused';
$Email__Banned[] = 'no spam here';
$Email__Banned[] = 'not accepted here';
$Email__Banned[] = 'not in the whitelist';
$Email__Banned[] = 'not rfc compliant';
$Email__Banned[] = 'permanently rejected message';
$Email__Banned[] = 'policy violation';
$Email__Banned[] = 'refused mail service';
$Email__Banned[] = 'reject spam mail';
$Email__Banned[] = 'reject the mail';
$Email__Banned[] = 'rejected by filter';
$Email__Banned[] = 'rejected as spam';
$Email__Banned[] = 'rejected by 35 antiSpam system';
$Email__Banned[] = 'rejected by antispam system';
$Email__Banned[] = 'rejected by cloudmark anti-spam';
$Email__Banned[] = 'rejected by our Spam Filter';
$Email__Banned[] = 'rejected by spam filtering';
$Email__Banned[] = 'rejected by surbl';
$Email__Banned[] = 'rejected by the anti-spam system';
$Email__Banned[] = 'rejected due to security policies';
$Email__Banned[] = 'rejected for policy reasons';
$Email__Banned[] = 'rejected for spam';
$Email__Banned[] = 'requires that you verify';
$Email__Banned[] = 'scored as spam';
$Email__Banned[] = 'sender address verification';
$Email__Banned[] = 'sender was rejected';
$Email__Banned[] = 'spam detected by spamassassin';
$Email__Banned[] = 'spam filter pattern';
$Email__Banned[] = 'spam-like characteristics';
$Email__Banned[] = 'spam mail detected';
$Email__Banned[] = 'spam mail refused';
$Email__Banned[] = 'spam message was blocked';
$Email__Banned[] = 'spam rejected';
$Email__Banned[] = 'spam score too high';
$Email__Banned[] = 'status: 5.7.1';
$Email__Banned[] = 'support.proofpoint.com';
$Email__Banned[] = 'suspected spam';
$Email__Banned[] = 'suspicious url in message body';
$Email__Banned[] = 'temporarily deferred';
$Email__Banned[] = 'transaction failed';
$Email__Banned[] = 'unacceptable content';
$Email__Banned[] = 'unacceptable mail content';
$Email__Banned[] = 'unsolicited bulk e-mail';
$Email__Banned[] = 'unsolicited bulk email';
$Email__Banned[] = 'unsolicited email is refused';
$Email__Banned[] = 'validate recipient email';
$Email__Banned[] = 'will be deleted from queue';

$Email__OutOffice[] = 'away for a vacation';
$Email__OutOffice[] = 'away from the office';
$Email__OutOffice[] = 'not in office';
$Email__OutOffice[] = 'on leave';
$Email__OutOffice[] = 'on vacation';
$Email__OutOffice[] = 'out of office';
$Email__OutOffice[] = 'out of the office';

Ответ 3

его легче, чем вы думаете, чтобы написать это самостоятельно.

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

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

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

Много автономных/библиотек предлагают дополнительные функции какие ссылки были нажаты, и кто которые читают электронную почту. и т.д.

эти вещи легко достичь, но взять ресурсы.

Сообщите мне, есть ли что-нибудь еще, что вам нужно для помощи

Ответ 4

Я большой поклонник библиотеки ezComponents, которая включает компонент Mail, который может обрабатывать как отправку, так и разбор почты (а также подключение к вашему MTA для его получения. http://ezcomponents.org/docs/tutorials/Mail#mail-parsers

Чтение документов, похоже, должно соответствовать вашей задаче.

Ответ 6

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я принцип, описанный ниже,

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

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

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

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

Я большой поклонник Open Source, и нет никаких сомнений в том, что я лично очень сильно выиграл от этого на протяжении многих лет. Для подавляющего большинства из вас, читающих это, приведенные выше варианты вполне достаточны, так как многие из вас способны разрабатывать нужные вам решения или изменять доступные инструменты в соответствии с вашими потребностями и имеют время для этого.

Тем не менее, для тех из вас, кто не хочет создавать собственные приложения, отлаживать и устранять их, обновлять определения обработки электронной почты последовательно и часто, InboxResponse.com предлагает обработка отказов электронной почты в качестве решения SAAS. Это:

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

Бесплатная пробная версия доступна по следующему URL-адресу: https://inboxresponse.com/free-trial/

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

Надеюсь, что это поможет кому-то!