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
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? –
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
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 ... –