Come avere il mio PHP Invia mail?

68

Ho installato Ubuntu 11.04, LAMP usando tasksel.

Trovo che PHP mail() non funzioni.

Suppongo di dover abilitarlo o qualcosa del genere? Come faccio?

    
posta JM at Work 08.06.2011 - 12:25

7 risposte

51

Dal manuale di posta di php:

  

Requisiti

     

Perché le funzioni di posta siano   disponibile, PHP richiede installato   e sistema di posta elettronica funzionante. Il programma   da utilizzare è definito dal   impostazioni di configurazione nel php.ini   file.

Questo significa che devi installare una sorta di server di posta e configurare php per usarlo. Di solito questo mail server è postfix in Ubuntu. Tuttavia, se il lato php che si sta codificando verrà infine archiviato sul lato di un servizio di hosting (ad esempio xmission), molto probabilmente sarà già installato lì un server di posta. In tal caso, basta testare il tuo sito online anziché localmente.

Se è necessario testarlo sul proprio sistema o significare ospitarlo sul proprio server di casa piuttosto che procedere con:

Installazione Postfix

Installazione: postfix / sudo apt-get install postfix Durante il processo ti verrà chiesto in quale modalità vuoi installare postfix. Esistono quattro modalità possibili:

  • Internet : il tuo server di posta.
  • Satellite : verrà utilizzato un provider di posta esterna (ad esempio Google) per l'invio e la ricezione della posta. Il server non riceverà alcuna posta.
  • Smarthost : mix tra i due. La posta viene memorizzata localmente ma inviata attraverso un provider di posta esterno.
  • Solo locale : non ti riguarderà. Questo è un mailserver interno al sistema. Puoi solo inviare messaggi da utente a utente sul sistema.

Il resto delle opzioni di installazione dipende dalla scelta di questa configurazione generale.

Molto probabilmente sceglierai un'installazione satellitare. Ciò significa che la posta verrà inviata utilizzando un provider esterno. Come smtp-server (server di posta in uscita) dovrai quindi specificare il tuo provider smtp. Il resto delle opzioni è auto esplicativo.

Configurazione post installazione

La maggior parte dei server smtp richiede un'autenticazione tramite password per inviare posta. Quindi postfix dovrà conoscere quella password. Inoltre ci sono cose come la crittografia da considerare (che dovrete google). Ecco come si configura postfix usando l'autenticazione password (sasl):

  • Installa libsasl2-modules < img src="https://i.stack.imgur.com/9SOjZ.png"> e sasl2-bin < img src="https://i.stack.imgur.com/9SOjZ.png"> facendo clic sulle icone di Software Center o dal terminale utilizzando:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Abilita sasl-auth aggiungendo queste righe a /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • Crea un file /etc/postfix/sasl_password con una riga come:

     smtp.gmail.com [email protected]:USERPASSWORD
    

    Sostituisci la password, il nome utente e l'indirizzo smtp effettivi.

  • Aggiorna postfix:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    Potrebbe essere necessario eludere 'permesso negato' bug di chown postfix:postfix /etc/postfix in anticipo.

Questo dovrebbe farlo nella maggior parte dei casi. Alcuni provider smtp richiedono tuttavia un indirizzo specifico come mittente o crittografia.

Correlati: l'interfaccia PEAR :: Mail potrebbe anche essere di tuo interesse.

Gmail (e forse altri servizi) potrebbe non piacere che tu stia tentando di inviare posta in questo modo in quanto potrebbe essere ritenuto insicuro dai loro standard, e bloccherebbe il tuo tentativo, cioè non accadrà nulla sullo schermo o in qualche parte dell'intero processo bloccherebbe la tua autenticazione. Anche il tuo POP3 deve essere abilitato.

Per contrastare che vedi qui. (Se vuoi essere sicuro, crea un account Gmail fittizio)

    
risposta data con-f-use 08.06.2011 - 13:33
58

Come già notato, postfix sarebbe un overkill se hai solo bisogno di inviare email da php mentre sviluppi applicazioni sul tuo computer di casa.

Personalmente uso un pacchetto ssmtp molto semplice e leggero. Userà qualsiasi server smtp per inviare e-mail in uscita. Installalo eseguendo:

sudo apt-get install ssmtp

Quindi modifica il file /etc/ssmtp/ssmtp.conf , commenta la linea mailhub esistente e aggiungi le seguenti righe (questo esempio è per il server smtp di gmail):

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Fornisci il nome utente e la password di Gmail. Ovviamente puoi utilizzare qualsiasi altro server SMTP).

Ora assicurati che php.ini abbia corretto sendmail_path . Dovrebbe essere come:

sendmail_path = /usr/sbin/sendmail -t

( Dai commenti di @ dima-l e @ omar-sabic : non devi specificare ssmtp qui perché l'installazione dovrebbe aver creato un link simbolico per /usr/sbin/sendmail , che punti correttamente a ssmtp . Altrimenti devi specificare sendmail_path = /usr/sbin/ssmtp -t )

Ricarica apache e il tuo php dovrebbe essere in grado di inviare email in uscita adesso.

    
risposta data Dima L. 29.10.2013 - 20:08
27

PHP richiede un client SMTP per inviare posta. Potresti installare un agente di trasferimento della posta (MTA) completo come Postfix per servire questo funzione, ma è eccessivo se hai solo bisogno di inviare posta tramite PHP. Invece, installa msmtp . È leggero e molto più semplice da configurare.

Installa msmtp

sudo apt-get install msmtp-mta ca-certificates

Configuralo

Crea un nuovo file di configurazione:

sudo vi /etc/msmtprc

... con le seguenti informazioni di configurazione:

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

Devi sostituire i dati di configurazione rappresentati da tutto in "& lt;" e "& gt;" (inclusi, rimuovi questi). Per host / nome utente / password, utilizza le tue normali credenziali per l'invio della posta tramite il tuo provider di posta.

Chiedi a PHP di usarlo

sudo vi /etc/php5/apache2/php.ini

Aggiungi questa singola riga:

sendmail_path = /usr/bin/msmtp -t
    
risposta data colan 29.04.2012 - 21:19
3

Dovrebbe essere una soluzione semplice. Hai solo bisogno di installare Postfix che fa il vero e-mail.

sudo apt-get install postfix

Si desidera eseguire ciò da un terminale (e non dal centro del software) perché è necessario farle alcune domande di installazione. Dovresti trovare di accettare solo tutti i valori di default (solo locali, ecc.)

    
risposta data Oli 08.06.2011 - 12:47
2

Questa è una vecchia domanda e ci sono risposte degne sopra, ma avevo bisogno di exim per il mio ambiente. Inoltre, conferma di aver installato sendmail in primo luogo ( $ which sendmail - dovrebbe restituire qualcosa come / usr / sbin / sendmail). Ho trovato una buona guida su linode.com , ma il gist is:

apt-get install exim4-daemon-light mailutils

seguito da:

dpkg-reconfigure exim4-config

che ti porterà a un editor interattivo.

    
risposta data vrobinson 30.04.2014 - 23:46
1

Ottima risposta , con-f-use.

Ho una cosa da aggiungere sull'account fittizio di Gmail:

Questo è altamente raccomandato perché devi configurare il tuo account Gmail per consentire applicazioni meno sicure: link In caso contrario, riceverai un messaggio di errore "accedi utilizzando il browser web e riprova" nel file /var/log/mail.log .

Inoltre ho scoperto che ricevo un errore di timeout a meno che non invii lo smtp gmail al mio certificato di root. Per fare ciò:

sudo nano /etc/postfix/main.cf

aggiungi quanto segue in fondo al file

smtp_tls_CAfile = /etc/postfix/cacert.pem

Quindi copia il certificato radice thawte nel file cacert.pem :

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Ecco il link che ho usato: Configura Postfix per usare Gmail SMTP su Ubuntu | EasyEngine

Speriamo che questo salvi qualcuno alcuni follicoli piliferi ...

    
risposta data deputy_D 25.05.2016 - 19:12
0

Ho trovato che le soluzioni fornite da Dima L. sono il modo più semplice & amp; leggero al sistema.

Solo alcune aggiunte per maggiore chiarezza sull'impostazione. Dovresti commentare hostname in /etc/ssmtp/ssmtp.conf file. Il file di esempio ssmtp.conf è il seguente:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
[email protected]
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
    
risposta data SD. 13.04.2018 - 08:33

Leggi altre domande sui tag