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 :

envoyer un mail avec un fichier joint


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 31
    Points : 19
    Points
    19
    Par défaut envoyer un mail avec un fichier joint
    j'ai essayé laborieusement les différents exemples présents dans les forum, aucun ne marche !

    voici mon test : on reçoit bien un mail prétendant avoir une pièce jointe mais quand on essaye de lire le mail il la perd, elle disparaît !!!.

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <?php
    $expediteur = $_POST['expediteur'];
    $destinataire = $_POST['destinataire'];
    $copie = $_POST['copie'];
    $message = stripslashes($_POST['message']);
    $sujet = $_POST['sujet'];
    $fichier = basename( $_FILES['fichier']['name']);
     
    if(!($expediteur && $destinataire))
    {
    	echo "<script> javascript:history.back()  </script>";
    	exit;
    }
     
    $boundary = "----=".md5(uniqid(microtime(), TRUE));
     
    if($fichier)
    {
    	$upload_file = $_FILES['fichier']['tmp_name']; // fichier temporaire chargé par le formulaire
    	$fichier = basename( $_FILES['fichier']['name']);
    	$sujet = $_POST["sujet"]; 
    	$message = htmlspecialchars($_POST["message"], ENT_QUOTES); 
     
    	$ext = explode(".", $fichier); 
    	switch($ext[1]) 
    	{ 
    		default:       
    		$attach_type =  "application/octet-stream";  
    	break; 
    		case "gz":    
    		$attach_type =  "application/x-gzip";  
    	break; 
    		case "tgz":   
    		$attach_type =  "application/x-gzip";  
    	break; 
    		case "zip":   
    		$attach_type =  "application/zip"; 
    	break; 
    		case "pdf":   
    		$attach_type =  "application/pdf"; 
    	break; 
    		case "png":   
    		$attach_type =  "image/png"; 
    	break; 
    		case "gif":   
    		$attach_type =  "image/gif"; 
    	break; 
    		case "jpg": 
    		case"jpeg":   
    		$attach_type =  "image/jpeg"; 
    	break; 
    		case "txt":   
    		$attach_type =  "text/plain"; 
    	break; 
    		case "htm":   
    		$attach_type =  "text/html";   
    	break; 
    		case "html":  
    		$attach_type =  "text/html"; 
    	break; 
    	} 
    	$attach_name = $_FILES["fichier"]["name"]; 
     
    	$mailheaders  = "From: \"$expediteur\"\r\n"; 
    	$mailheaders .= "BCc: $copie\r\n"; 
     
    	$mailheaders .= "MIME-Version: 1.0\r\n"; 
    	$mailheaders .= "Content-Type: multipart/mixed; boundary=--\"".$boundary."\""; 
    	$mailheaders .= "--$boundary\r\n\r\n"; 
    	$mailheaders .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
    	//$mailheaders .= "X-attachments: $attach_name\r\n"; 
    	$body_top = "--$boundary\r\n";
    	$body_top .= "Content-type: text/html;  charset=ISO-8859-1\r\n"; 
    	$body_top .= "Content-transfer-encoding: 8bit\r\n"; 
     
    	$msg_body = $body_top . $message; 
     
    	$msg_body .= "\r\n\r\n--$boundary--\n";
    	$msg_body .= "Content-type: $attach_type; name=\"$attach_name\"\r\n";  
    	$longueur = filesize($upload_file);
    	$msg_body .= "Content-Length: $longueur\r\n";     
    	$msg_body .= "Content-transfer-Encoding: BASE64\r\n"; 
    	$msg_body .= "Content-disposition: attachment; filename=\"$attach_name\"\r\n\r\n"; 
    	$msg_body .= chunk_split(base64_encode(file_get_contents($upload_file)))."\r\n"; 
    	$msg_body .= "--$boundary--\r\n";
     
    echo "<br><br> longueur : $longueur ";	
    echo "<br><br> headers :   $mailheaders   <br>";
    echo "<br><br> body :   $msg_body   <br>";
    echo "<br><br> destinataire :     $destinataire   <br>";
     
    	if(mail($destinataire, $sujet, $msg_body, $mailheaders))
    	{
    		echo "<br><br> SUCCES <br>";
    	}
    } 
     
    else
    	if(mail( $destinataire , $sujet, $message, "Content-Type: text/html; charset=ISO-8859-1\r\nFrom: $expediteur\r\nBCc: $copie\r\n"))
    	{
    		echo "<br><br> SUCCES <br>";
    	}
     
    //header("location: $HTTP_REFERER"); // retour arrière vers la page d'appel vierge
     
    ?>


    Le premier (ou la première) qui aura une bonne idée sera bien récompensé.

    merci d''avance

    A

  2. #2
    Membre confirmé Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 713
    Points : 519
    Points
    519
    Par défaut
    tu peux essayer le fichier déposé plus url d'accompagnement. Pour ma part, je n'ai jamais réussi a mettre un attachement en php.

    Regarde ici, ça a l'air pas mal expliqué. Tu as ça aussi : http://www.xpertmailer.com/
    Aucun de nous n'est seul, Même l'air que nous expirons est inspirés par d'autres...

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par zulad Voir le message
    tu peux essayer le fichier déposé plus url d'accompagnement. Pour ma part, je n'ai jamais réussi a mettre un attachement en php.

    Regarde ici, ça a l'air pas mal expliqué. Tu as ça aussi : http://www.xpertmailer.com/
    merci
    j'ai essayé ce qui est proposé sans succès : la pièce attachée disparait quand on veut lire le message !

    par contre j'ai fini par pondre quelque-chose qui marche bien surtout quand on utilise la messagerie gmail.
    Avec Thunderbird le message texte n’apparaît pas.
    Si quelqu'un sait pourquoi il sera le bienvenu.
    En tout cas la pièce jointe est toujours bien transmise.

    Voici le source du fichier envoi_mail.php à appeler pour envoyer un mail saisi dans un formulaire adequat :

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    <?php
    function typemime($file)
    {
    	$ext = explode(".", $file); 
    	switch($ext[1]) 
    	{ 
    		default:       
    		$type =  "application/octet-stream";  
    	break; 
    		case "gz":    
    		$type =  "application/x-gzip";  
    	break; 
    		case "tgz":   
    		$type =  "application/x-gzip";  
    	break; 
    		case "zip":   
    		$type =  "application/zip"; 
    	break; 
    		case "pdf":   
    		$type =  "application/pdf"; 
    	break; 
    		case "png":   
    		$type =  "image/png"; 
    	break; 
    		case "gif":   
    		$type =  "image/gif"; 
    	break; 
    		case "jpg": 
    		case"jpeg":   
    		$type =  "image/jpeg"; 
    	break; 
    		case "txt":   
    		$type =  "text/plain"; 
    	break; 
    		case "htm":   
    		$type =  "text/html";   
    	break; 
    		case "html":  
    		$type =  "text/html"; 
    	break; 
    	} 
    	return $type;
    }
     
    //==============================================================================================
     
    function mail_attachement($to , $bcc , $sujet , $message , $fichier , $typemime , $nom , $reply , $from)
    {
     
     $limite = "_parties_".md5(uniqid (rand()));
     
     $mail_mime = "Date: ".date('l j F Y, G:i')."\n";
     $mail_mime .= "MIME-Version: 1.0\n";
     $mail_mime .= "Content-Type: multipart/mixed;\n";
     
     $mail_mime .= " boundary=\"----=$limite\"\n\n";
     
    //le fichier
     $attachement = "------=$limite\n";
     
    //d'abord un message texte qui peut être en html
     $attachement .= "Content-Type:  text/html;  charset=ISO-8859-1\n";
     $attachement .= "Content-Transfer-Encoding: 8bit\n";
     $attachement .= $message;
     $attachement .= "\n\n\n------=$limite\n";
     
    // traitement du fichier à attacher
     $attachement .= "Content-Type: $typemime; name=\"$nom\"\n";
     $attachement .= "Content-Transfer-Encoding: base64\n";
     $attachement .= "Content-Disposition: attachment; filename=\"$nom\"\n\n";
     
     $fd = fopen( $fichier, "r" );
     $contenu = fread( $fd, filesize( $fichier ) );
     fclose( $fd );
     $attachement .= chunk_split(base64_encode($contenu));
     
     $attachement .= "\n\n\n------=$limite\n";
     
     return mail($to, $sujet, $attachement, "Reply-to: $reply\nFrom: $from\nBcc: $bcc\n".$mail_mime);
     }
     
    //==================================================================================================
     
    $expediteur = $_POST['expediteur'];
    $destinataire = $_POST['destinataire'];
    $copie = $_POST['copie'];
    $sujet = $_POST['sujet'];
     
    $texte = str_repeat($_POST['message'],1);//$message = stripslashes($_POST['message']);
    $texte = wordwrap($texte, 66 , "<br>" ); // pour découper le message en lignes de 70
     
    //$nomfichier = basename( $_FILES['fichier']['name']);
    $nomfichier = $_FILES['fichier']['name'];
     
    if(!($expediteur && $destinataire))
    {
    	echo "<script> javascript:history.back()  </script>";
    	exit;
    }
     
    if($nomfichier)
    {
    	$mimeType = typemime($nomfichier);
    	$fichier_telechargeable = $_FILES['fichier']['tmp_name']; // fichier temporaire chargé par le formulaire
    	$replyto = ""; // peut être nul
    	mail_attachement($destinataire,$copie,$sujet,$texte,$fichier_telechargeable,$mimeType,$nomfichier, $replyto, $expediteur);
     
    } 
     
    else  // sans attachement
    	mail( $destinataire , $sujet, $texte, "Content-Type: text/html; charset=ISO-8859-1\nFrom: $expediteur\nBCc: $copie\n");
     
    echo "<script> javascript:location.replace(document.referrer)  </script>";	
    exit;
     
    ?>


    je peux donner un exemple de ce formulaire à qui en aurait besoin

Discussions similaires

  1. Erreur envoi mail avec phpmailer (fichier joint)
    Par rhadien dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2008, 10h23
  2. [C#] envoyer un mail avec une piece jointe
    Par arnauann dans le forum C#
    Réponses: 5
    Dernier message: 22/08/2007, 10h09
  3. [ASP 3] Envoyer un Mail avec une piece jointe générer
    Par soltani.slim dans le forum ASP
    Réponses: 4
    Dernier message: 15/02/2006, 10h16
  4. [VBA]envoyer un email avec un fichier joint à partir d'excel
    Par mcay dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2005, 10h21

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