PHPMailer e allegati

Ciao, in questo articolo mostrerò del codice che ho usato io per inviare allegati con la libreria PHPMailer. La libreria la trovate QUI e vi basta caricarla sul server per averla funzionante.
Vediamo le 3 parti di codice. La prima è il form per la mail (mail1.php), la seconda è il caricamento dell’allegato e la chiamata alla funzione di invio mail (mail2.php) e la terza è la funzione per inviare la mail (sendMail()). Lo script completo è in fondo alla pagina.

1) Mail1.php

– Tipo di encription. E’ fondamentale usare ‘multipart/form-data’

– Input type = ‘file’

2) Mail2.php

– includo questo file che contiene la funzione vera e propria per l’invio della mail

– Prendo i valori dal form. Inizializzo la variabile $doc a false (sarà il mio allegato) e $tit a stringa vuota (sarà il titolo del mio allegato. Questo perchè non è detto che ci sia un allegato da inviare

– Se c’è l’allegato, lo controllo. Il campo uploadfile che ho utilizzato in Mail1.php è di tipo file e per questo memorizza il file caricato nell’array $_FILES[‘nome_del_campo’]. Gli echo e i die servono per debug, una volta appurato che funziona tutto si possono togliere.
– Inizio il controllo di eventuali errori e se non ci sono stampo i valori del file (nome, dimensione…)

– Se invece ci sono errori, controllo il tipo di errore, ad esempio se il file è troppo grande o se è un errore indeterminato

– Se non ci sono stati errori cambio i valori delle mie variabili. $doc diventa la stringa contenente il mio allegato ([‘tmp_name’]) mentre $tit è il nome del file

– Se NON c’è l’allegato (is_uploaded_file() ritorna false), riconferma i valori delle mie variabili. Questo può anche essere omesso..diciamo che è per sicurezza

– Chiama la funzione di invio mail, alla quale passo i valori necessari, fra cui l’allegato

3) SendMail()

– La funzione prende vari parametri e vi sarete chiesti perchè gli passi 2 volte $mitt. Perchè il primo viene utilizzato come mittente ($from), mentre il secondo come rep_to($rep_to) e potrebbero essere 2 valori diversi.
Una volta chiamata la funzione decodifico il messaggio e l’oggetto per evitare problemi con caratteri speciali (accenti ecc)

– Creo un nuovo oggetto PHPMailer e ne imposto i parametri

– Controllo la variabile $doc. Se è impostata a false vuol dire che non c’è l’allegato. Se non è impostata a false (ma a un altro valore, che noi sappiamo essere l’allegato) allora chiama il metodo per allegare il file, specificando il tipo di codifica

– Verifica che l’invio vada a buon fine.

——————————————————————————————
Codice completo

Mail1.php

 
Mail2.php

SendMail()