PHP & MySQL

Librairie “mail” en PHP5 : Partie III

Le 26 novembre 2007 à 16:22 par Tomtom

Voilà la dernière partie du tutorial. On va donc finir par voir comment ajouter une ou plusieurs pièces jointes au mail. Rappelez vous dans la partir II, la fonction BuildMessage() appelait 3 fonctions. Les deux premières ont été détaillé dans la partie II, nous allons donc voir la dernière : la fonction GetParts(). Mais avant cela, il nous faut ajouter un ou plusieurs fichiers à l’objet $mail. C’est avec la fonction Attach() que l’on fait ça :

Fonction Attach() :

  1. function Attach($file){
  2. switch(strrchr(basename($name), ‘.’)){
  3. case ‘.gz’: $ctype = ‘application/x-gzip’; break;
  4. case ‘.tgz’: $ctype = ‘application/x-gzip’; break;
  5. case ‘.zip’: $ctype = ‘application/zip’; break;
  6. case ‘.pdf’: $ctype = ‘application/pdf’; break;
  7. case ‘.png’: $ctype = ‘image/png’; break;
  8. case ‘.gif’: $ctype = ‘image/gif’; break;
  9. case ‘.jpg’: $ctype = ‘image/jpeg’; break;
  10. case ‘.txt’: $ctype = ‘text/plain’; break;
  11. case ‘.htm’: $ctype = ‘text/html’; break;
  12. case ‘.html’: $ctype = ‘text/html’; break;
  13. default: $ctype = ‘application/octet-stream’; break;
  14. }
  15. $name = basename($file);
  16. $path = dirname($file);
  17. $this->parts[] = array (
  18. ‘path’ => $path,
  19. ‘name’ => $name,
  20. ‘ctype’ => $ctype
  21. );
  22. }

Cette fonction est appelée comme ceci :

  1. $mail->Attach(/chemin/du/fichier/fichier.extension);

Cette fonction ajoute un attribut parts qui est en fait un tableau contenant le nom du fichier, son chemin ainsi que son extension. On peut donc, lorsque la fonction BuildMessage() appelle GetParts() générer le code pour ajouter les pièces jointes.

Fonction GetParts() :

  1. function GetParts(){
  2. $eol = $GLOBALS[‘eol’];
  3. foreach($this->parts as $part){
  4. if(is_file($part[‘path’].‘/’.$part[‘name’])){
  5. $file = fread(fopen($part[‘path’].‘/’.$part[‘name’], ‘r’), filesize($part[‘path’].‘/’.$part[‘name’]));
  6. $file = chunk_split(base64_encode($file));
  7. $res = ‘–’.$this->boundary.$eol.
  8. ‘Content-Type: ‘.$part[‘ctype’].‘; name="’.$part[‘name’].‘"’.$eol.
  9. ‘Content-Transfer-Encoding: base64′.$eol.
  10. ‘Content-Description: ‘.$part[‘name’].$eol.
  11. ‘Content-Disposition: attachment; filename="’.$part[‘name’].‘"’.$eol.$eol.
  12. $file.$eol.$eol;
  13. }
  14. }
  15. return $res;
  16. }

On fait une boucle sur l’attribut parts pour ajouter le ou les fichiers à l’objet $mail. Ces fichier sont encodés en base 64 pour être inclus dans le mails. Ils sont délimités par un frontière (l’attribut boundaty de l’objet $mail)

Il ne nous reste plus qu’à envoyer notre email généré via la fonction send();. Et comme je vous l’avez promis, voilà la classe complète à télécharger ici. Il y a les détails d’utilisation au début du fichier

Enjoy :)

Un commentaire »

Gravatar

Commentaire de Fred

le 3 mars 2008 à 19:29

Merci pour cet article. Juste une petite erreur au niveau de la fonction Attach() où il fallait lire $file au lieu de $name à la deuxième ligne.

Laisser un commentaire

Votre Nom

Votre E-mail (obligatoire mais ne sera pas publié)

Votre Site ou blog

Votre commentaire

Valid XHTML 1.0 Transitional