IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Envois de mail html bug [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut Envois de mail html bug
    Bonjour,

    J'ai créé une application sous php 5.3, dans cette application un module permet d'envoyer des e-mail aux membres inscrit et tout fonctionne très bien sous la version 5.3 de php mais ça ce complique avec l'upgrade du serveur en php 5.4.
    Le problème que je rencontre est que le mail envoyé est reçu avec toutes les balises HTML et en devient illisible, mais bien sûre par sur tout les outils mail.

    voici donc mon code actuel pour l'envois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    function sendMail($message, $mail, $sujet, $fichier, $path, $expediteur, $mailExpediteur, $nom, $prenom)
    {
    	$nom = ucfirst(strtolower($nom));
    	$messageStart = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p> Concerne '.$prenom. ' ' .$nom. '<BR></p>';
    	$messageEnd = '</body></html>';
     
    	$message_html = $messageStart .$message .$messageEnd;
     
    	if (!preg_match("#^[a-z0-9._-]+@(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";
    	}
     
    	//=====Création de la boundary.
    	$boundary = "-----=".md5(rand());
    	$boundary_alt = "-----=".md5(rand());
    	//==========
     
    	//=====Création du header de l'e-mail.
    	$header = "From: \"".$expediteur."\"<noreply@mon domaine.xxx>".$passage_ligne;
    	$header.= "Reply-to: \"".$expediteur."\" <".$mailExpediteur.">".$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;
    	$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
    	$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
    	//==========
     
    	$message.= $passage_ligne."--".$boundary.$passage_ligne;
     
    	//=====Ajout du message au format HTML
    	$message.= "Content-Type: text/html; charset='UTF-8'".$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;
    	//==========
     
    	foreach($fichier as $pieceJointe)
    	{
    		$file = $path .$pieceJointe;
    		$message.= $passage_ligne."--".$boundary.$passage_ligne;
    		//=====Lecture et mise en forme de la pièce jointe.
    		$fichier   = fopen($file, "r");
    		$attachement = fread($fichier, filesize($file));
    		$attachement = chunk_split(base64_encode($attachement));
    		fclose($fichier);
    		//==========
     
    		//=====Ajout de la pièce jointe.
    		$message.= "Content-Type: application/octet-stream; name=\"".$pieceJointe."\"".$passage_ligne;
    		$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    		$message.= "Content-Disposition: attachment; filename=\"".$pieceJointe."\"".$passage_ligne;
    		$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
     
    		//==========
    	}
    	$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
     
    	//=====Envoi de l'e-mail.
     
    	//$sujet = utf8_decode($sujet);
    	//$sujet = mb_encode_mimeheader($sujet,"UTF-8");
     
    	if($mail != "")
    	{
    		mail($mail, $sujet, $message, $header);
    	}
     
    	//==========
    }
    je vous remercie d'avance pour votre aide,
    Bonne journée

  2. #2
    Membre du Club

    Homme Profil pro
    Full Stack Web Developer
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Full Stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Points : 63
    Points
    63
    Billets dans le blog
    2
    Par défaut
    Bonjour safraga,

    Avant tout, quel est l'OS et le type d'hébergement du serveur PHP 5.4?

    La variable $boundary_alt est superflue. D'après les spécifications, il ne faut qu'une seule définition de boundary. De plus, elle cause un output et je me demande si cela ne serait pas le problème à l'origine de vos ennuis.
    Voici la spécification RFC contenant un exemple qui devrait vous aider à comprendre la structure à réaliser.

    Vous pouvez forcer le CRLF (\r\n) en fin de ligne, cela devrait améliorer la compatibilité avec certain clients notamment sur *nix.

    Satisfaire les exigences de certains clients mails aujourd'hui est devenue une tâche très difficile, de ce fait, il est souvent plus judicieux d'utiliser PHPMailer qui permet de résoudre les problèmes actuels et futures que vous allez rencontrer.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bonjour Nic0tiN,

    Je vous remercie pour votre réponse.

    Pour répondre à votre demande, il s'agit d'un hébergement mutualisé sur serveur virtuel Linux p5601 2.6.32 & apache2.

    Pour ce qui est de mon problème, j'ai recodé du début la fonction send_mail et effectivement il y avait un problème au niveau des boundarys. Maintenant cela fonctionne mais il reste un problème au niveau des accents.

    Voici le code fonctionnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    function sendMail($message, $mail, $sujet, $fichier, $path, $expediteur, $mailExpediteur, $nom, $prenom)
    {
    	$nom = ucfirst(strtolower($nom));
    	$messageStart = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p> Concerne '.$prenom. ' ' .$nom. '<BR></p>';
    	$messageStart =(stripslashes($messageStart));
    	$messageEnd = '</body></html>';
     
    	$message_html = $messageStart .$message .$messageEnd;
     
    	if (!preg_match("#^[a-z0-9._-]+@(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";
    	}
     
    	//=====Création de la boundary.
    	$boundary = "-----=".md5(uniqid(rand()));
    	//==========
     
    	//=====Création du header de l'e-mail.
    	$header = "From: \"".$expediteur."\"<noreply@gesticlub.ch>".$passage_ligne;
    	$header.= "Reply-to: \"".$expediteur."\" <".$mailExpediteur.">".$passage_ligne;
    	$header.= "MIME-Version: 1.0".$passage_ligne;
    	$header.= "Content-Type: multipart/related; boundary=\"$boundary\"".$passage_ligne;
    	$header.= $passage_ligne;
    	//==========
     
    	//--------------------------------------------------
    	// Construction du message proprement dit
    	//--------------------------------------------------
     
    	$message = $message_html .$passage_ligne;
     
    	//--------------------------------------------------
    	// 1ère partie du message :
    	// Le texte html
    	//--------------------------------------------------
    	$message .= "--$boundary".$passage_ligne;
    	$message .= "Content-Type: text/html; charset='UTF-8'".$passage_ligne;
    	$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    	$message .= $passage_ligne;
    	$message .= $message_html;
    	$message .= $passage_ligne;
     
    	//--------------------------------------------------
    	// 2ème partie du message :
    	// Les pièces jointes
    	//--------------------------------------------------
     
    	foreach($fichier as $pieceJointe)
    	{
    		$file = $path .$pieceJointe;
     
    		//=====Lecture et mise en forme de la pièce jointe.
    		$fichier   = fopen($file, "rb");
    		$attachement = fread($fichier, filesize($file));
    		fclose($fichier);
    		$attachement = chunk_split(base64_encode($attachement));
    		//==========
     
    		$message .= "--$boundary".$passage_ligne;
     
    		//=====Ajout de la pièce jointe.
    		$message.= "Content-Type: application/octet-stream; name=\"".$pieceJointe."\"".$passage_ligne;
    		$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    		$message.= "Content-Disposition: attachment; filename=\"".$pieceJointe."\"".$passage_ligne;
    		$message .= $passage_ligne;
    		$message .= $attachment .$passage_ligne;
    		$message .= $passage_ligne .$passage_ligne;
    		//==========
    	}
    	$message .= "--$boundary".$passage_ligne;
     
    	//=====Envoi de l'e-mail.
     
    	$sujet = utf8_decode($sujet);
    	$sujet = mb_encode_mimeheader($sujet,"UTF-8");
     
    	if($mail != "")
    	{
    		mail($mail, $sujet, $message, $header);
    	}
     
    	//==========
    }
    Je souhaiterais maintenant corriger le bug des accents, dans la version précédente de mon appli j’utilisais la fonction suivante pour corriger les erreurs d’accents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlentities(utf8_decode($message_html))
    Mais avec PHP 5.4 cela ne fonctionne plus.

    merci d'avance pour votre aide,
    Meilleures salutations

  4. #4
    Membre du Club

    Homme Profil pro
    Full Stack Web Developer
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Full Stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Points : 63
    Points
    63
    Billets dans le blog
    2
    Par défaut
    Lorsqu'il s'agit d'encodage, le problème est beaucoup plus facile à résoudre lorsqu'on connaît l'encodage de chaque élément; les différents liens vers et dans la base de données, le fichier contenant le code source et/ou le texte,...

    La version ci-dessous part du principe que le texte, s'il n'est pas en UTF-8, est en ISO-8859-1 et que les fichiers sources sont encodés en UTF-8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    function sendMail($message, $mail, $sujet, $fichier, $path, $expediteur, $mailExpediteur, $nom, $prenom)
    {
    	$nom = ucfirst(strtolower($nom));
    	$messageStart = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p> Concerne '.$prenom. ' ' .$nom. '<BR></p>';
    	$messageStart =(stripslashes($messageStart));
    	$messageEnd = '</body></html>';
     
        if(!mb_detect_encoding($message, 'UTF-8', true)) { // Contrôle si on doit convertir la chaîne
            $message = utf8_encode($message); // Converti un texte ISO-8859-1 en UTF-8
        }
     
    	$message_html = $messageStart .$message .$messageEnd;
     
    	if (!preg_match("#^[a-z0-9._-]+@(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";
    	}
     
    	//=====Création de la boundary.
    	$boundary = "-----=".md5(uniqid(rand()));
    	//==========
     
    	//=====Création du header de l'e-mail.
    	$header = "From: \"".$expediteur."\"<noreply@gesticlub.ch>".$passage_ligne;
    	$header.= "Reply-to: \"".$expediteur."\" <".$mailExpediteur.">".$passage_ligne;
    	$header.= "MIME-Version: 1.0".$passage_ligne;
    	$header.= "Content-Type: multipart/related; boundary=\"$boundary\"".$passage_ligne;
    	$header.= $passage_ligne;
    	//==========
     
    	//--------------------------------------------------
    	// Construction du message proprement dit
    	//--------------------------------------------------
     
    	$message = $message_html .$passage_ligne;
     
    	//--------------------------------------------------
    	// 1ère partie du message :
    	// Le texte html
    	//--------------------------------------------------
    	$message .= "--$boundary".$passage_ligne;
    	$message .= "Content-Type: text/html; charset='UTF-8'".$passage_ligne;
    	$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    	$message .= $passage_ligne;
    	$message .= $message_html;
    	$message .= $passage_ligne;
     
    	//--------------------------------------------------
    	// 2ème partie du message :
    	// Les pièces jointes
    	//--------------------------------------------------
     
    	foreach($fichier as $pieceJointe)
    	{
    		$file = $path .$pieceJointe;
     
    		//=====Lecture et mise en forme de la pièce jointe.
    		$fichier   = fopen($file, "rb");
    		$attachement = fread($fichier, filesize($file));
    		fclose($fichier);
    		$attachement = chunk_split(base64_encode($attachement));
    		//==========
     
    		$message .= "--$boundary".$passage_ligne;
     
    		//=====Ajout de la pièce jointe.
    		$message.= "Content-Type: application/octet-stream; name=\"".$pieceJointe."\"".$passage_ligne;
    		$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    		$message.= "Content-Disposition: attachment; filename=\"".$pieceJointe."\"".$passage_ligne;
    		$message .= $passage_ligne;
    		$message .= $attachment .$passage_ligne;
    		$message .= $passage_ligne .$passage_ligne;
    		//==========
    	}
    	$message .= "--$boundary".$passage_ligne;
     
    	//=====Envoi de l'e-mail.
        if(!mb_detect_encoding($sujet, 'UTF-8', true)) { // Contrôle si on doit convertir la chaîne
            $sujet = utf8_encode($sujet); // Converti un texte ISO-8859-1 en UTF-8
        }
     
        if($mail != "")
    	{
    		mail($mail, $sujet, $message, $header);
    	}
     
    	//==========
    }

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Je viens de constater qu'il restait un bug...

    En effet dans la dernière version que j'ai publié sur ce poste envoyais bien les pièces jointes ainsi que le corp du message, mais les pièces jointes étaient corrompuent.
    J'ai donc repris l'ensemble du code une fois de plus et j'ai trouvé la solution dont voici le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    function sendMail($message, $mail, $sujet, $fichier, $path, $expediteur, $mailExpediteur, $nom, $prenom)
    {
    	$nom = ucfirst(strtolower($nom));
    	$messageStart = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p> Concerne '.$prenom. ' ' .$nom. '<BR></p>';
    	$messageStart =(stripslashes($messageStart));
    	$messageEnd = '</body></html>';
     
    	//===== Contrôle si on doit convertir la chaîne =====
    	if(!mb_detect_encoding($message, 'UTF-8', true))
    	{
    		$message = utf8_encode($message); // Converti un texte ISO-8859-1 en UTF-8
        }
     
    	$message_html = $messageStart .$message .$messageEnd;
     
    	if (!preg_match("#^[a-z0-9._-]+@(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";
    	}
     
    	//===== Création de la boundary.
    	$boundary = "-----=".md5(uniqid(rand()));
    	$boundary_alt = "-----=".md5(uniqid(rand()));
    	//==========
     
    	//=====Création du header de l'e-mail.
    	$header = "From: \"".$expediteur."\"<noreply@mondomaine.xxx>".$passage_ligne;
    	$header.= "Reply-to: \"".$expediteur."\" <".$mailExpediteur.">".$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;
     
    	//=====Ajout du message au format HTML.
     
        $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
        $message.= "Content-Type: text/html; charset='UTF-8'".$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;
    	//==========
     
    	//=====Ajout des pièces jointes.
    	foreach($fichier as $pieceJointe)
      	{
    		$file = $path .$pieceJointe;
        	$message.= $passage_ligne."--".$boundary.$passage_ligne;
     
    		//=====Lecture et mise en forme de la pièce jointe.
    		$fichier   = fopen($file, "r");
    		$attachement = fread($fichier, filesize($file));
    		$attachement = chunk_split(base64_encode($attachement));
    		fclose($fichier);
    		//==========
     
     		$message.= "Content-Type: application/octet-stream; name=\"".$pieceJointe."\"".$passage_ligne;
    		$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
    		$message.= "Content-Disposition: attachment; filename=\"".$pieceJointe."\"".$passage_ligne;
    		$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
      	}
    	$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
     
    	//=====Envoi de l'e-mail.
     
    	$sujet = utf8_decode($sujet);
    	$sujet = mb_encode_mimeheader($sujet,"UTF-8");
     
    	if($mail != "")
    	{
    		mail($mail, $sujet, $message, $header);
    	}
     
    	//==========
    }
    Pour les accents, je n'ai pas eu de retour pour l'instant, je verrai en fonction, mais ça à l'air de fonctionner.

    Nic0tiN encore un grand merci pour votre aide, je pense pouvoir passer ce poste en résolu.

    Bon dimanche

  6. #6
    Membre du Club

    Homme Profil pro
    Full Stack Web Developer
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Full Stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Points : 63
    Points
    63
    Billets dans le blog
    2
    Par défaut
    Je vous propose une dernière version fonctionnelle qui s'affranchit de la boundary alternative et qui corrige un problème avec l'expéditeur. Il manquait un espace dans l'en-têtre From.
    J'ai laissé la conversion du sujet, mais j'avoue ne pas comprendre pourquoi le convertir en ISO-8859-1 pour ensuite le reconvertir en UTF-8. La conversion du sujet va échouer si le texte n'est pas en UTF-8 et qu'il contient des caractères accentués. Je suggère d'utiliser la même technique que pour la conversion du texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    function sendMail($message, $mail, $sujet, $fichier, $path, $expediteur, $mailExpediteur, $nom, $prenom)
    {
        $nom = ucfirst(strtolower($nom));
        $messageStart = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p> Concerne '.$prenom. ' ' .$nom. '<BR></p>';
        $messageStart =(stripslashes($messageStart));
        $messageEnd = '</body></html>';
     
        //===== Contrôle si on doit convertir la chaîne =====
        if(!mb_detect_encoding($message, 'UTF-8', true))
        {
            $message = utf8_encode($message); // Converti un texte ISO-8859-1 en UTF-8
        }
     
        $message_html = $messageStart .$message .$messageEnd;
     
        if (!preg_match("#^[a-z0-9._-]+@(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";
        }
     
        //===== Création de la boundary.
        $boundary = "-----=".md5(uniqid(rand()));
        //==========
     
        //=====Création du header de l'e-mail.
        $header = "From: \"".$expediteur."\" <noreply@mondomaine.xxx>".$passage_ligne;
        $header.= "Reply-to: \"".$expediteur."\" <".$mailExpediteur.">".$passage_ligne;
        $header.= "MIME-Version: 1.0".$passage_ligne;
        $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
        //==========
     
        //=====Ajout du message au format HTML.
        $message = "--$boundary".$passage_ligne;
        $message .= "Content-Type: text/html; charset=UTF-8".$passage_ligne;
        $message .= $passage_ligne.$message_html.$passage_ligne;
     
        //=====Ajout des pièces jointes.
        foreach($fichier as $pieceJointe)
        {
            $file = $path .$pieceJointe;
            $message.= $passage_ligne."--".$boundary.$passage_ligne;
     
            //=====Lecture et mise en forme de la pièce jointe.
            $fichier   = fopen($file, "r");
            $attachement = fread($fichier, filesize($file));
            $attachement = chunk_split(base64_encode($attachement));
            fclose($fichier);
            //==========
     
            $message.= "Content-Type: application/octet-stream; name=\"".$pieceJointe."\"".$passage_ligne;
            $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
            $message.= "Content-Disposition: attachment; filename=\"".$pieceJointe."\"".$passage_ligne;
            $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
        }
        $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
     
        //=====Envoi de l'e-mail.
     
        $sujet = utf8_decode($sujet); // Pourquoi? S'il est déjà en UTF-8, il n'est pas nécessaire de le re-convertir
        $sujet = mb_encode_mimeheader($sujet,"UTF-8");
     
        if($mail != "")
        {
            mail($mail, $sujet, $message, $header);
        }
     
        //==========
    }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Je vous remercie, ça fonctionne parfaitement, j'ai aussi remis le test pour la conversion du sujet et tout à l'aire très bien.

    Merci encore pour votre aide, bonne semaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    function sendMail($message, $mail, $sujet, $fichier, $path, $expediteur, $mailExpediteur, $nom, $prenom)
    {
        $nom = ucfirst(strtolower($nom));
        $messageStart = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p> Concerne '.$prenom. ' ' .$nom. '<BR></p>';
        $messageStart =(stripslashes($messageStart));
        $messageEnd = '</body></html>';
     
        //===== Contrôle si on doit convertir la chaîne =====
        if(!mb_detect_encoding($message, 'UTF-8', true))
        {
            $message = utf8_encode($message); // Converti un texte ISO-8859-1 en UTF-8
        }
     
        $message_html = $messageStart .$message .$messageEnd;
     
        if (!preg_match("#^[a-z0-9._-]+@(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";
        }
     
        //===== Création de la boundary.
        $boundary = "-----=".md5(uniqid(rand()));
        //==========
     
        //=====Création du header de l'e-mail.
        $header = "From: \"".$expediteur."\" <noreply@mondomaine.xxx>".$passage_ligne;
        $header.= "Reply-to: \"".$expediteur."\" <".$mailExpediteur.">".$passage_ligne;
        $header.= "MIME-Version: 1.0".$passage_ligne;
        $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
        //==========
     
        //=====Ajout du message au format HTML.
        $message = "--$boundary".$passage_ligne;
        $message .= "Content-Type: text/html; charset=UTF-8".$passage_ligne;
        $message .= $passage_ligne.$message_html.$passage_ligne;
     
        //=====Ajout des pièces jointes.
        foreach($fichier as $pieceJointe)
        {
            $file = $path .$pieceJointe;
            $message.= $passage_ligne."--".$boundary.$passage_ligne;
     
            //=====Lecture et mise en forme de la pièce jointe.
            $fichier   = fopen($file, "r");
            $attachement = fread($fichier, filesize($file));
            $attachement = chunk_split(base64_encode($attachement));
            fclose($fichier);
            //==========
     
            $message.= "Content-Type: application/octet-stream; name=\"".$pieceJointe."\"".$passage_ligne;
            $message.= "Content-Transfer-Encoding: base64".$passage_ligne;
            $message.= "Content-Disposition: attachment; filename=\"".$pieceJointe."\"".$passage_ligne;
            $message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
        }
        $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
     
        //=====Envoi de l'e-mail.
     
        //===== Contrôle si on doit convertir la chaîne =====
        if(!mb_detect_encoding($sujet, 'UTF-8', true))
        {
            $sujet = utf8_encode($sujet); // Converti un texte ISO-8859-1 en UTF-8
        }
     
        if($mail != "")
        {
            mail($mail, $sujet, $message, $header);
        }
     
        //==========
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [UNIX] envoi de mail HTML avec mailx
    Par darinze dans le forum Développement
    Réponses: 3
    Dernier message: 21/09/2011, 14h24
  2. Réponses: 4
    Dernier message: 19/03/2007, 12h03
  3. Réponses: 4
    Dernier message: 06/03/2006, 16h14
  4. [CSS] Envoi de mail html avec CSS et image jointe
    Par firejocker dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 03/03/2006, 08h53
  5. [Mail] [ mail() ] Envoie de mails HTML
    Par Olish dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2006, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo