Come avere la mia posta PHP?


Risposte:


51

Dal manuale di posta di php:

Requisiti

Per rendere disponibili le funzioni di posta, PHP richiede un sistema di posta elettronica installato e funzionante. Il programma da utilizzare è definito dalle impostazioni di configurazione nel file php.ini.

Questo significa che devi installare una sorta di mailserver e configurare php per usarlo. Di solito questo mailserver è postfix in Ubuntu. Tuttavia - se il lato php che stai codificando alla fine verrà memorizzato sul lato di un servizio di hosting (ad esempio xmission), molto probabilmente un server di posta sarà già installato lì. In tal caso, prova il tuo sito online anziché a livello locale.

Se hai bisogno di testarlo sul tuo sistema o intendi ospitarlo sul tuo server di casa, procedi con:

Installazione di Postfix

Installazione: postfix Installa 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 : un provider di posta esterno (ad esempio Google) verrà utilizzato per inviare e ricevere posta. Il server non riceverà alcuna posta.
  • Smarthost : miscela tra i due. La posta viene archiviata localmente ma inviata tramite un provider di posta esterno.
  • Solo locale : non ti riguarda. Questo è un server di posta interno di sistema. È possibile inviare messaggi di posta elettronica da un utente all'altro sul sistema.

Le altre opzioni di installazione dipendono 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 i tuoi provider smtp. Il resto delle opzioni è autoesplicativo.

Configurazione post installazione

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

  • Installa libsasl2-modules Installa libsasl2-modules e sasl2-bin Installa sasl2-bin facendo clic sulle icone di Software Center o dal terminale usando:

    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_passwordcon una linea come:

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
    

    Sostituire 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 aggirare il 'permesso negato' bug da chown postfix:postfix /etc/postfixanticipo.

Questo dovrebbe farlo nella maggior parte dei casi. Tuttavia, alcuni provider smtp richiedono un indirizzo specifico come mittente o crittografia.

Correlati: l' interfaccia PEAR :: Mail potrebbe anche interessarti.

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

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


Invio di posta da Ubuntu (locale) funziona. Ma cosa succede se voglio che Windows usi questa macchina per inviare posta (anche PHP)? Come lo configuro?
JM at Work,

Non sono sicuro di avere la domanda. Puoi levigare dalla tua macchina Ubuntu. Ora quello che vuoi fare è inviare mal tramite quella macchina Ubuntu dal tuo PC Windows tramite php? È corretto?
con-f-use

2
Ora il pacchetto libsasl2 non esiste. Sto usando 11.04. Il suo libsasl2-2 come da pacchetto aggiornato ..
mythicalcoder

61

Come già notato, postfix sarebbe eccessivo se hai solo bisogno di inviare e-mail da php durante lo sviluppo di applicazioni sul tuo computer di casa.

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

sudo apt-get install ssmtp

Quindi modifica il /etc/ssmtp/ssmtp.conffile, 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. Naturalmente puoi utilizzare qualsiasi altro server SMTP).

Ora assicurati che il tuo php.ini sia corretto sendmail_path. Dovrebbe essere letto come:

sendmail_path = /usr/sbin/sendmail -t

( Dai commenti di @ dima-le @ omar-sabic : non è necessario specificare ssmtpqui perché l'installazione dovrebbe aver creato un collegamento simbolico per /usr/sbin/sendmail, che punta correttamente a ssmtp. Altrimenti è necessario specificare sendmail_path = /usr/sbin/ssmtp -t)

Ricarica apache e il tuo php dovrebbe essere in grado di inviare e-mail in uscita ora.


3
Penso che volevi dire sendmail_path = /usr/sbin/ssmtp -t. Questo ha funzionato, grazie
Omer Sabic il

1
ssmtp dovrebbe creare un collegamento simbolico per /usr/sbin/sendmail, che punta correttamente a ssmtp. Quindi, anche l'uso sendmail_path = /usr/sbin/sendmail -tdovrebbe funzionare
Dima L.

2
Altre informazioni sulla configurazione ssmtp(trovate alcune note utili): Come configurare la posta PHP in Debian - questa domanda + questo link ha aiutato a configurare il programma.
gskema,

1
Per gmail, considera che devi configurare il tuo account google per consentire alle "app non sicure" di funzionare. Consulta support.google.com/accounts/answer/6010255
aesede

1
Ho anche dovuto aggiungere la seguente riga: FromLineOverride=YESper evitare il seguente errore:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons,

29

PHP richiede che un client SMTP invii posta. È possibile installare un agente di trasferimento di posta (MTA) completo come Postfix per svolgere questa funzione, ma è eccessivo se è necessario solo 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 <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

Devi sostituire i dati di configurazione rappresentati da tutto in "<" e ">" (inclusi, rimuovili). Per host / nome utente / password, utilizzare le normali credenziali per l'invio di posta tramite il proprio provider di posta.

Di 'a PHP di usarlo

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

Aggiungi questa riga singola:

sendmail_path = /usr/bin/msmtp -t

Ovviamente, "sudo vi /etc/php5/conf.d" senza php.ini non funzionerà. Nel mio caso (Ubuntu), ho dovuto modificare '/etc/php5/apache2/php.ini' e anche riavviare apache 'sudo /etc/init.d/apache2 ricaricare' affinché funzioni.
Dejan,

1
A proposito, puoi testare la tua configurazione msmtprc usando:cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Dejan l'

Sarebbe bello, ma non funziona per me. Non appare nulla nel suo registro. Sembra totalmente a posto, ma senza dadi.
James T Snell,

2
Per rendere msmtp disponibile a livello di sistema, installare "msmtp-mta".
colan,

1
Nel caso in cui tu sia troppo letterale come me nelle seguenti istruzioni, in realtà non mantieni le parentesi <> nel file di configurazione. Mi ci sono voluti 20 minuti buoni per capirlo
de Raad il

4

Dovrebbe essere una soluzione semplice. Devi solo installare Postfix che esegue l'emailing reale.

sudo apt-get install postfix

Vuoi eseguirlo da un terminale (e non dal centro software) perché deve farti alcune domande sulla configurazione. Dovresti trovare solo per accettare tutte le impostazioni predefinite (solo locale, ecc.).


2

Questa è una vecchia domanda e ci sono risposte degne sopra, ma avevo bisogno eximper 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 l'essenza è:

apt-get install exim4-daemon-light mailutils

seguito da:

dpkg-reconfigure exim4-config

che ti porterà a un editor interattivo.


1

Ottima risposta , con-f-use.

Ho una cosa da aggiungere sull'account fittizio Gmail:

Questo è altamente raccomandato perché devi configurare il tuo account Gmail per consentire applicazioni meno sicure: https://www.google.com/settings/u/0/security/lesssecureapps Altrimenti otterrai un "per favore accedi usando il tuo browser web e quindi riprovare "errore nel /var/log/mail.logfile.

ho anche riscontrato che ricevo un errore di timeout a meno che non invii smtp di gmail al mio certificato di root. Per farlo:

sudo nano /etc/postfix/main.cf

aggiungi quanto segue in fondo al file

smtp_tls_CAfile = /etc/postfix/cacert.pem

Quindi copia il certificato root thawte nel cacert.pemfile:

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

Spero che questo salvi qualcuno alcuni follicoli piliferi ...


0

Ho trovato che le soluzioni fornite da Dima L. sono il modo più semplice e leggero per il sistema.

Solo qualche aggiunta per maggiore chiarezza sull'impostazione. Dovresti commentare hostnamenel /etc/ssmtp/ssmtp.conffile. Il ssmtp.conffile di esempio è 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
AuthUser=mail@yourdomain.com
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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.