Регулярное выражение для отказов электронной почты - PullRequest
1 голос
/ 27 октября 2009

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

Вот пример того, что я имею до сих пор:

/reason: 550|permanent fatal errors|Error 550|Action: Failed|Mailbox does not exist|Delivery to the following recipients failed/i

Ответы [ 5 ]

1 голос
/ 09 июля 2017

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

my $content = 'EMAIL MESSAGE HEADER AND BODY';
if (
$content =~ m/Status: 5\.\d\.\d/i || # Any 5xx error
$content =~ m/Action: Failed/i ||
$content =~ m/Reason: 5\.\d\.\d/i || # Any 5xx error
$content =~ m/MAILER-DAEMON/i ||
$content =~ m/Mailbox does not exist/i ||
$content =~ m/No Such User/i ||
$content =~ m/Delivery to the following recipients failed/i ||
$content =~ m/Recipient address rejected/i ||
$content =~ m/Host or domain name not found/i ||
$content =~ m/mailbox unavailable/i
){

# Extract email address from FINAL-RECIPIENT header:
$content =~ s/^.*?final-recipient:\s?rfc822;?\s?([^\n]+).*?$/$1/is;
}
1 голос
/ 24 октября 2011

Создание уникального обратного пути: адрес электронной почты для каждого получателя электронной почты. Создайте учетную запись на этом сервере POP3 и сопоставьте их. В основном это VERP .

1 голос
/ 27 октября 2009

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

Я бы предложил SpamAssassin лично. Он упакован как модуль perl с интерфейсом командной строки «spamassassin», который, вероятно, можно принудительно сделать так, как вам нужно. Правило рикошета называется (неудивительно) BOUNCE_MESSAGE. К сожалению, это не так просто, как регулярное выражение, которое вы можете скопировать.

1 голос
/ 27 октября 2009

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

1 голос
/ 27 октября 2009

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

Я бы начал с поиска любых заголовков с ошибкой в ​​них.

...