In PHP, abbiamo fondamentalmente 2 modi per inviare e-mail:
mail()
, che ha parecchie limitazioni,mail()
deve usare il server SMTP, che è un modo molto semplice per inviare posta attraverso il server SMTP.L'idea di usare questo è semplice: si chiama la funzione:
mail('jan@barasek.com', 'Oggetto', 'Il testo del messaggio...');
E PHP farà l'invio da solo.
Internamente, l'invio funziona leggendo la configurazione da php.ini
e cercando il server SMTP predefinito attraverso cui consegnare la posta. Quindi questo richiede una configurazione preliminare del server web.
La principale insidia della funzione mail()
è che il programmatore deve capire tutta la logica da solo. Questo implica, per esempio, buttare via le intestazioni sulla crittografia, collegare i certificati per crittografare i messaggi, e così via.
Nel caso di un fallimento dell'invio, viene restituito un valore falso
, che dobbiamo catturare ed elaborare noi stessi. Possiamo scoprire l'errore specifico in modo limitato chiamando error_get_last()
, così per esempio:
if (@mail($to, $subject, $message) === false) {throw new \Exception('Non può inviare posta:'. (@error_get_last()['messaggio'] ?? ''));}
TIP: Notate che non abbiamo specificato l'indirizzo da cui vogliamo inviare la posta e la codifica da usare.
Tutte queste impostazioni devono essere passate attraverso le intestazioni.
Se hai ancora bisogno di usare la funzione mail()
(per esempio, a causa dell'hosting), ti consiglio di usare il pacchetto nette/mail
e il servizio SendmailMailer
, che gestisce bene l'invio della posta.
SMTP sta per Simple Mail Transfer Protocol
, che (come vedrete presto) è molto vero.
SMTP, a differenza di mail()
, è un protocollo più avanzato con opzioni di configurazione avanzate non solo dal lato PHP, ma anche direttamente sul server di posta.
Il supporto SMTP sugli host è eccellente nel 2018.
SMTP funziona fondamentalmente con PHP che prima stabilisce una connessione al server SMTP (richiede l'estensione php_openssl.dll
in PHP, che probabilmente avete già attiva), si autentica (verificando che le credenziali di accesso siano corrette) durante la connessione, e poi possiamo comunicare con il server in modo simile a un database - cioè inviare richieste individuali, ma mantenere una singola connessione in ogni momento. Un grande vantaggio di SMTP è il supporto diretto per la crittografia (noto come TLS
).
Ho spesso bisogno di inviare email da localhost quando sto testando un'applicazione appena scritta.
Per consiglio:
Su un Mac, la situazione è semplice perché il server MAMP in qualche modo "magicamente" trova l'account Apple Mail attualmente connesso e i messaggi sono sempre inviati dall'account corrente.
Tuttavia, non si può sempre fare affidamento su questo comportamento ed è una buona idea impostare la propria soluzione. Se hai una connessione internet e un account Google, è molto facile usare un account Gmail a cui puoi collegarti direttamente da PHP e inviare posta attraverso di esso.
Se usi il pacchetto nette/mail
, la configurazione è semplice:
mail:smtp: truehost: smtp.gmail.comusername: janbarasek@gmail.compassword: *********secure: ssl
La password non è la password di accesso al tuo account (sarebbe insicuro e non potresti usare l'autenticazione a due fattori, per esempio).
È necessario utilizzare ciò che viene chiamato "password dell'applicazione", che implementalmente significa che si registra la tua applicazione direttamente nel tuo account Google, a cui viene assegnata una qualche password generata casualmente che si inserisce in PHP e può essere inviata attraverso.
Le istruzioni dettagliate sono sul sito web di Google.
Si possono inviare solo 500 email al giorno attraverso l'hosting Wedos, e ho lottato con la connessione SMTP per un po'.
Attraverso il pacchetto nette/mail
si fa così (una soluzione praticabile):
mail:smtp: truehost: smtp-*******.wedos.netusername: jan@barasek.compassword: ******secure: tlsport: 587
Il parametro host
è diverso per ogni hosting e si trova nell'e-mail che Wedos invia quando registrate l'hosting.
Il "nome utente" rappresenta la casella di posta elettronica da cui saranno inviati i messaggi. La cassetta postale deve esistere. Quando si invia posta in PHP, dobbiamo anche impostare l'invio allo stesso indirizzo (in Nette con il metodo ->setFrom()
).
Se non compiliamo la configurazione in modo accurato e corretto, verranno lanciati vari messaggi di errore e le mail non potranno essere inviate.
Quando il numero di messaggi inviati viene superato, viene lanciata un'eccezione che informa del superamento del limite.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | it