• Contacter Nous
  • S’inscrire
  • Se Connecter
dimanche, mars 7, 2021
  • S'identifier
  • S'inscrire
Romoulai.com
  • Accueil
  • DÉCODAGE
    • Android
      • ITEL
      • INFINIX
      • TECNO
      • OPPO
    • iPhone
    • STOCK-FIRMWARE
      • BOX FLASHAGE
        • MIRACLE BOX
  • MUSIQUE
  • TUTORIELS
    • comment devenir pro
    • LES MEILLEURS COURS POUR DEVENIR PRO EN INFORMATIQUE
      • COURS POUR LES ÉLÈVES
      • cours de 3ème
    • TUTORIELS
    • FREE TUTO
      • TUTO PHOTOSHOP
    • TUTORIELS FREE
  • LOGICIELS
  • RECHARGER VOTRE BTC, PM, ETH, PR, PP
  • Création de mon site internet
Pas de résultat
Voir tous les résultats
  • Accueil
  • DÉCODAGE
    • Android
      • ITEL
      • INFINIX
      • TECNO
      • OPPO
    • iPhone
    • STOCK-FIRMWARE
      • BOX FLASHAGE
        • MIRACLE BOX
  • MUSIQUE
  • TUTORIELS
    • comment devenir pro
    • LES MEILLEURS COURS POUR DEVENIR PRO EN INFORMATIQUE
      • COURS POUR LES ÉLÈVES
      • cours de 3ème
    • TUTORIELS
    • FREE TUTO
      • TUTO PHOTOSHOP
    • TUTORIELS FREE
  • LOGICIELS
  • RECHARGER VOTRE BTC, PM, ETH, PR, PP
  • Création de mon site internet
Pas de résultat
Voir tous les résultats
Romoulai.com
Pas de résultat
Voir tous les résultats
Accueil LES MEILLEURS COURS POUR DEVENIR PRO EN INFORMATIQUE

[E-mail] Envoyer un e-mail en PHP

OULAI PATRICE Par OULAI PATRICE
25 décembre 2018
Dans LES MEILLEURS COURS POUR DEVENIR PRO EN INFORMATIQUE, TUTORIELS
165 11
0
546
ACTIONS
1.8k
VUES
Partager sur FacebookPartager sur Twitter
Vue : 1 400

[E-mail] Envoyer un e-mail en PHP

Table des matières

[E-mail] Envoyer un e-mail en PHP
Avant-propos
L’en-tête
Les différents types d’e-mails
Et c’est parti pour l’assemblage !
Annexe : joindre un fichier
Annexe : FAQ
Annexe : les prioritées

[E-mail] Envoyer un e-mail en PHP

Comment envoyer un e-mail en PHP ?

Vous me direz : rien de plus simple ! J’utilise la fonction mail() et je lui donne le destinataire, le sujet, le contenu du courriel.

Alors oui, ça peut fonctionner, mais le gros problème est que, lorsque l’on utilise cette méthode, l’e-mail a 95 % de chances de partir dans les courriers indésirables… Ce qui n’est pas vraiment très bon pour l’expéditeur.

C’est pourquoi ce tutoriel va non seulement vous apprendre à envoyer un courriel qui arrivera (presque toujours) à son destinataire, mais aussi à envoyer un e-mail en HTML et même y ajouter une pièce jointe. 😉 Eh oui, comme les annonces de publicité que vous recevez, ou encore les courriels du Site du Zéro (e-mails d’avertissement de messages privés ou la Newsletter).

Avant-propos

Pour commencer ce tutoriel, il faut tout d’abord fixer une chose : tous les serveurs qui reçoivent les e-mails ne suivent pas obligatoirement la norme, comme je viens d’en avoir la confirmation à la suite de la dernière édition de ce tuto. En effet, selon la norme que je cite quelques paragraphes plus loin, un passage à la ligne dans le code source d’un e-mail est « » ; or, certains hébergeurs remplacent le « » automatiquement par « », ce qui fait que l’on se retrouve avec « », qui occasionne certains bogues au niveau de l’affichage des e-mails.

Il existe donc deux possibilités soit on tente de filtrer les serveurs à problèmes et donc de respecter le plus souvent la norme, soit on décide de mêttre un peut la norme de coté et l’on utilise « » qui marche de toutes façons, au cas ou vous voudriez gérer au cas par cas, voici un petit bout de code.

<?php
if (!preg_match("#^[a-z0-9._-][email protected](hotmail|live|msn).[a-z]{2,4}$#", $mail))
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}
?>

L’en-tête

Définition

L’en-tête d’un e-mail, aussi appelé header, est la partie qui se trouve au début d’un courriel. Elle est invisible pour l’utilisateur lambda qui ne fait que lire ses messages.

Dans ce tutoriel, j’utiliserai le mot anglais header lorsque je parlerai de l’en-tête car, comme vous le savez certainement, le langage informatique utilise pour ainsi dire toujours la langue anglaise ; il sera donc plus facile de se servir de ce terme dans le cours, car il sera réutilisé dans le code.

Le header, donc, contient toutes les informations de l’e-mail. En voici quelques exemples :

  • l’heure d’envoi,

  • l’adresse électronique de l’expéditeur,

  • l’adresse de réponse,

  • le nom du serveur qui a envoyé l’e-mail,

  • par où a transité l’e-mail chez votre FAI,

  • etc.

Eh, mais tu viens de nous dire que le header, nous, on ne le voyait pas ! Mais moi, je sais très bien à quelle heure mon e-mail a été envoyé et qui me l’a envoyé !

Alors certes, l’utilisateur lambda voit certaines de ces informations, mais c’est uniquement parce que votre logiciel de messagerie va lire le header pour ensuite vous l’afficher de manière propre.

Schéma

Lorsque vous créez le header pour envoyer un e-mail avec la fonction mail() de PHP, vous avez besoin de spécifier quatre arguments :

  • l’adresse de l’expéditeur,

  • l’adresse de retour,

  • la version de MIME,

  • le content-type du message.

Bon, maintenant, éclaircissons un peu cette liste. Les deux premiers arguments n’ont pas besoin d’explication (ou bien alors vous êtes en-dessous de zéro :p ).
Pour ce qui est de la version du MIME, il s’agit de donner la version de l’e-mail au serveur qui va le recevoir. En gros, ça permet de lui dire comment le lire. 🙂

Si vous voulez plus de renseignements sur le standard MIME, voici un lien : CCM.

Pour le content-type, vous l’avez peut-être déjà rencontré. Il va servir dans le cas présent à définir ce que va contenir votre e-mail. Sachez qu’il peut aussi être utilisé en HTML pour définir le contenu d’une page, ou encore en PHP lors de la génération d’une image avec une bibliothèque graphique (pour signaler à votre navigateur de quelle façon il va devoir interpréter ce qui se trouve dans la page). On verra que le content-type va devoir aussi être réutilisé plus tard dans le corps du message.

Ainsi, pour récapituler, nous avons maintenant le schéma d’un header qui ressemble à cela :

  • expéditeur,

  • adresse de retour,

  • MIME,

  • content-type.

Comment bien déclarer son header ?

Nous allons garder le même schéma que précédemment. Je vous le rappelle :

  • expéditeur,

  • adresse de retour,

  • MIME,

  • content-type.

Je vais commencer à écrire du code, à partir de maintenant. Comme je suis en train de traiter le header, je vais mettre tout ce qui le concerne dans une variable $header.

Déclaration de l’expéditeur

<?php
$header = "From: \"EXPEDITEUR\"<ADRESSE_EXPEDITEUR>".$passage_ligne;
?>

Certains anti-spam se basent sur la concordance entre l’expéditeur qui est présent dans la balise FROM et le serveur depuis lequel le message est envoyer pour détecter un risque de fishing (exemple depuis [email protected] vous envoyez un mail en tant que [email protected]) donc il vaut mieux coller à 100%

Pour cela si vous etes sur un serveur mutualisée pour avoir l’adresse exacte envoyez vous un email avec la fonction mail de php avec juste un destinataire, un corps et un sujet peut importe le contenu vous n’aurez qu’à regarder l’adresse de l’expéditeur pour la mettre à la place de ADRESSE_EXPEDITEUR

Déclaration de l’adresse de retour

<?php
$header.= "Reply-to: \"RETOUR\" <ADRESSE_RETOUR>".$passage_ligne; 
?>

Déclaration de la version de MIME

<?php
$header.= "MIME-Version: 1.0".$passage_ligne; 
?>

Déclaration du content-type

<?php
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
?>

Quelques explications

Tout d’abord, la valeur de content-type : multipart/alternative.
J’ai choisi d’utiliser celle-ci car mon tutoriel a pour but d’envoyer un e-mail en mode texte et en mode HTML (je détaillerai ces modes un peu plus tard).

Il existe également d’autres « sous-types » pour le content-type. Ici, multipart/alternative permet au programme qui reçoit l’e-mail de choisir d’afficher soit la partie HTML, soit la partie texte. Je vous donne à nouveau le lien CCM où vous pourrez trouver les autres types et leurs utilités (ils ne seront pas détaillés ici car ils feront peut-être l’objet d’un autre tutoriel).

Nous avons aussi la valeur boundary à laquelle j’ai affecté $boundary : je suis obligé de déclarer cette valeur ici, mais je vous expliquerai plus tard le contenu de la variable et son utilité.

Un exemple concret :

<?php
//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header .= "Reply-to: \"WeaponsB\" <[email protected]>".$passage_ligne;
$header .= "MIME-Version: 1.0".$passage_ligne;
$header .= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
?>

1er bilan

Dans cette première partie, nous avons donc appris de quoi était constitué le header d’un e-mail et comment en créer un à notre convenance. Dans la prochaine partie, nous verrons les différents types de courriels et aussi le code à utiliser pour les déclarer.


Les différents types d’e-mails

Définition

J’imagine que vous avez tous reçu des e-mails au moins une fois dans votre vie. ^^ Vous avez donc eu la possibilité de constater que certains possèdent de belles images et une belle mise en forme. Par exemple :

Format Html
Format Html

Au format HTML

Format texte
Format texte

Au format texte

Hum mais pourquoi existe-il deux format ?

Tous simplement car selon le client mail qui va lire votre message, il ne sauras pas forcément afficher la partie HTML. Par défaut les clients mail tente de convertir l’HTML en texte mais vous voudrez peut-être afficher un texte différent selon les cas

Comme nous allons envoyer un e-mail en mode texte et en mode HTML, il va nous falloir deux variables : la première contenant le contenu de l’e-mail en mode texte que l’on appellera $message_txt, et la seconde, qui contiendra l’e-mail au format HTML, au nom de $message_html. Mais attention : ces messages devront OBLIGATOIREMENT se terminer par un .

Comment faire une déclaration de type ?

Pour effectuer une déclaration de type, il faut utiliser trois paramètres :

  • Content-Type : XXX/XXX; charset=XXXXXX

  • Content-Transfer-Encoding : XXXXXXXXXX

Si l’on veut traduire cette partie en code PHP, on obtiendra quelque chose comme cela :

<?php
$message = "...";
$message .= "Content-Type: XXX/XXX; charset=\"XXXXXX\"".$passage_ligne;
$message .= "Content-Transfer-Encoding: XXXXXXXXXX".$passage_ligne;
$message .= "...";
?>

Pour information, j’utilise ici une nouvelle variable $message. Cette variable sera envoyée à la fonction mail() et contiendra l’intégralité du contenu de l’e-mail (texte et code HTML).
Vous aurez aussi remarqué que j’ai ajouté « … » avant et après ma déclaration de type. C’est parce qu’en temps normal, il y a autre chose avant et après la déclaration. Je l’aborderai plus tard dans ce tutoriel.

Quelques explications

Tout d’abord, le content-type (eh oui encore lui, mais je vous avais dit qu’il reviendrait 🙂 ).
Ici, il va servir à dire si l’on veut placer à la suite du texte ou du code HTML.

  • Mode Texte => text/plain

  • Mode HTML => text/html

Passons au charset. Il va servir à définir le type d’encodage des caractères qui vont suivre.
J’ai utilisé ici le charsetiso-8859-1 car il est supporté par tous les webmails, contrairement à l’UTF-8.
L’UTF-8 peut être utilisé pour l’envoi d’un e-mail multilingue (chinois, arabe…).

Maintenant, le dernier point : le Content-Transfer-Encoding. Ce paramètre permet de définir sur combien de bits sera encodé le message, ce qui détermine en fait le nombre de caractères différents possibles.
Petit exemple : un e-mail avec un Content-Transfer-Encoding réglé sur 7 bits ne pourra comprendre que 128 caractères différents.

Citation : Cours de maths

Nombre de caractères = 2n (bits)
Donc un message sur 7 bits donnera : 27 = 128
et un message sur 8 bits : 28 = 256
etc.

Maintenant, cela va donc dépendre de ce que vous écrivez dans votre courriel. Si vous souhaitez utiliser des accents, vous devrez obligatoirement régler le Content-Transfer-Encoding sur 8 bits. 🙂

Ainsi, si nous appliquons ce qui se trouve ci-dessus, on devrait se retrouver, pour une déclaration de mode HTML, avec ceci :

<?php
$message = "...";
$message .= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message .= "...";
?>

2e bilan

Eh bien nous y voilà ! 🙂
Maintenant, nous savons comment définir ce que nous allons placer dans notre courriel. On avance sur le chemin de la quête de l’e-mail qui ne part pas à la corbeille. :p Il ne nous reste plus qu’à voir comment faire la jonction entre les différentes parties.


Et c’est parti pour l’assemblage !

À vos marques, prêts ? Assemb… STOP !!!

Eh non, ce n’est pas encore pour tout de suite. 😆 Non, ne me regardez pas avec ces yeux-là ! Oui, ceux-là ! :colere2:
Ça va bientôt venir, mais il faut que je vous explique une dernière chose avant de pouvoir vous lancer.

Boundary

Je vais enfin vous expliquer ce que contient la fameuse variable $boundary. 🙂
Tout d’abord, pour vous donner une idée, boundary se traduit en français par frontière.

Boundary va donc nous permettre de séparer les différentes parties de notre e-mail, et c’est OBLIGATOIRE. On pourrait les considérer comme des super-balises.

Le format d’une boundary est le suivant :

Citation : Format

—-=Chaîne_aléatoire

Pour générer cette chaîne, nous allons utiliser deux fonctions PHP. Tout d’abord, la fonction rand(), qui permet d’obtenir un nombre aléatoire, puis la fonction md5(), qui permet de hacher une chaîne (ici, nous hacherons ce que la fonction rand() nous sortira).

Ainsi, si vous avez bien compris ce que je vous ai expliqué, vous devriez avoir écrit un code comme celui-ci :

<?php
$boundary = "-----=".md5(rand());
?>

Et voilà ! Notre boundary est créée. 🙂

Si nous utilisons ces deux méthodes c’est qu’il faut que le texte de la boundary ne soit pas présent dans notre corps de message sinon ça part droit à la catastrophe

Une boundary étant une frontière, il lui faut donc aussi une fin. Malheureusement, la création de la boundary comme cela ne pourra pas suffire pour le corps du message.
Il va falloir ajouter ces caractères devant à chaque fois que vous les utilisez en dehors de la déclaration qui se situe dans le header.

Citation : caractères

—

Il va aussi falloir fermer la boundary.
Pour fermer, il suffit de la réutiliser en l’ajoutant à la fin.

Citation : Fin de boundary

—

Et voilà qui termine cette partie sur les boundary.

Schéma final du message

Voilà ! Je vais maintenant vous dire comment faire l’assemblage avec cette dernière info.

Citation : Schéma

Ouverture boundary.
Déclaration de type (exemple texte).
Texte.
Ouverture boundary.
Déclaration de type (exemple HTML).
HTML.
Fermeture boundary.
Fermeture boundary.

Et voilà ! Je pense que je n’ai plus grand-chose à vous apprendre sur ce sujet. Je vous offre juste un dernier exemple de code complet pour que vous puissiez l’analyser.

<?php
$mail = '[email protected]'; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-][email protected](hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
$message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
//==========
 
//=====Création de la boundary
$boundary = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Hey mon ami !";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header.= "Reply-to: \"WeaponsB\" <[email protected]>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
 
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
 
//=====Envoi de l'e-mail.
mail($mail,$sujet,$message,$header);
//==========
?>

Annexe : joindre un fichier

Voyons maintenant comment joindre un fichier dans un e-mail.

Changement de l’en-tête

Bon, comme je vous l’ai déjà expliqué dans les précédentes parties, lorsque l’on souhaite envoyer un e-mail en texte et en HTML, on doit déclarer dans le header le Content-Type : multipart/alternative.

Ça, c’était pour du texte et du HTML. Pour pouvoir joindre un fichier, cela va changer un petit peu. 😉
En effet, le Content-Type : multipart/alternative prévient le client qu’il va recevoir du texte et du HTML, mais pas un ou plusieurs fichiers. Pour cela, on va utiliser le Content-Type : multipart/mixed qui, lui, prévient juste le client qu’il va recevoir plusieurs parties différentes.

Maintenant, après les modifications, votre header devrait ressembler à cela :

<?php
//=====Création du header de l'e-mail.
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header .= "Reply-to: \"WeaponsB\" <[email protected]>".$passage_ligne;
$header .= "MIME-Version: 1.0".$passage_ligne;
$header .= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
?>

Maintenant, avant d’aller plus loin, il va nous falloir comprendre ce qu’est réellement un fichier.

Citation : Définition d’un fichier

Un fichier est en fait une suite de caractères. Ces caractères sont par la suite interprétés par le logiciel que vous utilisez pour l’ouvrir.

Je pense que, maintenant, vous avez compris comment nous allons procéder pour joindre un fichier à un e-mail.
Il va donc nous falloir lire le contenu du fichier pour, par la suite, l’ajouter dans le courriel.
Comme mon tutoriel ne porte pas sur la gestion de fichier en PHP, je vais juste vous donner le code que j’utilise pour lire les fichiers joints à mes e-mails.

<?php
$fichier   = fopen("image.jpg", "r");   //on ouvre le fichier en lecture seule.
$attachement = fread($fichier, filesize("image.jpg")); //on lit l'ensemble du fichier avec la fonction fread.
fclose($fichier); //on ferme le fichier.
?>

Maintenant que nous avons le contenu de notre fichier, nous allons devoir l’encoder en 64 bits.

Whaouu !! Encoder ? C’est quoi, ça ? Moi je n’y connais rien en codage !

Pas de problème. Encoder, c’est remplacer un caractère ou une suite de caractères par un ou une autre. 🙂
Comment encoder un fichier en 64 bits ? Grâce au PHP, rien de plus simple ! En effet, il existe une fonction qui fait ça tout seul. C’est pas beau, ça ?

Il s’agit de la fonction base64_encode(), que l’on va utiliser comme ceci :

<?php
$attachement = chunk_split(base64_encode($attachement));
?>

Au passage, vous remarquerez que j’ai également utilisé la fonction chunk_split(), qui sert, lorsqu’elle n’a pas de second argument, à effectuer un retour à la ligne tous les 76 caractères, ce qui permet de respecter la norme RFC 2045.

Voilà. Maintenant que nous avons notre fichier dans une variable et qu’il est au bon format, on va pouvoir l’ajouter à notre e-mail.

Pour l’ajouter, on va faire comme lorsque l’on voulait déclarer soit du texte, soit du HTML.
La déclaration se voit quand même quelque peu enrichie. On va devoir maintenant déclarer :

  • le nom du fichier ;

  • Content-Disposition: XXXXXX; filename=”Nom_du_fichier”.

Le Content-Disposition permet de dire que ce qui suit devra être en fichier joint. Pour cela, on lui donnera la valeur attachment.
Ce qui, en code, nous donnera :

<?php
$message.= "Content-Disposition: attachment; filename=\"nom_fichier\"".$passage_ligne;
?>

Le Content-Type va lui aussi changer. En effet, rappelez-vous, c’est lui qui détermine à quoi correspondent les caractères entre les deux boundary. Le problème dans le cas présent, c’est que le Content-Typedépendra du fichier que vous voulez joindre. :'( Il faudra donc le faire varier en fonction de l’extension du fichier que vous envoyez. Ces types sont définis par l’IANA. Vous trouverez ici une liste non exhaustive des différents types disponibles, avec descriptions.
Comme dans cet exemple, nous allons joindre le fichier image.jpg et nous allons utiliser le Content-Type:image/jpeg. Lors de la déclaration d’un Content-Type qui sert à joindre un fichier, on doit aussi déclarer le nom du fichier joint. Au final, nous obtiendrons une déclaration du Content-Type similaire à celle-ci :

<?php
$message.= "Content-Type: image/jpeg; name=\"nom_fichier\"".$passage_ligne;
?>

Maintenant que nous avons vu les différentes étapes, je vous donne la déclaration que vous devriez avoir obtenue si vous m’avez bien suivi.

<?php
$message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;
?>

Bon, maintenant, vous pensez que l’on va pouvoir directement envoyer le fichier joint ? Eh bien non. :p
Évidemment, cela aurait été trop simple. Car si jamais vous essayez d’insérer directement votre fichier joint dans le courriel, la personne qui va le recevoir aura un e-mail avec ce schéma :

  • e-mail en texte,

  • e-mail en HTML,

  • pièce jointe.

Ce problème est dû au changement du Content-Type :multipart/mixed. Pour résoudre ce problème, on va devoir déclarer à nouveau un Content-Type : et une autre boundary. Pour vous expliquer le mieux possible, je vais vous faire une comparaison entre le schéma actuel et le schéma final.

Citation : Schéma actuel

Ouverture boundary.
Déclaration de type (exemple texte).
Texte.
Ouverture boundary.
Déclaration de type (exemple HTML).
HTML.
Fermeture boundary.
Fermeture boundary.

Citation : Schéma final

Ouverture boundary.
Déclaration du nouveau content-type et de la seconde boundary.
Ouverture boundary_2.
Déclaration de type (exemple texte).
Texte.
Ouverture boundary_2.
Déclaration de type (exemple HTML).
HTML.
Fermeture boundary_2.
Ouverture boundary.
Déclaration de la pièce jointe.
Fermeture boundary.

Voilà pour finir le code final.

<?php
$mail = '[email protected]'; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-][email protected](hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
$message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
//==========
 
//=====Lecture et mise en forme de la pièce jointe.
$fichier   = fopen("image.jpg", "r");
$attachement = fread($fichier, filesize("image.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
 
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Hey mon ami !";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header.= "Reply-to: \"WeaponsB\" <[email protected]>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
 
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
 
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
 
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
 
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========
 
 
 
$message.= $passage_ligne."--".$boundary.$passage_ligne;
 
//=====Ajout de la pièce jointe.
$message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
//========== 
//=====Envoi de l'e-mail.
mail($mail,$sujet,$message,$header);
 
//==========
?>

Annexe : FAQ

J’ai décidé de créer cette partie pour y ranger les informations qui ont été distribuées dans les commentaires, cela permet de tout regrouper clairement.

Q : J’ai suivi le tuto, mais l’e-mail envoyé est vide.
R : Il faut tenter de remplacer les par des uniquement, certains agents de transfert e-mail remplacent automatiquement le par , ce qui fait que l’on se retrouve alors avec .
Edit : Normalement, problème réglé avec la dernière version du tuto, ajouter le domaine posant problème dans le filtre du RegEx.

Q : J’utilise Wampserver / EasyPhp et j’ai une erreur de ce type :

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\XXXXXX.php on line XX

R : Il vous faut configurer un serveur smtp pour envoyer votre e-mail depuis votre PC en local ; pour ce faire, il faut éditer le fichier php.ini.

Q : J’ai suivi le tuto, mais mes e-mails tombent toujours dans la corbeille.
R : Malheureusement, il n’y a pas de solution miracle… Certains serveurs électroniques filtrent plus ou moins…

Q : Je veux pouvoir mettre plusieurs pièces jointes dans un même courriel.
R : Il faut placer une boundary pour chaque pièce jointe. Exemple avec le schéma du tuto :

Citation : Schéma final

Ouverture boundary.
Déclaration du nouveau content-type et de la seconde boundary.
Ouverture boundary_2.
Déclaration de type (exemple texte).
Texte.
Ouverture boundary_2.
Déclaration de type (exemple HTML).
HTML.
Fermeture boundary_2.
Ouverture boundary.
Déclaration de la pièce jointe 1.
Ouverture boundary.
Déclaration de la pièce jointe 2.
Ouverture boundary.
Déclaration de la pièce jointe […].
Ouverture boundary.
Déclaration de la pièce jointe n.
Fermeture boundary.

Q : Mon fichier joint est corrompu quand je tente de l’ouvrir.
R : Vérifiez que le content-type est correct.


Annexe : les prioritées

Aujourd’hui nous allons voir comment définir une priorité à nos emails : attention à cette fonctionnalité, en effet si tous vos emails sont en priorités maximum les personnes qui les reçoivent n’y feront plus attention…

Il y a 4 priorités différentes (en fait il y en a 5, mais la priorité “normale” n’est à mon sens pas une priorité).

Littérale

Correspondance norme

Maximum

1

Haute

2

Normale

3

Basse

4

Minimale

5

Maintenant pour définir la priorité dans l’email il faut ajouter une ligne dans le header :

<?php
//=====Création du header de l'e-mail
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header .= "Reply-to: \"WeaponsB\" <[email protected]>".$passage_ligne;
$header .= "MIME-Version: 1.0".$passage_ligne;
$header .= "X-Priority: 3".$passage_ligne;
$header .= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
?>

Ce tutoriel est enfin terminé.

Je pense avoir réussi à vous apprendre comment envoyer correctement un e-mail en PHP. Certaines personnes me feront peut-être remarquer que je n’ai pas tout traité ! En effet, mais s’il y a des choses que je n’ai pas abordées, c’est tout simplement parce que je ne les maîtrise pas encore totalement (l’inclusion d’une image à l’intérieur d’un e-mail, par exemple). Je préfère donc ne pas en parler du tout, plutôt que de me risquer à écrire n’importe quoi. 🙂

Print Friendly, PDF & Email

Partager Sur les Réseaux :

  • Cliquez pour partager sur Twitter(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Facebook(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur WhatsApp(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Telegram(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur LinkedIn(ouvre dans une nouvelle fenêtre)
  • Cliquer pour imprimer(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Skype(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Pinterest(ouvre dans une nouvelle fenêtre)
  • Cliquez pour envoyer par e-mail à un ami(ouvre dans une nouvelle fenêtre)

Articles similaires

Tags: [E-mail] Envoyer un e-mail en PHP
article précédent

Télécharger le cours programmez-avec-le-langage-c++

Prochain article

Télécharger SlowDNSPremium apk

Prochain article
Télécharger SlowDNSPremium apk

Télécharger SlowDNSPremium apk

Laisser un commentaire Annuler la réponse.

Article conseillé.

miraclebox v2.70 Crack  by romoulai.com

MIRACLE BOX

4 mars 2021

Comment parier sur le football

19 janvier 2019
Publicité

Tendance.

miracle box 2.82 dernière version cracker by romoulai.com

miracle box 2.82 dernière version cracker by romoulai.com

8 février 2020

TÉLÉCHARGER IDM CRACKER 32 /64 bit

25 novembre 2018
Microsoft Office Professional Plus 2013

télécharger Microsoft office 2013 gratuit version complète français 32 bits

4 septembre 2018
GSM Aladdin v2 1.42 crack boite sans box 2018

GSM Aladdin v2 1.42 crack boite sans box 2018

4 octobre 2018
Microsoft System Windows 7  AiO v5 French x86_x64 bits

Microsoft System Windows 7 AiO v5 French x86_x64 bits

26 octobre 2019

TRANSLATE THE WEBSITE

fr Français
ar العربيةzh-CN 简体中文nl Nederlandsen Englishfr Françaisde Deutschit Italianopt Portuguêses Españolyo Yorùbá

PROFITEZ D’UN SERVICE DE QUALITE AVEC SERRURIER GENEVE

Un réseau de serruriers hors pair couvrent tout le canton de Genève
Avec plus de 500.000 habitants, la région Genevoise est la deuxième plus peuplée de Suisse. Elle est également connue pour son trafic en heure de pointe où, il peut être très compliqué d’y circuler. Par conséquent, si vous rencontrez un problème de porte de serrure ou une urgence suite à un vol ou un cambriolage par exemple, il est essentiel qu’un serrurier rapide puisse intervenir dès que possible

Profitez d’un service de qualité et sans mauvaises surprises
Serrurier Genève

Suivez nous

ABONNEZ-VOUS A LA PAGE FACEBOOK

ABONNEZ-VOUS A LA PAGE FACEBOOK

REJOIGNEZ-NOUS SUR FACEBOOK.

  • À propos de
  • Partenariat & publicité
  • Privacy & Policy
  • Contact

© 2021 ROMOULAI.COMEst une entreprise de creation de site web & De Tutoriels ROMOULAI.COM.

Pas de résultat
Voir tous les résultats
  • ROM FLASH PHONE
  • MUSIQUE
  • Account
  • ACCUEIL
  • Activation
  • Authors
  • Buttons
  • Buttons
  • Checkout-Result
  • Columns
  • comment devenir un programmeur en informatique
  • CONSEIL DE SECURITE
  • Contacter Nous
  • COURS POUR LES ÉLÈVES
  • Création de mon site internet
  • DC UNLOCKER
  • Devenir Membre Premium
  • Devenir Premium
  • Devenir Premium
  • Devenir Premium
  • DEVENIR RÉDACTEUR ROMOULAI
  • FAIT UN DON
  • Flux d’activités
  • Formation Complète Développeur Web
  • Google Maps
  • Home 3
  • Home 4
  • Home 5
  • Horizontal Dividers
  • Icon Box
  • Icon Box
  • Icons
  • Images Gallery
  • Lightbox
  • LightBox
  • Lists
  • LOGICIELS ET JEUX
  • LOGICIELS GRATUIT
  • Login Customizer
  • Login Page
  • Login Required
  • Membres
  • Mon compte
  • mot de passe pour miracle box 2.82 cracker
  • Multiple Pages
  • MUSIQUE GRATUIT TOUS GENRES
  • My Account
  • My Account
    • Change Password
    • Edit My Address
    • Logout
    • Lost Password
    • View Order
  • Offres d’emploi Recrutement chez romoulai.com
  • outil
  • Page / Post Elements
  • Password Reset
  • Politique de confidentialité
  • Portfolio – Four Columns Filter
  • Portfolio – Four Columns Pagination
  • Portfolio – One Column Filter
  • Portfolio – One Column Pagination
  • Portfolio – Three Columns Filter
  • Portfolio – Three Columns Pagination
  • Portfolio – Two Columns Filter
  • Portfolio – Two Columns Pagination
  • Portfolio With Filter And Pagination
  • Portfolio Without Filter And Pagination
  • Products
  • Progress Bars
  • Promotion Boxes
  • Quotes
  • RECHARGER VOTRE BTC, PM, ETH, PR, PP
  • Recherche Disponibilité
  • Résultats de la recherche
  • ROM FIRMWARE ALCATEL
  • ROM FIRMWARE INFINIX CATÉGORIES
  • ROM FIRMWARE ITEL CATÉGORIES
  • ROM FIRMWARE SAMSUNG CATÉGORIES
  • ROM FIRMWARE TECNO MOBILE CATÉGORIES
  • S’inscrire
  • Sample Page
  • Sample Page
  • Se Connecter
  • Se Déconnecté
  • SHORTCODES
  • Tags
  • Téléchargement des cours informatique en PDF
  • Téléchargement des cours informatique en PDF
  • TÉLÉCHARGEMENT- MUSIQUE – TRADUCTIONNELLE DAN GRATUITE
  • Theme plugins Premium WordPress
  • TRADUIT LE SITE
  • TUTORIELS EN VIDÉO
    • Comment faire pour Flasher les ROM Firmware Samsung
  • TUTORIELS FREE
  • Typography
  • UTILISATEUR
  • Video
  • WPForms Preview

© 2021 ROMOULAI.COMEst une entreprise de creation de site web & De Tutoriels ROMOULAI.COM.

Nous saluons le retour!

Connectez-vous au compte

mot de passe oublié? S'inscrire

Créer un nouveau compte!

Remplissez le formulaire pour vous inscrire

Tous les champs sont requis. S'identifier

Récupérez votre mot de passe

Entrez les détails pour réinitialiser le mot de passe

S'identifier
Logo
Vous n’avez pas encore de compte ? S’inscrire maintenant

Add New Playlist

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?
×

Hello!

Click one of our representatives below to chat on WhatsApp or send us an email to [email protected]

John Doe
Support John Doe

Powered by WhatsApp Chat

× Comment puis-je vous aider ?
loading Annuler
L'article n'a pas été envoyé - Vérifiez vos adresses e-mail !
La vérification e-mail a échoué, veuillez réessayer
Impossible de partager les articles de votre blog par e-mail.