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 :

Mail avec pièce jointe


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Par défaut Mail avec pièce jointe
    Bonjour,

    J'ai une couille quelque part dans ma fonction qui permet d'envoyer un mail avec pièces jointes :
    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
     
    function Envoi_Mail_en_Masse($lib_expediteur, $expediteur, $destinataire, $sujet, $texte, $idMail){
    	require_once 'classes/class_mail_pieces_jointes.php';
    	$AllPiecesJointes = new mail_pieces_jointes($GLOBALS['bdd']);
     
    	// permet de définir les différentes parties du mail
    	$limite = "----=_Part_".md5(uniqid(rand()));
     
    	// Pour envoyer un mail HTML, l'en-téte Content-type doit étre défini
    	$headers  = 'MIME-Version: 1.0' . "\r\n";
    	//$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    	$headers .="Content-Type: multipart/mixed; boundary=$limite\r\n";
     
    	// En-tétes additionnels
    	// Toutes les adresses sont envoyées en BCC pour étre masquées
    	$headers .= "From: $lib_expediteur <$expediteur>" . "\r\n";
     
    	if ($Environnement == "TEST") $headers .= "Cc: $expediteur" . "\r\n";
    	$headers .= "Bcc: $destinataire" . "\r\n";
     
     
    	$lemail = "--".$limite."\n";
    	//$lemail .= "Content-Type: text/html; charset='iso-8859-1'\n";
    	$lemail .= $texte;
     
    	// fichiers joints à attacher 
    	$attachement = ""; 
     
    	$LesFichiers = $AllPiecesJointes->selectAll($idMail);
    	foreach ($LesFichiers as $UnFic) {
    		$attachement .= "--".$limite."\n";
    		$attachement .= "Content-Type: text/plain; charset=iso-8859-1 name=" . $UnFic['Fichier'] . "\n";
    		$attachement .= "Content-Transfer-Encoding: base64\n";
    		$attachement .= "Content-Disposition: attachment; filename=" . $UnFic['Fichier'] . "\n\n";
     
    		// lecture du fichier présent sur le serveur
    		$fd = fopen($UnFic['Fichier'],"rb");
    		$contenu = fread($fd,filesize($UnFic['Fichier']));
    		fclose($fd);
     
    		// encodage en base64 pour que le fichier soit lisible
    		$attachement .= chunk_split(base64_encode($contenu));
    	}
     
    	// on ferme ensuite toutes les parties du mail
    	$attachement .= "\n\n--".$limite."--\n\n";
     
    	$corp_mail = "<html><body>
    				  $lemail
    				  </body></html>";
     
     
    	if ($Environnement == "TEST") {
    		$sujet = "/!\/!\ ENV TEST /!\/!\ - " . $sujet;
    		$corp_mail = "<font color='red'>----- ENVIRONNEMENT DE TEST -----</font><br><br>" . $corp_mail;
    	}
     
     
    	// en local, on appele pas la fonction mail, par contre, on affiche le corps du mail
    	if ($_SERVER['HTTP_HOST'] != "127.0.0.1") {
    		@mail("bidon@toto.fr", $sujet, $corp_mail.$attachement, $headers);
    	}
    	else
    		Afficher_Mail($expediteur, $destinataire, $sujet, $corp_mail);
    }
    Je voudrais envoyer le mail en html.
    Je reçois le mail, mais pas la pièce jointe ne le texte dans le corps du message. Sous Outllok, j'ai bien la trombone qui indique une pièce jointe

    Quelqu'un pourrait m'aiguiller, SVP.


    J'ai testé ma fonction ici et ça fonctionne :
    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
     
    <h1A>Test envoi de mail avec pièce jointe</h1A>
    <?php
    $aFicPieceJointe[] = "documents/Reglement_Interieur_du_Scf.pdf"; 
    $aFicPieceJointe[] = "images/andiplong.jpg";
    $aFicPieceJointe[] = "documents/Feuille_palanquée_vierge.xlsx";
     
    $objet_mail = "bidon"; // objet du mail 
    $desti_mail = "xxxxxxxx@gmail.com";// destinataire 
     
    // permet de définir les différentes parties du mail 
    $limite = "----=_Part_".md5(uniqid(rand())); 
     
    // headers du mail 
    $headers ="From: bidon@bidon.com\n"; 
    $headers .="MIME-Version: 1.0\n"; 
    $headers .="Content-Type: multipart/mixed; boundary=$limite\r\n"; 
     
    // corps du message 
    // partie texte 
    $texte = "--".$limite."\n"; 
    $texte .= "Content-Type: text/plain; charset='iso-8859-1'\n"; 
    $texte .= "Texte du mail bidon\n\n"; 
     
    // fichiers joints à attacher 
    $attachement = ""; 
     
    // tableau des fichiers à mettre en pièces jointes 
    echo "<br>Fichiers : "; print_r($aFicPieceJointe);
    if (is_array($aFicPieceJointe)) { 
    	for ($i=0 ; $i<count($aFicPieceJointe) ; $i++) {
    		$type_fichier = filetype("Reglement_Interieur_du_Scf.pdf");
    		$attachement .= "--".$limite."\n"; 
    		$attachement .= "Content-Type: text/plain; charset=iso-8859-1 name=$aFicPieceJointe[$i]\n"; 
    		$attachement .= "Content-Transfer-Encoding: base64\n"; 
    		$attachement .= "Content-Disposition: attachment; filename=$aFicPieceJointe[$i]\n\n"; 
     
    		// lecture du fichier présent sur le serveur 
    		$fd = fopen($aFicPieceJointe[$i],"rb"); 
    		$contenu = fread($fd,filesize($aFicPieceJointe[$i])); 
    		fclose($fd); 
     
    		// encodage en base64 pour que le fichier soit lisible 
    		$attachement .= chunk_split(base64_encode($contenu)); 
    	} 
     
    	// on ferme ensuite toutes les parties du mail 
    	$attachement .= "\n\n--".$limite."--\n\n"; 
     
    	// on envoi le mail 
    	if (mail($desti_mail,$objet_mail,$texte.$attachement,$headers)) 
    	{ 
    		echo "<br>Envoi du mail réussi";
    	} 
    	else 
    	{ 
    		echo "<br>Envoi du mail échoué"; 
    	} 
     
    }// if (is_array($aFicPieceJointe)) 
    ?>

    merci.

    Eddy

  2. #2
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Par défaut
    Je progresse.
    La pièce jointe est bien dans le mail et visible.
    Seulement, je n'ai pas le texte du body :
    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
    function Envoi_Mail_en_Masse($lib_expediteur, $expediteur, $destinataire, $sujet, $texte, $idMail){
    	require_once 'classes/class_mail_pieces_jointes.php';
    	$AllPiecesJointes = new mail_pieces_jointes($GLOBALS['bdd']);
     
    	// permet de définir les différentes parties du mail
    	$limite = "----=_Part_".md5(uniqid(rand()));
     
    	// Pour envoyer un mail HTML, l'en-téte Content-type doit étre défini
    	$headers  = 'MIME-Version: 1.0' . "\r\n";
    	//$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    	$headers .="Content-Type: multipart/mixed; boundary=$limite\r\n";
     
    	// En-tétes additionnels
    	// Toutes les adresses sont envoyées en BCC pour étre masquées
    	$headers .= "From: $lib_expediteur <$expediteur>" . "\r\n";
     
    	if ($Environnement == "TEST") $headers .= "Cc: $expediteur" . "\r\n";
    	$headers .= "Bcc: $destinataire" . "\r\n";
     
     
    	$corp_mail = "--".$limite."\n";
    	$corp_mail .= "Content-Type: text/html; charset='iso-8859-1'\n";
    	$corp_mail .= $texte;
    	echo "<hr>Texte : $texte";
    	echo "<hr>corp_mail : $corp_mail";
     
    	// fichiers joints à attacher 
    	$attachement = ""; 
     
    	$LesFichiers = $AllPiecesJointes->selectAll($idMail);
    	foreach ($LesFichiers as $UnFic) {
    		$attachement .= "--".$limite."\n";
    		$attachement .= "Content-Type: text/plain; charset=iso-8859-1 name=" . $UnFic['Fichier'] . "\n";
    		$attachement .= "Content-Transfer-Encoding: base64\n";
    		$attachement .= "Content-Disposition: attachment; filename=" . $UnFic['Fichier'] . "\n\n";
     
    		// lecture du fichier présent sur le serveur
    		$fd = fopen($UnFic['Fichier'],"rb");
    		$contenu = fread($fd,filesize($UnFic['Fichier']));
    		fclose($fd);
     
    		// encodage en base64 pour que le fichier soit lisible
    		$attachement .= chunk_split(base64_encode($contenu));
    	}
     
    	// on ferme ensuite toutes les parties du mail
    	$attachement .= "\n\n--".$limite."--\n\n";
     
    	/*$corp_mail = "<html><body>
    				  <center><h1A>Club de plongée de Cluses</h1A></center>
    				  $lemail
    				  </body></html>";*/
    	$corp_mail .= $attachement . "--".$limite."\n";
     
     
    	if ($Environnement == "TEST") {
    		$sujet = "/!\/!\ ENV TEST /!\/!\ - " . $sujet;
    		$corp_mail = "<font color='red'>----- ENVIRONNEMENT DE TEST -----</font><br><br>" . $corp_mail;
    	}
     
     
    	// en local, on appele pas la fonction mail, par contre, on affiche le corps du mail
    	if ($_SERVER['HTTP_HOST'] != "127.0.0.1") {
    		@mail($destinataire, $sujet, $corp_mail, $headers);
    		//@mail("bidon@toto.fr", $sujet, $corp_mail.$attachement, $headers);
    	}
    	else
    		Afficher_Mail($expediteur, $destinataire, $sujet, $corp_mail);
    }
    J'affiche la variable texte et corps_mail, et voici :
    Texte :
    Le corps du message

    corp_mail : ------=_Part_cddb6d17ae922b3f2dc048d63e8b6895 Content-Type: text/html; charset='iso-8859-1'
    Le corps du message

  3. #3
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Par défaut
    maintenant, la pièce jointe ainsi que le corps du message sont bien présent, mais si je retire le limite en rouge, la pièce jointe n'est pas visible, seulement,; dans le message, le boudary s'affiche :
    --fbeaeca64656baf073034fc65ff7dcee Content-Type: text/html; charset='iso-8859-1'
    Club de plongée de Cluses
    le corps du message
    avec des puces
    1. puce 1
    2. puce 2
    --fbeaeca64656baf073034fc65ff7dcee
    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
     
    function Envoi_Mail_en_Masse($lib_expediteur, $expediteur, $destinataire, $sujet, $texte, $idMail){
    	require_once 'classes/class_mail_pieces_jointes.php';
    	$AllPiecesJointes = new mail_pieces_jointes($GLOBALS['bdd']);
    	$LesFichiers = $AllPiecesJointes->selectAll($idMail);
     
    	// permet de définir les différentes parties du mail
    	$limite = md5(uniqid(rand(), true));
     
    	// Pour envoyer un mail HTML, l'en-téte Content-type doit étre défini
    	$headers  = 'MIME-Version: 1.0' . "\r\n";
    	if (count($LesFichiers) == 0) 
    		$headers .= "Content-type: text/html;  boundary=$limite\r\n";//charset=iso-8859-1' . "\r\n";
    	else
    		$headers .="Content-Type: multipart/mixed; boundary=$limite\r\n";
     
    	// En-tétes additionnels
    	// Toutes les adresses sont envoyées en BCC pour étre masquées
    	$headers .= "From: $lib_expediteur <$expediteur>" . "\r\n";
     
    	if ($Environnement == "TEST") $headers .= "Cc: $expediteur" . "\r\n";
    	$headers .= "Bcc: $destinataire" . "\r\n";
     
    	$corp_mail  = "--".$limite."\n";
    	$corp_mail .= "Content-Type: text/html; charset='iso-8859-1'\n";
    	$corp_mail .= "<html><body>
    					 <center><h1A>Club de plongée de Cluses</h1A></center>
    					 $texte
    					 </body></html>";
     
    	if (count($LesFichiers) > 0) {
    		$corp_mail .= "--".$limite."\n";
    		$corp_mail .= "<html><body>
    						 <center><h1A>Club de plongée de Cluses</h1A></center>
    						 $texte
    						 </body></html>";
    		$corp_mail .= "--".$limite."\n";
    		echo "<br>Il y a des fichiers à attacher";
    		// fichiers joints à attacher
    		$attachement = "";
     
    		foreach ($LesFichiers as $UnFic) {
    			$attachement .= "--".$limite."\n";
    			$attachement .= "Content-Type: text/plain; charset=iso-8859-1 name=" . $UnFic['Fichier'] . "\n";
    			$attachement .= "Content-Transfer-Encoding: base64\n";
    			$attachement .= "Content-Disposition: attachment; filename=" . $UnFic['Fichier'] . "\n\n";
     
    			// lecture du fichier présent sur le serveur
    			$contenu = file_get_contents($UnFic['Fichier']);
     
    			// encodage en base64 pour que le fichier soit lisible
    			$attachement .= chunk_split(base64_encode($contenu));
     
    			echo "<br>Fichier : " . $UnFic['Fichier'];
    		}
     
    		// on ferme ensuite toutes les parties du mail
    		$attachement .= "\n\n--".$limite."--\n\n";
     
    		$corp_mail .= $attachement . "--".$limite."\n";
    	}
     
    	if ($Environnement == "TEST") {
    		$sujet = "/!\/!\ ENV TEST /!\/!\ - " . $sujet;
    		$corp_mail = "<font color='red'>----- ENVIRONNEMENT DE TEST -----</font><br><br>" . $corp_mail;
    	}
     
     
    	// en local, on appele pas la fonction mail, par contre, on affiche le corps du mail
    	if ($_SERVER['HTTP_HOST'] != "127.0.0.1") 
    		@mail($destinataire, $sujet, $corp_mail, $headers);
    	else
    		Afficher_Mail($expediteur, $destinataire, $sujet, $corp_mail);
    }

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    Ca serait beaucoup plus simple d'utiliser phpmailer. Le mélange de \r\n et des \n\n c'est pas génial et il y a 2 fois $corp_mail .= "<html><body>

  5. #5
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Par défaut
    Salut,

    merci pour m'avoir indiquer phpMailer, c'est nickel.

    J'essaie sur mon serveur "test" qui est hébergé chez 1and1 et ça fonctionne bien.
    Quand j'essaie sur mon serveur "prod" qui est chez Online.net, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Could not instantiate mail function
    Le problème est chez Online.net ?

    Merci


    Voici ma fonction
    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
     
    function Envoi_Mail_en_Masse($lib_expediteur, $expediteur, $sujet, $texte, $idMail){ 
    	echo "<br>Fonction d'envoi avec PHPMailer";
    	require_once 'classes/PHPMailer/class.phpmailer.php';
    	require_once 'classes/class_mail_pieces_jointes.php';
    	$AllPiecesJointes = new mail_pieces_jointes($GLOBALS['bdd']);
    	require_once 'classes/class_mail_destinataires.php';
    	$Alldest = new mail_destinataire($GLOBALS['bdd']);
    	require_once 'classes/class_licencies.php';
    	$AllLicencies = new licencies($GLOBALS['bdd']);
     
    	$LesFichiers = $AllPiecesJointes->selectAll($idMail);
    	$LesDestinataires = $Alldest->selectAll($idMail);
     
    	// Corp de notre email
    	if ($_SESSION['Environnement'] == "TEST") {
    		$sujet = "/!\/!\ ENV TEST /!\/!\ - " . $sujet;
    		$texte = "<font color='red'>----- ENVIRONNEMENT DE TEST -----</font><br><br>$texte";
    	}
     
    	// Création d'un nouvel objet $mail
    	$mail = new PHPMailer();
     
    	$mail->setLanguage('fr','classes/PHPMailer/language/phpmailer.lang-fr.php');
     
    	$mail->IsHTML(true);
    	$mail->CharSet = "UTF-8";
     
    	$mail->SetFrom($expediteur, $lib_expediteur);
    	$mail->AddReplyTo($expediteur, $lib_expediteur);
    	$mail->addAddress($expediteur, $lib_expediteur);
     
    	$mail->Subject = $sujet;
     
    	$mail->MsgHTML($texte);
     
    	foreach ($LesDestinataires as $unDest) {
    		$UnLicencie = $AllLicencies->selectByIdlicencie($unDest['idLicencie']);
    		$mail->addAddress($UnLicencie['Email'], $UnLicencie['Prenom'] . " " . $UnLicencie['Nom']);
    	}
     
    	foreach ($LesFichiers as $UnFic) {
    		$mail->AddAttachment($UnFic['Fichier']);
    		echo "<br>Attacher le fichier : " . $UnFic['Fichier'];
    	}
     
    	if ( !$mail->Send() ) {
    		echo "<br><h2 id='msgerreur'>Echec de l'envoi du mail, Erreur: " . $mail->ErrorInfo . "</h2>";
    	} else {
    		echo "<br><h2 id='msginfo'>Message envoyé!</h2>";
    	}
    	unset($mail);
    }

  6. #6
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 196
    Par défaut
    J'ai ouvert un ticket chez Online.net, et voici leur réponse
    Bonjour,

    Il ne sera pas possible d'utiliser PHP mailer sur un serveur mutualisé.

    Voici une documentation qui vous aidera à la mettre en place (même si vous semblez déjà la connaître ).: https://documentation.online.net/fr/...guration-php?s[]=php&s[]=mail#envoyer_des_emails


    Cordialement,
    je ne pense pas que ça pose problème d'un serveur mutualisé (à moins que je ne sache pas exactement ce que c'est), mais plus un blocage chez Online.net. Non ?

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

Discussions similaires

  1. Générer des mail avec pièce jointe au format PDF
    Par Michel DELAVAL dans le forum Access
    Réponses: 2
    Dernier message: 26/06/2006, 15h07
  2. [C++/MFC]Envoyer un mail avec Pièce jointe
    Par cjacquel dans le forum MFC
    Réponses: 4
    Dernier message: 12/06/2006, 13h48
  3. Envoi de mail avec pièce jointe
    Par gids01 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 20/04/2006, 13h15
  4. Envoie mail avec pièce jointe
    Par Juniora dans le forum Access
    Réponses: 3
    Dernier message: 03/04/2006, 14h24
  5. [VB]Bp envoie mail avec piéce jointe
    Par jm1213 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/02/2006, 20h55

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