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

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

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

У меня есть 2 учетных записи электронной почты: [email protected] и [email protected]

Я хочу отправить электронное письмо всем моим пользователям с [email protected], но затем "ответить на" [email protected](пока здесь мой PHP script не сможет обработать его).

Когда сообщение не может быть отправлено, оно отправлено на [email protected], сообщение об ошибке может быть 553 (не существующий адрес электронной почты...) и т.д.

Мой вопрос: как мне направлять все эти отказоустойчивые письма (не отправленные электронные письма) на [email protected] с помощью обработки script, чтобы проверить коды ошибок отказов?

Какой язык программирования я должен использовать для "обработки script"?

Как бы выглядела "обработка script"? Можете ли вы дать образец?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Почему бы не создать [email protected] и использовать php для прочитать эти электронные письма и делать то, что вам нужно?

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

Если у вас есть почтовый ящик POP3, настроенный для [email protected], вы можете использовать POP3-клиент script, написанный на PHP, для извлечения сообщений и проверки недоставленных сообщений.

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

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

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

Удачи!:)

Ответ 10

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

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

Итак, вы используете "-f [email protected]" в качестве параметра

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

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

Ответ 11

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

Я изменил заголовок Return-Path моего экземпляра Mail на выделенный [email protected]

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

$inst=pop3_login('mail.xxxxxx.us','110','[email protected]','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)); 
} 

Ответ 12

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

Подробнее см. запись в блоге.

Ответ 13

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

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

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

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

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

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

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

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

4 - Мы изучаем это $body и ищем все переменные строки электронной почты и извлекаем их, помещая их в двухмерный массив, называемый $matches strong >

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_\-\+][email protected][a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{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 в каталоге samples, иначе вы получите все нежелательные файлы перед печатью.

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 ([email protected])
Total: 271 messages 
Running in disable_delete mode, not deleting messages from mailbox

[email protected]

...

[email protected]

Closing mailbox, and purging messages
Read: 271 messages
0 action taken
271 no action taken
0 messages deleted
0 messages moved