2013-02-14 14 views
7

Potrebbe essere una domanda stupida, ma non riesco a trovare il motivo per cui la funzione di posta php non funziona Ho un server nginx su debian squeeze, mi sono spostato su di esso recentemente. Ho provato l'esecuzione semplice della posta ma restituisce falso.mail() non funziona sul nuovo server

if(mail('[email protected]', 'test-subject', 'test-text-blablabla')) 
    echo 'ok'; 
else 
    echo 'bad'; 

Cosa posso fare con esso?

Grazie.

mia sezione elettronica di php.ini:

[mail function] 
; For Win32 only. 
; http://php.net/smtp 
SMTP = localhost 
; http://php.net/smtp-port 
smtp_port = 25 

; For Win32 only. 
; http://php.net/sendmail-from 
;sendmail_from = [email protected] 

; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 
; http://php.net/sendmail-path 
;sendmail_path = 

; Force the addition of the specified parameters to be passed as extra parameters 
; to the sendmail binary. These parameters will always replace the value of 
; the 5th parameter to mail(), even in safe mode. 
;mail.force_extra_parameters = 

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename 
mail.add_x_header = On 

; The path to a log file that will log all mail() calls. Log entries include 
; the full path of the script, line number, To address and headers. 
;mail.log = 
+6

Avete controllato il registro degli errori? – zerkms

+1

puoi inviare email a riga di comando? –

+0

@Dagon come posso farlo? –

risposta

23

Va bene, l'ho fatta. Come ho fatto per Debian Squeeze con il server nginx: (tutti i comandi che vengono eseguiti da root)

Prima di tutto è necessario installare sendmail

apt-get install sendmail 

successivo, è necessario configurare il file che era più facile che ho pensato

sendmailconfig 

va bene, il prossimo passo che faccio è una configurazione php.ini (io non sono un grande amministratore, io sono un principiante, quindi non so è necessario o no.)

I set

sendmail_path= /usr/sbin/sendmail -t -i 

Va bene, da questo momento, in teoria, è possibile inviare e-mail, ma per il mio caso ha portato a 504 gateway HTTP errore di timeout. Ma come ho trovato molto più tardi l'e-mail è già arrivata alla casella di posta elettronica. Quindi, il mio file php di prova è:

<?php 
    mail('[email protected]', 'test', 'you done that'); 
    echo 'ok'; // I use this to check that script is end the execution 
?> 

Questo è abbastanza chiaro.

Il problema successivo è 504 errore. Vado ai file di registro

nano /var/log/mail.log 

e qui ho trovato questo errore (che non l'unico errore, ma che si è responsabili per 504 errore):

sm-msp-queue[***]: My unqualified host name (myhostname) unknown; sleeping for retry 

Poi, per trovare come mi può risolvere questo problema: http://forums.fedoraforum.org/archive/index.php/t-85365.html ultimo commento su quella pagina.

o in un altro le parole che ho fatto questo:

nano /etc/hosts 

e in quel file modificare l'ordine dei padroni di casa

127.0.0.1 my_ip localhost myhostname 

Salva, fatto. apri il tuo file php di test, non c'è nessun errore 504 e le email sono entrate per email che menzioni nella funzione mail. Come ho detto, sono un novizio e potrebbe non funzionare per voi, ma comunque funziona per me. Questa non è la configurazione finale, ovviamente. Spero che tu lo trovi utile

+0

se c'è un uomo molto esperto in questo, sarò molto grato se tu puoi aggiungere qualche consiglio qui. –

+3

Ho dovuto eseguire 'apt-get install sendmail-bin' e quindi,' apt-get install sendmail'. Quindi, ho provato a inviare una e-mail e ha funzionato. Non ho apportato modifiche a php.ini. –

+0

@AlminoMelo un po 'in ritardo risposta, ma penso che quelle modifiche php.ini potrebbero influenzare i filtri di spam dei servizi di posta in un buon modo. (Non sono sicuro). So per certo che a volte le mie e-mail arrivano alla cartella spam, e questo a causa di una configurazione e-mail imperfetta più problemi di impostazioni e-mail DNS. –

Problemi correlati