2011-12-05 14 views
5

Sto inviando mail da posta php(): e voglio ricevere un messaggio fallito se l'invio non è riuscito alla destinazione.come sapere se la posta php è fallita

$to = '[email protected]'; 
    $email_from = "[email protected]"; 

    $full_name = 'XXXX'; 
    $from_mail = $full_name.'<'.$email_from.'>'; 



    $subject = "testing sender name"; 
    $message = ""; 
    $message .= ' 
      <p><strong>This is only a test mail. Please do not reply.</strong><br /> 
    '; 
    $from = $from_mail; 

    //$headers = "" . 
    //   "Reply-To:" . $from . "\r\n" . 
    //   "X-Mailer: PHP/" . phpversion(); 

    $headers = "From:" . $from_mail . "\r\n" . 
       "Reply-To:" . $from_mail . "\r\n" . 
       "X-Mailer: PHP/" . phpversion(); 


    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";   

    if(!mail($to,$subject,$message,$headers)) 
    { 
     echo 'failed !!'; 
    } 

Ma anche se $to posta non fa esiste, non sta mostrando failed !!

+0

Se le intestazioni Da e Rispondi a sono impostate, tutto ciò che si può veramente sperare è ricevere i rimbalzi su quell'indirizzo. C'è anche un'intestazione separata "Rimbalzi: A:" che può essere specificata. –

+0

Questo perché dopo che PHP ha consegnato il messaggio al server SMTP da consegnare, non può conoscere direttamente il successo o il fallimento della consegna. Il server SMTP non recapiterà necessariamente il messaggio immediatamente. Puoi solo aspettare i rimbalzi. –

+0

Quindi praticamente non c'è modo di sapere se il messaggio per posta è fallito o ha avuto successo? – AssamGuy

risposta

3

Penso che quello che vuoi è controllare una vera e-mail non solo una e-mail formattata valida. Quindi ti suggerisco di dare un'occhiata a questo blog

+0

sì SeRPRo, esattamente. Controllerò il blog ora. Grazie – AssamGuy

+0

@AssamGuoi prego :) – SERPRO

1

Ma anche se $ per posta non fa esiste, non sta mostrando fallito !!

in realtà il fatto che la posta viene consegnata al server SMTP, non significa che verrà consegnata all'utente finale. In PHP non esiste un modo semplice per verificare se è stato consegnato.

5

Il metodo di posta sta semplicemente inviando la posta. Se non riceve errori (ad esempio non trovando il server, ecc.), Verrà restituito correttamente. Non sarà in grado di sapere se la posta effettivamente sbarcati nella casella di posta del destinatario a meno che non si crea un codice intorno rimbalzato e-mail ecc

3

controllo il ritorno dal di mail

Restituisce TRUE se la mail è stata accettato con successo per la consegna, FALSE in caso contrario.

È importante notare che solo perché la posta è stata accettata per la consegna , NON significa che la posta raggiungerà effettivamente la destinazione prevista .

Anche se il fatto che sta tornando vero probabilmente significa che il vostro programma di posta elettronica è di accettare il messaggio, ma poi non riuscendo quando si tenta di inviare a nessuno ...

È necessario eseguire il $to attraverso un validatore per controlla un indirizzo valido e poi genera un errore se non lo è, non fare affidamento su mail() per filtrare cose che già sai essere sbagliate, o puoi controllare facilmente.

--update

Poi controllare @SeRPRo, ma ciò che il vostro cercando di fare è un lavoro duro per testare programatically - la sua molto più facile e più affidabile per inviare una e-mail, che richiede all'utente di cliccare su un link per verificare che è reale di provare a interrogare i server SMTP che hanno tutti un comportamento diverso (leggi: sono suddivisi in gradi diversi). Si noti inoltre che il comportamento previsto (codice saggio) è difficile da distinguere da uno spammer, quindi non sorprenderti nel trovarlo difficile se si evita la verifica del percorso e-mail.

+0

ma, come nel caso precedente, "$ to' è un indirizzo email valido ma non esiste. Quindi non riuscirò a trovare se la posta a $ to è fallita? – AssamGuy

0

Puoi autenticarti come un modo per testare che sta uscendo dalla posta in uscita.

+0

Non ho capito ... puoi spiegare un po ' – AssamGuy

0

Nel mio caso è stato utile impostare il percorso di ritorno tramite il parametro della riga di comando "-f", che può essere passato nel parametro $ additional_parameters di mail(). quindi chiamo

mail($to, $subject, $message, $headers, "-f [email protected]"); 

...secondo alcuni commenti su http://www.php.net/manual/en/function.mail.php gli host-inversioni reagiscono in modo diverso e hanno restrizioni diverse (l'indirizzo potrebbe dover essere registrato nello stesso account di hosting o essere sullo stesso dominio, lo stesso di "Da:" nella heade ... e così via)

La pagina in cui ho ottenuto i rimbalzi da ricevere (con non delle restrizioni di cui, a quanto pare) è ospitato presso Domainfactory http://www.df.eu

0

Usa phpmailer per inviare e-mail e impostare $ mail-> AddCustomHeader ('Return-path: [email protected]'); Questo invierà email di rimbalzo su [email protected] se l'ID della posta del destinatario non esiste o il destinatario non riceve email da nessun altro caso.

Problemi correlati