Bounce Email handling with PHP?

Aqui está o meu cenário:

Tenho 2 contas de e-mail: admin@domain.com e bounce@domain.com.

Quero enviar e-mail para todos os meus usuários com admin@domain.com, mas depois “responder para” bounce@domain.com (até aqui, meu script PHP pode lidar com isso).

Quando, o email não pode ser enviado, é enviado para bounce@domain.com, a mensagem de erro pode ser 553 (email inexistente …) etc.

A minha pergunta é: como direciono todos aqueles e-mails de devolução (não enviou emails) para bounce@domain.com através de um script de manipulação para verificar os códigos de erro de rejeição?

Qual linguagem de programação devo usar para o “script de manipulação”?

Como seria o “script de manipulação”? Você pode dar uma amostra?

em outras palavras:

Quais são os procedimentos que eu devo seguir para lidar com o e-mail do bounce?

O melhor cenário é capaz de classificar o tipo de salto: soft, hard …

O que usamos é BounceStudio . Você precisa compilá-lo e adicionar as bibliotecas php … não é difícil. Você possui a versão gratuita e paga desse produto

Uma vez que detectamos o tipo de salto , usamos PEAR :: MAIL :: MIME para procurar headers personalizados que adicionamos anteriormente ao e-mail, digamos:

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

Desta forma, podemos conhecer o destinatário real ao qual enviamos o email.

Espero que isso ajude você! então você pode me ajudar a chegar aos 500 pontos: P

Por que não criar um bounce@domain.com e usar php para ler esses e- mails e fazer o que quiser?

Editar Após o seu comentário: Por favor, chec meu link, que tem um script php que irá ensinar-lhe como abrir e checkbox de e-mail usando php e ler os e-mails. Você pode usar este script para verificar as mensagens de erro.

Deixe os e-mails saltarem para um endereço que é realmente um endereço de email (com detalhes de login etc.).

Faça um script php que é executado sempre x minutos (por exemplo, com um trabalho cron). Este script php deve fazer o seguinte. – Recupere todos os e-mails da checkbox (use, por exemplo, o Zend Mail ) – Verifique o erro na mensagem (por exemplo, pesquisando-o com expressões regulares) – Faça o que for necessário.

Se você quer saber especificamente quem se recuperou, você pode usar endereços de retorno específicos do usuário. (Veja, por exemplo, este site )

Talvez seja um pouco tarde para a resposta, mas você sempre pode tentar algo novo. Tive a última semana uma tarefa como essa, e usei a BOUNCE HANDLER Class, de Chris Fortune, que puxa o salto para arrays associativos – http://www.phpclasss.org/browse/file/11665.html

Isso será usado depois de se conectar ao POP3 com algum remetente para obter os saltos dele, depois analisá-lo em pedaços com isso, e se o status você buscou, faça as ações necessárias.

Felicidades.

Se você tiver uma checkbox de correio POP3 configurada para bounce@domain.com , você poderia usar um script de cliente POP3 escrito em PHP para recuperar as mensagens e verificar mensagens não entregues.

Você deve olhar para SwiftMailer. Está completamente escrito em PHP e tem suporte para e-mails de “rebote”. http://swiftmailer.org/

Você sempre pode usar algo como http://cloudmailin.com para encaminhar os e-mails recusados ​​para o seu servidor php via http, porém você pode ser melhor com um serviço dedicado ao envio de e-mails e usando seus api para recuperar os detalhes do salto.

Eu tive muita sorte procurando por uma solução PHP para isso, mas eu encontrei esse produto que faz exatamente o que eu precisava.

Ele é executado como um aplicativo nativo mac / win, mas ele faz o trabalho.

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

Eu estava procurando a resposta para a mesma pergunta. Há mais partes da pergunta e mais opções.

Para lidar com o e-mail rebatado, encontrei uma class PHP , puramente em PHP, sem compilation ou instalação de software adicional, se você tiver um site com PHP. É muito fácil de usar.

Se você estiver usando cPanel ou InterWorx / SiteWorx, você pode configurar alguns dos endereços para lidar com os e-mails recebidos com um script, por exemplo, um script PHP, para que você possa escrever o seu próprio tratamento com a ajuda da class mencionada. Ou, é claro, você ainda pode criar contas de e-mail comuns e recuperar os e-mails via POP3 ou IMAP e depois interpretá-los. Eu acho que o primeiro é melhor, porque é direto, você não precisa usar canais adicionais, como IMAP. Claro, se você não pode configurar o seu servidor de correio, ou não sabe como fazê-lo, o primeiro é melhor para você.

Boa sorte! 🙂

No comando php mail http://php.net/mail

você usa o quinto parâmetro e adicione “-f” a ele.

Então, você usa “-f mybouncebox@mydomain.com” como o parâmetro

O gerenciador de boletim de notícias phpList usa isso para gerir saltos.

Uma vez que os saltos se acumulam na checkbox de correio, você pode POP-los e processá-los. Essa é a maneira mais fácil de lidar com eles, ao invés de lidar com eles quando eles chegam.

Aqui está uma solução enlatada para processar rebotes usando o IMAP.

Eu mudei o header Return-Path da minha instância de Email para um dedicado bounce@xxxxxx.us

O único método bastante fácil para eu considerar viável é o seguinte, que verifica via POP3 a checkbox de input dedicada e pode lidar com cada email com base na mensagem recebida.

 $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

"; $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."

"; //WHATEVER HERE TO PROCESS BOUNCE } } else{ $msg=imap_fetchbody($inst,$row['msgno'],'1'); echo "not from my server. could be spam, etc.".$msg."

"; //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)); }

Estamos usando o Procmail para filtrar esse tipo de e-mails. Depois de examinar algumas das soluções já mencionadas aqui, acabamos com uma receita Procmail simples para detectar mensagens de rejeição. Dependendo da precisão que você precisa, isso pode ser aplicável à sua situação.

Para obter detalhes, verifique esta input no blog .

Eu tive o mesmo problema, situação exata. Por padrão, meu servidor de e-mail, está enviando todos os meus e-mails retornados para a mesma conta de que foi enviada originalmente, com msg automática “A entrega do correio falhou: retornando a mensagem ao remetente” .

Eu realmente não quero saber por que foi devolvido, tive muitas transactions de e-mails que eu só quero remover as más. Não tem tempo para verificar a regra específica, como Doestn Exist, Indisponível, etc ,,, Apenas quer marcar a eliminação e continuar.

Bounce mails são tão triviais quanto você precisa lidar com muitos tipos diferentes de servidores e respostas. Cada software anti-spam ou cenário do sistema operacional pode enviar um código de erro diferente com o e-mail rejeitado.

Eu recomendo que você leia e baixe esta versão corrigida corrigida do Handled Bounce Email – USANDO PHPMAILER-BMH E AUTHSMTP da KIDMOSES aqui http://www.kidmoses.com/blog-article.php?bid=40 se você quiser configurar o IMAP e envie seus próprios headers personalizados, envie-os para o seu bounce@domain.com e, em seguida, cruze os dedos para ver se o script detecta os headers enviados no correio enviado. Eu tentei, funciona.

Mas se você quiser seguir minha solução rápida e fácil que resolveu meu problema, aqui está o segredo.

1 – Baixe a melhor versão do site KIDMOSES ou do meu site, apenas no caso de KIDMOSES querer se mudar para outro lugar http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip

2 – A variável que contém o texto da sua correspondência devolvida é de $ corpo e, por sua vez, contém o e-mail devolvido ruim (SO SEU UM ARRAY MULTIDIMENSIONAL). (Também contém o correio de seus servidores e outros itens de DNS mails, mas estamos procurando o MAU MAIL REALIZADO.

3 – Como o seu PRÓPRIO SERVIÇO está enviando de volta o e-mail rejeitado, não é provável que ele mude seu formato e headers próprios, enviando e-mails rejeitados, para que você escolha a ordem da matriz de e-mails devolvida. No meu caso sempre foi o mesmo modelo de formato. (A menos que você altere sistemas ou provedores)

4 – Examinamos esse $ corpo e procure por todas as variables ​​de string de e-mail e extraie-os posicionando-os em uma matriz bidimensional chamada $ matches

5 – Selecionamos a posição da matriz, imprimindo a matriz usando print_r (array_values ​​($ matches));

6 – Este é o código que você precisa modificar. Está em torno da linha 500 do arquivo 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 "".$matches[0][0]."
"; break;

Então, nos esquecemos dos headers devolvidos e nos concentramos nos e-mails ruins. Você pode destacá-los, você pode MySQL, ou processar o que quiser.

IMPORTANTE Comente os ecos em callback_echo.php no diretório de amostras, caso contrário você obtém todo o lixo antes de ser impresso.

 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 "
".$msgnum . ': ' . $rule_no . ' | ' . $rule_cat . ' | ' . $bounce_type . ' | ' . $remove . ' | ' . $email . ' | ' . $subject . ' | '; //echo 'Custom Header: ' . $cheader . " | "; //echo 'Bounce Message: ' . $rule_msg . " | "; return true; }

MINHA SAÍDA

 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