L’autore ha volontariamente contribuito a questo tutorial come parte del programma Pepipost Write to Contribute.
Introduzione
PHP è dotato di una funzione predefinita mail() che consente di inviare posta direttamente da uno script PHP. Qui in questo tutorial, parleremo dei prerequisiti per l’invio di una mail direttamente da uno script PHP, della sintassi e dei suoi parametri.
Prerequisiti
- PHP4, PHP 5 o PHP 7
- PHP configurato per sendmail. Nel caso in cui la tua configurazione PHP non sia configurata per l’invio di e-mail al mondo esterno, fai riferimento ai passaggi menzionati alla fine di questo articolo.
Sintassi
posta (a,oggetto,messaggio,intestazioni,parametri);
Parametri
a
Stringa | Richiesto
L’indirizzo email del destinatario.
Nota: Il deve essere conforme alla RFC 2822. È possibile passare un indirizzo e-mail o più utilizzando separati da virgole.
Alcuni esempi di esempio di come saranno i valori:
- ,
- Nome del destinatario <>
- Nome del ricevitore < >, Nome del ricevitore 2 <>
oggetto
Stringa / Richiesto
La riga dell’oggetto dell’e-mail da inviare.
Nota, il soggetto deve essere conforme alla RFC 2047.
messaggio
Stringa / Richiesto
Il contenuto della posta che si desidera inviare. Ogni riga dell’e-mail deve essere separata con un CRLF (\r\n) e ogni riga non deve superare i 70 caratteri.
In caso di macchina Windows, quando PHP si connette a un server SMTP a sendmail, rimuove un punto che si trova all’inizio di una riga. Per risolvere questo problema, sostituire il punto con un doppio punto, utilizzando il codice seguente:
<?php $text = str_replace("\n.", "\n..", $text); ?>
additional_headers
mixed (String or Array) | Optional
Questo parametro viene utilizzato per passare eventuali intestazioni email aggiuntive come From, Cc e Bcc. Ogni intestazione aggiuntiva deve essere separata con un CRLF (\r \ n).
Nota: durante l’invio dell’e-mail, assicurarsi che ci sia un’intestazione From. È possibile impostare l’intestazione From, utilizzando il parametro additional_headers o, è anche possibile impostare un valore predefinito in php.ini.
additional_parameters
String | Optional
Questo additional_parameter può essere usato per passare flag aggiuntivi al programma Sendmail come configurato nell’impostazione di configurazione sendmail_path. Ad esempio; è possibile utilizzare questo parametro per impostare l’indirizzo del mittente della busta quando si utilizza l’opzione Sendmail con-f. PHP per impostazione predefinita escape internamente i valori provenienti da questo parametro con escapeshellcmd () per impedire qualsiasi potenziale esecuzione di comando.
Valore di ritorno
la funzione mail() restituisce TRUE se il server SMTP ha accettato correttamente la posta per la consegna, altrimenti FALSE.
Ottenere TRUE non significa necessariamente che l’e-mail viene consegnata al server del destinatario. TRUE è solo un’indicazione che la tua posta è stata inviata correttamente alla coda del server SMTP per l’invio.
Restituisce TRUE se la posta è stata accettata con successo per la consegna, FALSE altrimenti.
È importante notare che solo perché la posta è stata accettata per la consegna, ciò NON significa che la posta raggiungerà la destinazione prevista.
Nota: la funzione mail () non funzionerà nel server locale. Per inviare la posta sarà necessario un server connesso a Internet e le porte SMTP aperte.
Pochi casi d’uso ed esempi di lavoro
1. Come inviare una mail HTML
<?php$to = ", ";$subject = "This is a test HTML email";$message = "<html><head><title>This is a test HTML email</title></head><body><p>Test email. Please ignore.</p></body></html>";// It is mandatory to set the content-type when sending HTML email$headers = "MIME-Version: 1.0" . "\r\n";$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";// More headers. From is required, rest other headers are optional$headers .= 'From: <>' . "\r\n";$headers .= 'Cc: ' . "\r\n";mail($to,$subject,$message,$headers);?>
2. Come inviare la posta con un parametro aggiuntivo della riga di comando.
Come descritto sopra, per questo caso d’uso, è necessario utilizzare il parametro additional_parameters per passare un parametro aggiuntivo al programma configurato per l’invio di posta utilizzando sendmail_path.
<?phpmail('', 'This is a test subject line', 'The complete body of the message', null, ''); ?>
Errori/eccezioni comuni con PHP funzione sendmail
- Impossibile inviare un grande volume di e-mail utilizzando la funzione mail ()
L’utilizzo di una funzione mail() non è raccomandato per l’invio di e-mail di grandi volumi, perché apre e chiude una connessione socket SMTP per ogni e-mail. Questo non è davvero molto efficiente.
Se si desidera inviare una grande quantità di e-mail in PHP, si consiglia di fare riferimento ai pacchetti PEAR::Mail e PEAR::Mail_Queue o utilizzare un buon fornitore di servizi di posta elettronica che può aiutare a scalare il volume della posta elettronica. - Non ricevere e-mail inviate tramite la funzione PHP mail ()
Mentre ci può essere N numero di motivi per l’errore, ma uno dei problemi che molti incontrano è con gli agenti di trasferimento della posta Unix, che sostituiscono automaticamente LF con CRLF, il che porta a raddoppiare CR se CRLF è già usato nel tuo codice. In tal caso, prova a utilizzare solo LF (\n). Per saperne di più sul formato dei messaggi su RFC 2822. - Attenzione: mail ():” sendmail_from ” non impostato in php.ini o personalizzato “Da:” intestazione mancante.
Questo errore si verifica principalmente perché durante l’invio di posta, non è stata menzionata l’intestazione From utilizzando i parametri additional_headers.
Configurazione di PHP per l’invio di posta
Per configurare qualsiasi cosa relativa a PHP è necessario cambiare `php.ini ‘ file. Quindi, modificheremo php.file ini per configurare Sendmail.
Puoi facilmente individuare o cercare il tuo php.file ini in Linux usando il comando sotto:
locate php.ini
La posizione predefinita è ‘ / etc / php.ini ‘
Puoi trovare lo stesso in Windows in cui è installato XAMPP o LAMPP:
`C:\xampp \ php \ php.ini ‘
Chiarimento:
- Il nostro sito utilizza cookie tecnici e di terze parti per migliorare la tua esperienza di navigazione.)
Cambiare php.file ini per aggiungere la configurazione della posta.
1. Apri il tuo php.file ini utilizzando di seguito:
Per Linux / Mac OS:
vim /etc/php.in
Per Windows:
utilizzando blocco note
2. Cerca nel file. Sarà come mostrato di seguito:
; For Win32 only.; http://php.net/smtpSMTP = localhost; http://php.net/smtp-portsmtp_port = 25; For Win32 only.; http://php.net/sendmail-from;sendmail_from = ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").; http://php.net/sendmail-pathsendmail_path = /usr/sbin/sendmail -t -i; 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 filenamemail.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 =
3. Aggiungi i dettagli del tuo server di posta al file o se ne hai uno puoi cambiarlo (il server di posta può essere il tuo ie. server di posta locale o è possibile utilizzare qualsiasi ESP come server di posta).
Per Linux / Mac OS:
– Controlla `sendmail_path ‘ e assicurati che; non lo sia (il punto e virgola viene usato per mostrare che la riga è commentata).
– Per impostazione predefinita userà `/usr/bin / sendmail-t-i` puoi cambiarlo se stai usando un percorso personalizzato.Per Window:
– Controlla ‘SMTP = localhost’ e modificalo sul tuo server di posta desiderato (qualsiasi ESP o localhost) non sono necessarie modifiche se stai usando il tuo server locale.
– Oppure puoi anche utilizzare il server smtp di qualsiasi provider di servizi di posta elettronica come Pepipost, Sendgrid, Mailgun, Sparkpost.
4. Salva / chiudi il php.file ini
5. Il passo finale, non dimenticare di riavviare il server web / php-fpm.
Suggerimento pro: È possibile ospitare un semplice ” info.php ” sul tuo server web per controllare ogni configurazione del tuo PHP usando sotto il codice 2 liner:
vim php_info.php<?phpphpinfo();?>
Salvare e uscire dal file.
6. Ricarica il tuo webserver e php-fpm.
7. Premi http://localhost/php_info.php sul tuo browser web.
Conclusione
Spero, questo tutorial è in grado di aiutarti a inviare posta usando PHP.