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

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

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

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

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

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

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

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

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

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

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

  • Настройки для обработки отказов

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

  • Как отправить 100 000 электронных писем в неделю?

Редактировать: Это не так много, только некоторые ссылки:

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

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

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

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

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

  • Валидация тегов адресов отказов (BATV)
  • Структура политики отправителя (SPF)

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

Вот как я это делал раньше. Он может захватывать по меньшей мере более 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\'s 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\'s 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\'s 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'; 

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

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

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

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

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

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

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

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

Прочитав документы, похоже, что это зависит от вашей задачи.

Не найдя простых ответов на этот вопрос, я нашел это отличное решение для github:

https://github.com/cfortune/PHP-Bounce-Handler

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

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

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

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

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

Сохранение таких библиотек требует много времени, и как только это становится значительно трудоемким, такие библиотеки часто либо оставляются, либо редко обновляются. Как правило, возникают коммерческие решения.

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

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

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

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

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

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