Domanda

Questa domanda ha già una risposta qui:

Come posso verificare un problema con la posta inviata sul mio server?eseguo un semplice test:

if(mail($to, $subject, $message)) {
echo 'Mail Sent';
}

quale il test restituisce il testo;ma non arriva mai la posta.

Come posso procedere per rintracciare il problema?

È stato utile?

Soluzione

Questa è piuttosto una lunga storia. Alcuni punti di pallottola (supponendo che la posta () restituisce vero e non ci sono errori nel log degli errori):

  • Fa l'indirizzo del mittente ( "Da") appartiene a un dominio sul vostro server? In caso contrario, renderla tale.
  • è il server su una lista nera (per esempio controllare IP su spamhaus.org)? Questa è una possibilità remota con hosting condiviso.
  • sono poste filtrati da un filtro spam? Aprire un conto con un freemailer che ha una cartella spam e scoprire. Inoltre, provare a inviare la posta a un indirizzo senza un filtro anti-spam.
  • Avete forse bisogno il parametro quinta "-f" di mail () per aggiungere un indirizzo del mittente? (Vedere mail () comando nel manuale di PHP)
  • Se si ha accesso ai file di log, controllare quelli, naturalmente, come suggerito sopra.
  • si fa a controllare il "da:" l'indirizzo per eventuali mail di rimbalzo ( "restituito al mittente")? È anche possibile impostare un "errori-to" separati indirizzo.

Per gli altoparlanti tedeschi, ho scritto un bel esaustivo "che cosa fare" su questo tema qualche tempo fa. Vedere qui .

Altri suggerimenti

A seguito di Myles, se siete su una macchina Linux, farlo da riga di comando:

# echo “Body text.” | mail -s “Hello world” you@example.com

Se non si riceve che la posta elettronica, si ha un problema con il sistema di posta elettronica su quella scatola. Questa è una domanda diversa da quella domanda di PHP hai chiesto.

Dal manuale PHP:

Return Values

Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, **it 
does NOT mean the mail will actually reach the intended destination**.

Non sai come fare quel passo successivo, ma questo è un punto importante qui.

Se tutta la risoluzione dei problemi non riesce - ora supponendo che la posta () restituisce false per ragioni sconosciute - passare a uno script di mailing come PHPMailer che permette di bypassare mail () del tutto e collegare direttamente tramite SMTP, e offre una vasta modalità di debug. In questo modo, si dovrebbe essere in grado né di impostare una soluzione di lavoro o di trovare il nocciolo del problema.

Il primo posto mi piacerebbe iniziare è il log degli errori di PHP, quindi il registro sendmail. Anche provare sendmail dalla riga di comando e controllare la configurazione di PHP per assicurarsi che sia installato correttamente per l'invio di posta elettronica.

Stai lavorando su un server web live qui o qualcosa di più simile a un sandbox di sviluppo personale?(Cioè, il tuo computer di casa?) Se è quest'ultimo, posso dirti che ho avuto molti problemi in passato con il mio ISP (Cox) che filtrava le porte della posta in uscita.(Ti diranno che non lo fanno, ma io lo faccio certo loro fanno.)

Ho anche ricevuto alcuni messaggi in uscita che fatto riuscire a superare il problema e rimanere intrappolato nella bobina della posta di Cox per giorni prima che mi venissero consegnati.

Spero che sia utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top