Cette section est close pour le moment.
Mais je n'arrête pas la veille, loin de là. Retrouvez mes projets sur Github et sur cette page qui sera à jour plus régulierement


Ressources

Définition de ressource : (nom féminin) Qui peut fournir ce dont on a besoin.
Vous l'aurez compris, sur cette page ce ne sont pas vraiment des tutoriels, c'est plutôt des penses-bêtes plus ou moins fournis mais qui vous permettront d'avoir des bases concernant la programmation.
Recherche par tag

Envoyer des mails avec des pièces jointes

Envoyer des mails avec des pièces jointes
Publication : Le 01/10/2012 à 20:46:17

Introduction

On va partir du fait que vous avez les bases afin d'envoyer un mail classique via PHP. Attacher un fichier au mail n'est pas plus compliqué.

Le principe

Il faut écrire un mail respectant le format MIME 1.0 (Multipurpose Internet Mail Extension), c'est un mail composé de plusieurs parties, qui séparent le texte des fichiers. Chaque partie sera délimité par un "boundary" (une ligne de délimitation unique).

La séparation

Il faut donc créer un boundary, cette information doit absolument être unique.

Vous pouvez tirer au sort des chiffres ou des lettres, récupérer la valeur du time() etc ...

Si vous avez peur que ça ne soit pas suffisant, vous pouvez utiliser différentes fonctions PHP :
- rand() qui va renvoyer un chiffre aléatoirement.
- uniqid() qui donne un identifiant unique basé sur la date et heure courante en microsecondes.
- md5() qui cryptographie le contenu d'un chaîne de carcatères.
<?php
$boundary = md5(uniqid(rand()));
?>

En-tête du message

Il faut déclarer dans l'en-tête du mail la version MIME du mail ainsi que le délimiteur.
<?php
$head = "MIME-Version: 1.0\n";
$head .= "Content-Type:multipart/mixed: boundary=".$boundary." \n";
$head .= "\n";
?>

Texte du mail

On écrit ensuite la partie message du mail. Il faut bien délimiter cette partie avec le boundary.
<?php
$message = "--".$boundary."\n"
$message .= "Content-Type: text/plain: charset='iso-8859-1'\n";
$message .= "Content-Transfer-Encoding:8bit\n";
$message .= "\nn"; // ligne vide, très importante
$message .= "Le contenu de mon mailn\n";
?>

Les fichiers attachés.

On va écrire le contenu des fichiers au format RFC 2045 afin qu'il soit conforme, on va devoir utiliser les fonctions chunk_split() et base64_encode(), ce qui va donner :
<?php
$file = "mon-fichier-a-envoyer";
$pj = file_get_content($file);
$pj = chunck_split(base64_encode($pj));
?>
Pour l'attacher au mail il suffit de le déclarer entre deux boundary :
<?php
$message .= "--".$boundary."\n";
$message .= "Content-Type: <type mime du fichier>: name=<nom du fichier>\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "Content-Disposition: inline: filename=<nom du fichier>\n";
$message .= "\n";
$message .= $pj."\n";
$message .= "\n";
$message .= "--".$boundary."\n";
?>

Conclusion

Maintenant que tout est bien attaché, il n'y a plus qu'à envoyer le mail. Simple non ?

ps: attention à bien ajouté un antislash devant les n pour avoir un retour à la ligne valide.

Sur le même thème

Envoyer des mails avec des pièces jointes
Publication : Le 01/10/2012 à 20:46:17

Tags

Tags : tutoriel / PHP

Suggestion :

Zipper et dézipper des archives en PHP

Zipper et dézipper des archives en PHP