PHPMailer
Par PlaceOweb le lundi, juillet 6 2009, 21:39 - PHP - Lien permanent
PHPMailer de codeworxtech est une classe e-mail en PHP permettant les pièces jointes, les serveurs SMTP, CC, BCC, les messages HTML, mot à la ligne (wordwrap), et plus encore. Envoie de mails via sendmail, PHP mail(), QMail, ou SMTP (y compris via SSL me semble t'il). PHPMailer dispose d'une nouvelle version uniquement adaptée pour PHP 5 et PHP 6.
PHPMailer étant tellement simple et suffisamment documenté que je vous en la découvrir par vous même. Par contre je vous laisse les astuces, là ou j'ai perdu 5 minutes à trouver la bonne réponse sur le net.
PhpMailer et les accents
Selon l'encodage, il faut redéfinir le Charset pour ne pas avoir dans les caractères européens accentués tels que les é à ô, etc....
$phpMailer= new PHPMailer(); $phpMailer->CharSet = 'UTF-8'; // Gestion du charset et des accents (par défaut ISO-8859-1)
PhpMailer et l'undelivered message (Return-Path to Sender)
Pour recevoir un mail (de non délivrance) si le compte mail du destinataire n'existe pas ou n'est pas utilisable (quota plein), vous pouvez le configurer via l'attribut "Sender" qui configure l'attribut "Return-Path: " du mail.
$phpMailer= new PHPMailer(); $phpMailer->Sender = $mail_retour; // Sender email (Return-Path)
PhpMailer, gestion des erreurs (d'envoi et de remplissage des attributs obligatoires)
if(!$phpMailer->Send()) { echo "Mail non envoyé, erreur : " . $phpMailer->ErrorInfo; // La dernière erreur } else { echo "Mail envoyé avec succès."; }
PhpMailer, catcher les exception
Pour récupérer les exception, il faut passer true dans le constructeur.
$phpMailer = new PHPMailer(true); // permet d'utiliser les bloc try/catch pour phpmailerException et Exception try { $phpMailer->SetFrom('name@yourdomain.com', 'Place O Web'); $phpMailer->AddReplyTo('repondez.moi@votredomaine.com', 'PlaceOweb Reply'); $phpMailer->AddAddress('vers.le.gars@autredomain.come', 'Nom si connu'); $phpMailer->Subject = "Test d'envoi de mail avec PHPMailer"; $phpMailer->AltBody = 'Pour voir ce message, utilisez un client mail compatible HTML'; // optionnel - MsgHTML crée automatiquement un message alternatif $phpMailer->MsgHTML(file_get_contents('contenu.html')); $phpMailer->AddAttachment('xls/rapport.xls'); // attachement $phpMailer->Send(); echo "Message envoyé !\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); // Jolis messages d'erreur de PHPMailer } catch (Exception $e) { echo $e->getMessage(); // Les autres message d'erreur (en dehors de PHPMailer) }
Pour franciser les message d'erreur
$phpMailer->SetLanguage('fr');
PhpMailer, envoi par SMTP authentifié
$phpMailer->IsSMTP(); $phpMailer->SMTPSecure = "tls"; $phpMailer->Host = "smtp.placeoweb.com"; $phpMailer->SMTPAuth = true; $phpMailer->Username = "noreply@placeoweb.com"; $phpMailer->Password = "monMOTdePASSE";
Débuger la connexion SMTP de PhpMailer
$phpMailer->SMTPDebug = true;
PhpMailer et les fichiers attachés (inline)
Comment inclure des images dans vos mails sans les récupérer depuis internet : PhpMailer Inline :
// Ajout de pièce jointe inline (dans le corps du message HTML) depuis un fichier // void AddStringAttachment (string $string, string $filename, [string $encoding = 'base64'], [string $type = 'application/octet-stream']) // bool AddStringEmbeddedImage (string $string, string $cid, [string $name = ''], [string $encoding = 'base64'], [string $type = 'application/octet-stream']) // bool AddAttachment (string $path, [string $name = ''], [string $encoding = 'base64'], [string $type = 'application/octet-stream']) // bool AddEmbeddedImage (string $path, string $cid, [string $name = ''], [string $encoding = 'base64'], [string $type = 'application/octet-stream']) // Ajout de pièce jointe depuis une chaine de caractère $phpMailer->IsHTML(true); $phpMailer->AddStringEmbeddedImage($contenuBinaireDeLaPhoto,'idDeLaPhotoPourLeMessageHtml','nomDeLaPhoto.jpg'); $body .= '<br><hr>' . 'nomDeLaPhoto.jpg' . ' : <img src="cid:' . 'idDeLaPhotoPourLeMessageHtml' .'">'; $phpMailer->Body = $body;
PhpMailer et les fichiers en pièce jointe
Pour ajouter des fichiers en pièce jointe de votre mail :
// Ajout de pièce jointe depuis un fichier $phpMailer->AddAttachment($path,$name,$encoding,$type); // Ajout de pièce jointe depuis une chaine de caractère $phpMailer->AddStringAttachment($string,$filename,$encoding,$type)
Ressources
- PHPMailer
- PHPMailer - Properties (From, To, CharSet, Timeout, ...)
- PHPMailer - Methods
- Basic Example using SMTP
- PHPMailer - tutorial (Using Attachments, Using HTML Mail, ...)
- PHP Mailer - Brève description des principales méthodes et des propriétés