php mail() non funziona su Windows 2003, IIS SMTP
Domanda
mi viene questo problema:
PHP Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for chris.mahan@gmail.com in c:\inetpub\wwwroot\mailtest.php on line 12
da questo script:
<?php
$to = "chris.mahan@gmail.com";
$subject = "test";
$body = "this is a test";
if (mail($to, $subject, $body)){
echo "mail sent";
}
else {
echo "problem";
}
?>
sezione da php.ini sul server:
[mail function]
; For Win32 only.
SMTP = server.domain.com; for Win32 only
smtp_port = 25
; For Win32 only.
sendmail_from = support@domain.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
(nota che "server" e "dominio" si riferiscono accuratamente al server e al nome di dominio effettivi)
In IIS, SMTP è in esecuzione.Sotto "Access"
scheda, "Relay"
pulsante , l'opzione Seleziona quali computer possono eseguire l'inoltro tramite questo server virtuale è impostata su checkbox "only the list below"
e sulla lista c'è "127.0.0.1(xxx.xxx.xxx.xxx)" (x's representing actual server IP address).
Il server è in esecuzione Windows Server 2003 Service Pack 2
, completamente aggiornato a partire dalle 17:00 del 1° settembre 2008.Presumo che sia in funzione IIS7
(come controllare?).
Qualche idea?
In risposta a Espo:Questa macchina è ospitata in un data center.Non vogliamo utilizzare un account Gmail (lo stiamo facendo, vogliamo allontanarcene).Windows Server 2003 viene fornito con il proprio server SMTP.
Aggiornamento:Secondo il consiglio di Yaakov Ellis, ho eliminato tutte le restrizioni di inoltro e ho aggiunto l'IP del server all'elenco consentito (utilizzando il pulsante DNS inverso fornito) e la cosa ha iniziato a funzionare.
Grazie sia a Espo che a Yaakov per avermi aiutato.
Soluzione
Prova a rimuovere le restrizioni IP per l'inoltro nel server SMTP e ad aprirlo a tutti gli inoltri.Se funziona quando è impostato, allora sai che il problema ha a che fare con le restrizioni originali.In questo caso, potrebbe trattarsi di un problema DNS o forse è stato elencato l'indirizzo IP sbagliato.
Altri suggerimenti
Stai utilizzando il server SMTP sbagliato.Se intendi inviare e-mail solo al tuo account Gmail, dai un'occhiata alla mia risposta Qui.
Se devi inviare e-mail anche ad altri account, chiedi al tuo ISP i dettagli SMTP.
MODIFICARE:Penso che sia sempre meglio usare il server SMTP dell'ISP poiché (dovrebbero) avere persone che monitorano le code di posta, controllano gli exploit e aggiornano il software di posta.Se la tua azienda sviluppa applicazioni web, è quasi sempre meglio restare fedele a ciò che fai e lasciare che siano altri a fare il loro lavoro (ad esempio, gestire i server di posta).
Se per qualche motivo desideri ancora utilizzare il tuo server SMTP locale, la prima cosa sarebbe escludere la parte php.Prova a seguire KB153119 e quindi controlla la presenza di errori nel registro SMTPServer IIS.
EDIT2:L'articolo della Knowledge Base dice che è per Exchange, ma gli stessi comandi vengono utilizzati anche per altri server SMTP (incluso IIS), quindi prova a vedere se riesci a inviare messaggi di posta utilizzando gli esempi dell'articolo.
@Espo:Lo farò con riferimento a KB153119.Grazie.
Informazioni sul server di posta:Ti sento.
Aggiornerò quando scoprirò di più.
@Espo, l'articolo in questione si riferisce ai server Exchange, non al server SMTP IIS7.0.
Dal riassunto:In questo articolo viene descritto come eseguire il Telnet sulla porta 25 su un computer che esegue servizi SMTP (Simple Mail Transfer Protocol) per risolvere i problemi di comunicazione SMTP.Le informazioni contenute in questo articolo, inclusi i messaggi di errore, si applicano solo ai problemi quando si tenta di risolvere i problemi di comunicazione SMTP con server basati su Microsoft Exchange e non sono destinate a scopi generali di risoluzione dei problemi.
Ho avuto lo stesso problema, php 5 su iis6, server 2003.Php falliva sempre quando tentava di usare mail().Sono riuscito a farlo accettare la posta da php modificando le restrizioni di inoltro da "Solo l'elenco seguente" (che è vuoto per impostazione predefinita) a "Tutto tranne l'elenco seguente".Le restrizioni di inoltro sono reperibili nella scheda Accesso nelle schermate delle proprietà dei server SMTP.Ovviamente se il server è aperto a Internet allora bisognerebbe essere più sensibili riguardo a queste restrizioni di inoltro, ma nel mio caso si tratta di un server virtuale su un box di sviluppo.
Spero possa aiutare.