PHPMailer gestisce l'invio di email in formato html e con autenticazione smtp. 
 Il sito ufficiale della libreria PHPMailer è http://phpmailer.worxware.com/.
INSTALLAZIONE
- Scaricare la libreria dal repository github https://github.com/Synchro/PHPMailer
 
- Decomprimere il file del progetto nella directory lib di gino e rinominare la directory PHPMailer, ad esempio: 
# mv PHPMailer_master PHPMailer
 
Il file PHPMailer/class.phpmailer.php deve essere caricato una sola volta nello script (poi si potranno inviare infinite email).
UTILIZZO
- Includere nel metodo che si occupa dell'invio delle email il file plugin.phpmailer.php 
require_once(PLUGIN_DIR.OS.'plugin.phpmailer.php');
 
- Utilizzare il metodo sendMail() per inviare le email; questo metodo si interfaccia alla libreria PHPMailer. 
 La scelta dell'utilizzo della libreria PHPMailer o della funzione base di php (mail) per l'invio di una email avviene tramite l'opzione php_mail: 
- php_mail true, funzione mail (default)
 
- php_mail false, libreria PHPMailer
 
 
Optando per la libreria PHPMailer è inoltre possibile scegliere la tipologia di mailer; di default il valore è mail.
ESEMPIO
Esempio di metodo per l'invio di una email con la tipologia di mailer smtp 
public function testEmail(){
  require_once(PLUGIN_DIR.OS.'plugin.phpmailer.php');
  $mailer = new \Gino\Plugin\plugin_phpmailer();
  $send = $mailer->sendMail("support@test.com", "info@test.com", "Prova invio da plugin", "Testo dell'email", 
  array(
    'php_mail'=>false, 
    'mailer'=>'smtp', 
    'debug'=>2, 
    'reply_email'=>'reply@test.com', 
    'reply_name'=>'Test Email', 
    'ishtml'=>false, 
    'smtp_server'=>'smtp.example.com', 
    'smtp_auth'=>true, 
    'smtp_user'=>"smtp@test.com", 
    'smtp_password'=>"password"
  ));
  
  return $send;
}
CONTENUTO DELL'EMAIL
Una email può essere in formato html o testo. Per definire il tipo di formato impostare l'opzione ishtml nel metodo sendMail() 
array(
  ...
  'ishtml'=>[true|false], 
)
ALLEGATI
Per allegare dei file all'email utilizzare l'opzione attachments nel metodo sendMail(). Ogni file viene definito come un array con le chiavi path e name 
array(
  ...
  'attachments'=>array(
    array(
      'path'=>CONTENT_DIR.OS.'attachment'.OS.'prova1.pdf', 
      'name'=>'pippo.pdf'
    ), 
    array(
      'path'=>CONTENT_DIR.OS.'attachment'.OS.'prova2.pdf', 
      'name'=>'pluto.pdf'
    )
  ), 
)
FORMATO HTML
Utilizzando il formato html è possibile formattare il corpo dell'email con i tag html. Il contenuto può essere definito nel codice all'interno di una variabile oppure in una specifica vista. 
 Nel primo caso avremo ad esempio 
$contents = "
<table align=\"center\" width=\"600\" border=\"0\" bgcolor=\"FFFFFF\">
  <tr>
    <td><div style=\"text-align:left; padding:8px 4px; background-color:#F2F2F2; font-size:10px;\">Testo dell'email</div></td>
  </tr>
</table>";
Nel caso della vista il contenuto viene definito nella classe controller attraverso la classe Gino.View; prendendo come riferimento per la costruzione delle email html il template mailing.php (presente nel progetto) abbiamo ad esempio: 
$view = new \Gino\View($this->_view_dir);
$view->setViewTpl('mailing');
$root_absolute_url = $this->_registry->request->root_absolute_url;
$dict = array(
  'image' => $root_absolute_url.'app/blog/img/image.gif',
  'title' => _("Mailing"), 
  'subtitle' => null, 
  'items' => $items,
);
$contents = $view->render($dict);
CREARE UN MESSAGGIO DA UNA STRINGA HTML
Per creare un messaggio in modo automatico a partire da una stringa html occorre attivare l'opzione automatic_html nel metodo sendMail() 
array(
  ...
  'automatic_html'=>true, 
)
Con questa opzione si richiama PHPMailer::MsgHTML() che effettua in modo automatico le modifiche per le immagini inline e i background, e crea una versione di solo testo convertendo il codice html. PHPMailer::MsgHTML() sovrascrive qualsiasi valore esistente in PHPMailer::$Body e PHPMailer::$AltBody. 
 Il contenuto dell'email è quello passato nel parametro $contents di sendMail(), come ad esempio 
$contents = file_get_contents('contents.html');
IMMAGINI INLINE
Se si vuole costruire una email con delle immagini incorporate nel testo è necessario allegare le immagini e collegarle con il tag 
 dove CID è il content ID dell'allegato, ovvero il riferimento dell'immagine. 
 Le immagini devono essere allegate con l'opzione embedded_images nel metodo sendMail(). Ogni file viene definito come un array con le chiavi path, cid e name 
array(
  ...
  'embedded_images'=>array(
    array(
      'path'=>SITE_ROOT.OS.'app/blog/img/image.gif', 
      'cid'=>'img1'
    )
  ), 
)
NOTE SULLA COSTRUZIONE DELLE EMAIL IN FORMATO HTML
- Usare CSS inline per il testo e i link (ovvero senza servirsi di file css esterni o caricati sul server): inserire gli stili CSS direttamente nel corpo dell'email. Outlook non riconosce gli sfondi nelle tabelle perciò usate solo tinte unite tramite l’attributo bgcolor dei CSS. 
 
- Usare solo Tabelle e non elementi DIV. Purtroppo Microsoft scansa accuratamente i DIV e le E-mail vanno costruite con le Tabelle. 
 
- Usare inline anche gli attributi di stile delle tabelle, ovvero direttamente nel TAG TABLE (p.e. <TR style="...">). 
 
- Usare le immagini jpeg (scordarsi la trasparenza dei png)
 
ECCEZIONI
Per attivare le eccezioni impostare l'opzione exception nel metodo sendMail() 
array(
  ...
  'exception'=>true, 
)
Esempio di eccezioni 
$mail = new PHPMailer(true);
$mail->IsSMTP();
try {
  $mail->Host       = "mail.yourdomain.com";
  $mail->SMTPDebug  = 2;
  ...
  $mail->Send();
  echo "Message Sent OK<p></p>\n";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); 
} catch (Exception $e) {
  echo $e->getMessage(); 
}