2009-06-18 38 views
28

Ecco il mio scenario:Gestione della posta di rimbalzo con PHP?

Ho 2 account di posta elettronica: [email protected] e [email protected]

Voglio inviare e-mail a tutti i miei utenti con [email protected] ma poi "rispondi a" [email protected] (fino a qui, il mio script PHP può gestirlo).

Quando, l'e-mail non può essere inviato, viene inviata al [email protected], il messaggio di errore potrebbe essere 553 (e-mail inesistente ...) ecc

La mia domanda è: Come faccio indirizzare tutte le e-mail di rimbalzo (e-mail non inviate) a [email protected] attraverso uno script di gestione per verificare i codici di errore di rimbalzo?

Quale linguaggio di programmazione devo utilizzare per lo "script di gestione"?

Come apparirebbe lo "script di gestione"? Puoi dare un campione?

in altre parole:

Quali sono le procedure devo seguire per gestire l'e-mail di rimbalzo?

risposta

7

Perché non creare un indirizzo di [email protected] e utilizzare php su read those emails e fare ciò che vuoi?

Modifica Dopo il tuo commento: Si prega di chec il mio collegamento che ha uno script php che ti insegnerà come aprire e casella di posta elettronica utilizzando php e leggere le e-mail. Puoi utilizzare questo script per controllare i messaggi di errore.

+0

u dire, creo una directory, memorizzare tutte le email per [email protected] Quindi, scrivi uno script php, controlla quella cartella periodicamente e controlla il codice di errore? –

+0

no ... crea un nuovo ID [email protected] Fornisci i dettagli dell'email allo script php e fallo eseguire periodicamente usando un cron. PHP può essere utilizzato per aprire account pop 3 (controlla il codice sopra). Non è necessario memorizzare le email. La tua sceneggiatura dovrebbe attivare in modo automatico la casella di posta e elaborare nuove email. – Shoban

+0

Questo è il motivo per cui ho bisogno di una procedura, sono totalmente nuovo per gestire questa email di rimbalzo. Non riesco nemmeno da dove cominciare, come "fornire i dettagli della posta elettronica allo script php"? Ho bisogno di aiuto ... aiuto ... io ... –

2

Se è stata impostata una casella postale POP3 per [email protected], è possibile utilizzare uno script client POP3 scritto in PHP per recuperare i messaggi e controllare i messaggi non recapitabili.

+0

Sory, questo è fuori dalla mia opzione .. non so da dove cominciare .. –

5

Lascia che le email rimbalzino su un indirizzo che è in realtà un indirizzo email (con i dettagli di accesso ecc.).

Creare uno script php che esegua sempre x minuti (ad esempio con un cron job). Questo script php deve fare quanto segue. - Recupera tutte le email dalla casella (utilizzare ad esempio Zend Mail) - Verifica l'errore nel messaggio (ad esempio effettuando una ricerca con le espressioni regolari) - Esegui quanto è necessario.

Se si desidera sapere in modo specifico chi è tornato indietro è possibile utilizzare gli indirizzi di rimbalzo specifici dell'utente. (Vedi ad esempio this site)

+0

Il link di ** Zend Mail ** è rotto, ecco un nuovo link http://framework.zend.com/manual/current/en/modules/zend.mail.introduction.html – Jaider

29

Lo scenario migliore è essere in grado di classificare il tipo di rimbalzo: morbido, duro ...

ciò che usiamo è BounceStudio. Hai bisogno di compilarlo e aggiungere le librerie php ... non è affatto difficile. Hai la versione gratuita ea pagamento di tale prodotto

una volta si rileva la kind of bounce usiamo PEAR :: :: POSTA MIME per cercare le intestazioni personalizzate che abbiamo aggiunto in precedenza per l'e-mail, consente di dire:

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

in questo modo possiamo conoscere il vero destinatario a cui abbiamo inviato l'email.

spero che questo ti aiuti!quindi puoi aiutarmi a raggiungere i 500 punti: P

+1

Felice di vederti raggiunto 500 :) –

+0

Sembra che non abbiano più una versione gratuita. – Bot

+0

hanno la versione di prova gratuita: http://www.boogietools.com/Products/Linux/ –

0

Dovresti dare un'occhiata a SwiftMailer. È completamente scritto in PHP e supporta le e-mail "rimbalzate". http://swiftmailer.org/

+1

Swift Mailer può ottenere solo lo stato di invio SMTP, ma non può ottenere la risposta della risposta del server del destinatario. – Raptor

+1

Per la lettura di bounce con php prova PHPMailer-BMH (Bounce Mail Handler) - http://phpmailer.worxware.com/index.php?pg=bmh È un po 'obsoleto, ma potrebbe aiutarti a fare cose di base . Per l'elaborazione avanzata dei bounce, raccomando anche BounceStudio. – seven

4

Forse è un po 'tardi per la risposta, ma si può sempre provare qualcosa di nuovo. ho avuto la settimana scorsa un compito come questo, e utilizzati BOUNCE HANDLER Class, da Chris Fortuna, che sminuzza il rimbalzo in array associativi - http://www.phpclasses.org/browse/file/11665.html

verrà utilizzato dopo la connessione a POP3 con qualche mailer per ottenere il rimbalza da esso, quindi lo analizza in pezzi con questo, e se ha lo stato che hai cercato, fai le azioni necessarie.

Cheers.

0

È possibile utilizzare sempre qualcosa come http://cloudmailin.com per inoltrare le e-mail rimbalzate sul proprio server php via http, tuttavia potrebbe essere meglio con un servizio dedicato all'invio di e-mail e utilizzando la propria api per recuperare i dettagli di rimbalzo.

0

ero alla ricerca di una risposta alla stessa domanda. Ci sono più parti della domanda e più opzioni.

Per gestire l'e-mail rimbalzata, ho trovato un PHP class, puramente in PHP, non è necessaria alcuna installazione software aggiuntiva o aggiuntiva se si dispone di un sito con PHP. È molto facile da usare

Se si utilizza cPanel o InterWorx/SiteWorx, è possibile configurare alcuni degli indirizzi per gestire le e-mail ricevute con uno script, ad esempio uno script PHP, in modo da poter scrivere la propria gestione con l'ausilio di la classe citata. Ovviamente è ancora possibile creare account e-mail ordinari e recuperare i messaggi tramite POP3 o IMAP e quindi interpretarli. Penso che il primo sia migliore, perché è diretto, non devi usare canali aggiuntivi, come IMAP. Naturalmente se non puoi configurare il tuo server di posta, o non sai come farlo, allora il primo è meglio per te.

Buona fortuna! :)

0

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

si utilizza il quinto parametro e aggiungere "-f" ad esso.

Quindi, si usa "-f [email protected]" come parametro

il phpList newsletter manager utilizza questo per gestire rimbalzi.

Una volta che i rimbalzi si riempiono nella casella di posta, è possibile eseguirne il POP e elaborarli. Questo è il modo più semplice per affrontarli, invece di gestirli quando arrivano.

0

Ecco una soluzione in scatola per elaborare i rimbalzi utilizzando IMAP.

Ho modificato l'intestazione Return-Path dell'istanza Mail in un rimbalzo dedicato @ xxxxxx.us

L'unico metodo abbastanza semplice per me da considerare valido è il seguente, che controlla tramite POP3 la casella di posta in arrivo dedicata e può gestire ogni e-mail in base al messaggio ricevuto.

$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)); 
} 
0

Utilizziamo Procmail per filtrare questo tipo di messaggi. Dopo aver esaminato alcune delle soluzioni già citate qui, abbiamo finito con una semplice ricetta Procmail per rilevare i messaggi di rimbalzo. A seconda della precisione di cui hai bisogno, questo potrebbe essere applicabile alla tua situazione.

Per i dettagli, controllare questo blog entry.

0

Ho avuto lo stesso problema, la situazione esatta. Per impostazione predefinita, il mio server di posta invia tutti i miei messaggi restituiti allo stesso account da cui era stato originariamente inviato, con messaggio automatico "Consegna non riuscita: restituzione del messaggio al mittente".

Non voglio davvero sapere perché è stato restituito, ha avuto così tante transazioni di posta che voglio solo rimuovere quelle cattive. Non avere il tempo di controllare regole specifiche come Doestn Exist, Unavailable, etc ,,, Voglio solo contrassegnare per la cancellazione e andare avanti.

I messaggi di rimbalzo sono così banali quanto è necessario gestire un sacco di diversi tipi di server e di risposte. Ogni scenario di software antispam o sistema operativo può inviare un codice di errore diverso con l'e-mail respinta.

vi raccomando di leggere e scaricare questa versione fissa debug di Handling Bounced Email - UTILIZZO PHPMailer-BMH E AUTHSMTP da KIDMOSES qui http://www.kidmoses.com/blog-article.php?bid=40 se si desidera impostare IMAP e gruppo e inviare intestazioni personalizzate, inviarli al proprio [email protected] e poi incrocia le dita per vedere se lo script cattura le intestazioni che hai inviato scritte nella mail rimbalzata. L'ho provato, funziona.

Ma se si desidera seguire la mia soluzione rapida e semplice che ha risolto il mio problema, ecco il segreto.

1 - Scarica la versione migliore dal sito KIDMOSES o dal mio sito, nel caso in cui KIDMOSES desidera spostare da qualche altra parte http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip

2 - La variabile che contiene il testo della vostra posta restituita è di $ corpo e si contiene l'email restituita male (QUANTO È UN ARRAY MULTIDIMENSIONALE). (Contiene anche la posta del server e altri messaggi DNS, ma stiamo cercando la BAD MAIL BOUNCED

3 - Dal momento che il PROPRIO SERVIZIO ti restituisce l'e-mail rimbalzata, non è probabile che cambi il suo formato e intestazioni, rimandando le e-mail rimbalzate, in modo da poter scegliere l'ordine di restituzione dell'array di posta elettronica restituito Nel mio caso era sempre lo stesso modello di formato. (A meno che non cambi sistemi o provider)

4 - Diamo un'occhiata a quello $ body e cerca tutte le variabili stringa email e le estrae posizionandole in un array bidimensionale chiamato $ partite

5 - Selezioniamo la posizione dell'array, stampando l'array usando print_r (array_values ​​($ corrisponde));

6 - Questo è il codice che è necessario modificare. La sua linea 500 da class.phpmailer-bmh.php file di

// 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; 

Così ci dimentichiamo di intestazioni restituite e concentrarsi sul cattivi messaggi di posta elettronica. Puoi eccellerli, puoi applicarli a MySQL o elaborare qualsiasi cosa tu voglia fare.

IMPORTANTI commento delle echi in callback_echo.php nella directory campioni altrimenti si ottiene tutta la spazzatura prima di stampare.

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; 
} 

mia uscita

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 
+0

D'altra parte, se preferisci acquistare un software che @Jason ha menzionato, funziona anche piuttosto bene, appena controllato e fornisci tutti i tipi di motivi esatti per cui la tua posta è rimbalzata. Grazie Jason: http://www.maxprog.com/site/software/internet-marketing/email-bounce-handler_sheet_us.php –

Problemi correlati