Inviare email con PHPMailer

Pubblicato il 22/03/2016 da Giuseppe Riccio In: Script


Ultimamente alcune compagnie di hosting come Tophost e Seeweb, a causa di alcune falle nella sicurezza o di attacchi DDOS, hanno scelto di disabilitare o restringere l'utilizzo di determinate funzioni che gli sviluppatori usano con frequenza. È il caso della funzione mail() di php usata, lo dice la parola stessa, per inviare nativamente i messaggi di posta elettronica. Conseguenza diretta della scelta dei provider è che tutti i moduli di contatto con gli script basati su questa funzione smettono all'istante di funzionare. Come risolvere il problema? Ci viene in aiuto uno script molto semplice da utilizzare e soprattutto gratuito.

PHPMailer è una libreria open source che ci permette di inviare facilmente messaggi di posta elettronica sia in formato testuale che in formato HTML. Può essere utilizzato anche per allegare files al messaggio e per farlo vi basterà aggiungere una sola riga di codice. Di seguito vi illustrerò come risolvere i problemi al vostro modulo contatti utilizzando PHPMailer mediante la modalità SMTP autenticato.

Innanzitutto è necessario avere in account email (con password) già creato, di cui andremo ad utilizzare i dati e le credenziali per impostare il nuovo script di invio dei messaggi. Una volta raccolte tutte le informazioni necessarie, decomprimete l'archivio scaricato, rinominate la cartella estratta chiamandola PHPMailer e caricatela in una qualsiasi directory all'interno della root del web server.

Ora bisogna modificate lo script php che invia i messaggi, pertanto aggiungete in cima alle istruzioni l'inclusione con il percorso della cartella che abbiamo appena caricato.
<?
//includiamo la classe PHPMailer
require "PATH/TO/PHPMailer/PHPMailerAutoload.php";
//e ne creiamo un'istanza
$mail = new PHPmailer;

Successivamente aggiungiamo il codice per la costruzione del messaggio, delle intestazioni e definiamo i comportamenti:
$mail->IsSMTP();
$mail->Host = 'TUO SMTP HOST';
$mail->SMTPAuth = true;
$mail->Port = NUMEROPORTA; // dipende dal provider
$mail->SMTPSecure = 'PROTOCOLLO'; // tls/ssl
$mail->Username = "USERNAME MAIL"; // l'username del tuo account mail
$mail->Password = "PASSWORD MAIL"; // la password del tuo account mail
//intestazioni e il corpo del messaggio
$mail->SetFrom('MITTENTE', 'NOME MITTENTE VISUALIZZATO');
$mail->addAddress('DESTINATARIO');
$mail->AddReplyTo('MITTENTE');
$mail->Subject='OGGETTO DELLA MAIL';
$mail->Body='CORPO DEL MESSAGGIO';
//comportamenti in caso di invio corretto o di errore
if(!$mail->Send()){
echo $mail->ErrorInfo;
}else{
echo 'Email inviata correttamente!';
}
//chiudiamo la connessione
$mail->SmtpClose();
unset($mail);
?>

Con questi semplici passaggi il vostro modulo funzionerà di nuovo e con il metodo SMTP autenticato sarà molto più sicuro e stabile.