Обработка отказов электронной почты с помощью PHP?

Вот мой сценарий:

У меня есть 2 учетных записи электронной почты: admin@domain.com и bounce@domain.com.

Я хочу отправить электронное письмо всем моим пользователям с помощью admin@domain.com, но затем «ответить на» bounce@domain.com (пока здесь не будет обработан мой PHP-скрипт).

Когда сообщение не может быть отправлено, оно отправляется на bounce@domain.com, сообщение об ошибке может быть 553 (не существует электронной почты …) и т. Д.

Мой вопрос: как мне направлять все эти отказы электронные письма (не отправленные письма) на bounce@domain.com через скрипт обработки, чтобы проверить коды ошибок отказов?

Какой язык программирования следует использовать для «сценария обработки»?

Как выглядел бы «сценарий обработки»? Можете ли вы дать образец?

другими словами:

Какими процедурами я должен следовать, чтобы обрабатывать электронную почту отскока?

Лучший сценарий – это возможность классифицировать тип отказов: мягкий, жесткий …

мы используем BounceStudio . Вам нужно скомпилировать его и добавить php-библиотеки … совсем не сложно. У вас есть бесплатная и платная версия этого продукта

как только мы обнаруживаем тип отказов, мы используем PEAR :: MAIL :: MIME для поиска пользовательских заголовков, которые мы добавили ранее к электронной почте, позволяет:

X-user-id: XXXXX X-campaign-id: YYYYYY X-recipient-id: SSSSSSSSS 

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

надеюсь, это поможет вам! так что вы можете помочь мне добраться до 500 очков: P

Почему бы не создать bounce@domain.com и использовать php для чтения этих писем и делать то, что вы хотите?

Редактировать После вашего комментария: Пожалуйста, chec моя ссылка whcih имеет php скрипт, который научит вас, как открыть и отправить по электронной почте поле с помощью php и прочитать электронные письма. Вы можете использовать этот скрипт для проверки сообщений об ошибках.

Пусть электронные письма откажутся от адреса, который действительно является адресом электронной почты (с регистрационными данными и т. Д.).

Создайте скрипт php, который работает каждые x минут (например, с заданием cron). Этот скрипт php должен сделать следующее. – Извлеките всю электронную почту из окна (используйте, например, Zend Mail ). Проверьте наличие ошибки в сообщении (например, выполнив поиск с помощью регулярных выражений). Делайте то, что когда-либо необходимо.

Если вы хотите точно знать, кто отскочил назад, вы можете использовать пользовательские адреса отказов. (См. Например, этот сайт )

Может быть, это немного поздно для ответа, но вы всегда можете попробовать что-то новое. На прошлой неделе у меня была такая задача, и я использовал класс BOUNCE HANDLER от Chris Fortune, который отбивает отскок в ассоциативные массивы – http://www.phpclasses.org/browse/file/11665.html

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

Приветствия.

Если у вас есть почтовый ящик POP3, настроенный для bounce@domain.com , вы можете использовать клиентский скрипт POP3, написанный на PHP, для извлечения сообщений и проверки недопустимых сообщений.

Вы должны посмотреть на SwiftMailer. Он полностью написан на PHP и поддерживает «отскок» электронных писем. http://swiftmailer.org/

Вы всегда можете использовать что-то вроде http://cloudmailin.com для перенаправления возвращенных писем на ваш php-сервер через http, но вам может быть лучше с услугой, посвященной отправке писем и использованием их api для получения данных о отказе.

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

он работает как собственное приложение mac / win, но он выполняет эту работу.

http://www.maxprog.com/site/software/internet-marketing/email-bounce-handler_sheet_us.php

Я искал ответ на тот же вопрос. Есть больше вопросов и больше вариантов.

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

Если вы используете cPanel или InterWorx / SiteWorx, вы можете настроить некоторые из адресов для обработки полученных электронных писем с помощью сценария, например скрипта PHP, чтобы вы могли написать свою собственную обработку с помощью указанного класса. Или, конечно же, вы можете создавать обычные учетные записи электронной почты и получать почту через POP3 или IMAP, а затем интерпретировать их. Я думаю, что первый из них лучше, потому что он прямой, вам не нужно использовать дополнительные каналы, такие как IMAP. Конечно, если вы не можете настроить свой почтовый сервер или не знаете, как это сделать, то первое вам лучше.

Удачи! 🙂

В команде php mail http://php.net/mail

вы используете пятый параметр и добавляете к нему «-f».

Таким образом, вы используете «-f mybouncebox@mydomain.com» в качестве параметра

диспетчер рассылки phpList использует это для управления отскоками.

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

Вот законченное решение для обработки отказов с помощью IMAP.

Я изменил заголовок Return-Path моего экземпляра Mail на выделенный bounce@xxxxxx.us

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

 $inst=pop3_login('mail.xxxxxx.us','110','bounce@xxxxxx.us','pass'); $stat=pop3_stat($inst); //print_r($stat); if($stat['Unread']>0){ echo "begin process<br><br>"; $list=pop3_list($inst); //print_r($list); foreach($list as $row){ if(strpos($row['from'],'MAILER-DAEMON')!==FALSE){ $msg=imap_fetchbody($inst,$row['msgno'],'1'); if(strpos($msg,'550')!==FALSE){ echo "handle hard bounce".$msg."<br><br>"; //WHATEVER HERE TO PROCESS BOUNCE } } else{ $msg=imap_fetchbody($inst,$row['msgno'],'1'); echo "not from my server. could be spam, etc.".$msg."<br><br>"; //PROBABLY NO ACTION IS NEEDED } //AFTER PROCESSING //imap_delete ( resource $imap_stream , int $msg_number [, int $options = 0 ] ) //commented out because I havent implemented yet. see IMAP documentation } } else{ echo "no unread messages"; } //imap_close ( resource $imap_stream [, int $flag = 0 ] ) //commented out because I havent implemented yet. see IMAP documentation. //flag: If set to CL_EXPUNGE, the function will silently expunge the mailbox before closing, removing all messages marked for deletion. You can achieve the same thing by using imap_expunge() function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false) { $ssl=($ssl==false)?"/novalidate-cert":""; return (imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass)); } function pop3_stat($connection) { $check = imap_mailboxmsginfo($connection); return ((array)$check); } function pop3_list($connection,$message="") { if ($message) { $range=$message; } else { $MC = imap_check($connection); $range = "1:".$MC->Nmsgs; } $response = imap_fetch_overview($connection,$range); foreach ($response as $msg) $result[$msg->msgno]=(array)$msg; return $result; } function pop3_retr($connection,$message) { return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT)); } function pop3_dele($connection,$message) { return(imap_delete($connection,$message)); } 

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

Подробнее см. В этой записи в блоге .

У меня была та же самая проблема, точную ситуацию. По умолчанию мой почтовый сервер отправляет все мои возвращенные письма в ту же учетную запись, из которой он был первоначально отправлен, с автоматическим msg «Ошибка доставки почты: возврат сообщения отправителю» .

Я действительно не хочу знать, почему он был возвращен, было так много транзакций по почте, что я просто хочу удалить плохие. У вас нет времени для проверки определенного правила, такого как Doestn Exist, Unavailable и т. Д. ,, Просто хочу отметить удаление и продолжить.

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

Я рекомендую вам прочитать и загрузить исправленную отлаженную версию обработки возвращенного сообщения электронной почты – ИСПОЛЬЗОВАНИЕ PHPMAILER-BMH И AUTHSMTP от KIDMOSES здесь http://www.kidmoses.com/blog-article.php?bid=40, если вы хотите настроить IMAP и отправляйте свои собственные заголовки, отправляйте их на свой bounce@domain.com, а затем переходите пальцы, чтобы увидеть, поймает ли скрипт заголовки, отправленные вами в отскок почты. Я попробовал, работает.

Но если вы хотите следовать моему быстрому и легкому решению, которое разрешило мою проблему, вот секрет.

1 – Загрузите лучшую версию с сайта KIDMOSES или с моего сайта, на случай, если KIDMOSES захотят переместить где-то еще http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip

2 – Переменная, содержащая текст возвращаемой почты, – это $ body и сама содержит плохое возвращенное электронное письмо (ТАК ЕСТЬ МНОГОМЕРНАЯ МАССА). (Также содержит ваши почтовые серверы и другие почтовые сообщения DNS, но мы ищем BAD MAIL BOUNCED.

3 – Поскольку ваша СОБСТВЕННАЯ ОБСЛУЖИВАНИЕ отправляет вам возвращенное письмо, оно вряд ли изменит его формат и собственные заголовки, отправив обратно отсканированные электронные письма, поэтому вы можете выбрать порядок возвращенного массива электронной почты. В моем случае всегда был тот же шаблон формата. (Если вы не меняете системы или поставщиков)

4 – Мы изучаем это тело $ и ищем все переменные строки электронной почты и извлекаем их, помещая их в двумерный массив, называемый $ match

5 – Мы выбираем позицию массива, печатая массив, используя print_r (array_values ​​($ matches));

6 – Это код, который необходимо изменить. Его около 500 строк из файла class.phpmailer-bmh.php

  // process bounces by rules $result = bmhDSNRules($dsn_msg,$dsn_report,$this->debug_dsn_rule); } elseif ($type == 'BODY') { $structure = imap_fetchstructure($this->_mailbox_link,$pos); switch ($structure->type) { case 0: // Content-type = text $body = imap_fetchbody($this->_mailbox_link,$pos,"1"); $result = bmhBodyRules($body,$structure,$this->debug_body_rule); //MY RULE IT WORKS at least on my return mail system.. $pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([az]{2,3})(?:\.[az]{2})?/i'; preg_match_all($pattern, $body, $matches); //print_r( array_values( $matches )); //To select array number of bad returned mail desired, usually is 1st array $matches[0][0] echo "<font color = red>".$matches[0][0]."</font><br>"; break; 

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

ВАЖНО Комментировать эхо в callback_echo.php в каталоге образцов, иначе вы получите все нежелательные файлы перед печатью.

 function callbackAction ($msgnum, $bounce_type, $email, $subject, $xheader, $cheader, $remove, $rule_no=false, $rule_cat=false, $rule_msg='', $totalFetched=0) { $displayData = prepData($email, $bounce_type, $remove); $bounce_type = $displayData['bounce_type']; $emailName = $displayData['emailName']; $emailAddy = $displayData['emailAddy']; $remove = $displayData['remove']; //echo "<br>".$msgnum . ': ' . $rule_no . ' | ' . $rule_cat . ' | ' . $bounce_type . ' | ' . $remove . ' | ' . $email . ' | ' . $subject . ' | '; //echo 'Custom Header: ' . $cheader . " | "; //echo 'Bounce Message: ' . $rule_msg . " | "; return true; } 

МОЙ ВЫХОД

 Connected to: mail.chasqui.market (bounce@chasqui.market) Total: 271 messages Running in disable_delete mode, not deleting messages from mailbox kty2001us@starmedia.com ... entv@nuevoface.com Closing mailbox, and purging messages Read: 271 messages 0 action taken 271 no action taken 0 messages deleted 0 messages moved