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 plusieurs pièces attachées


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut mail avec plusieurs pièces attachées
    Bonsoir,

    une recherche sur ce forum et sur le net n'ayant rien donné, je pose mon problème : tout est dans le titre et voici mon 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
     
    $msg=$_POST['msg'];
    ...
    $chemin_destination = './';	
    	if (isset($_FILES['file1']['name'])) {
    	    move_uploaded_file($_FILES['file1']['tmp_name'], $chemin_destination.$_FILES['file1']['name']);
    	    $adr_file1=$chemin_destination.$_FILES['file1']['name'];
    		}
     
    	if (isset($_FILES['file2']['name'])) {
    	    move_uploaded_file($_FILES['file2']['tmp_name'], $chemin_destination.$_FILES['file2']['name']);
    	    $adr_file2=$chemin_destination.$_FILES['file2']['name'];	
    		}
     
    	//-----------------------------------------------
    	//DECLARE LES VARIABLES
    	//-----------------------------------------------
    	$exp=$mail;
    	$email_expediteur=$exp;
    	$email_reply=$exp;
    	$destinataire=$mail;
     
    	$frontiere = '-----=' . md5(uniqid(mt_rand()));
     
    	//-----------------------------------------------
    	//HEADERS DU MAIL
    	//-----------------------------------------------
     
    	$headers = 'From: "Nom" <'.$email_expediteur.'>'."\n";
    	$headers.= 'Return-Path: <'.$email_reply.'>'."\n";
    	$headers.= 'MIME-Version: 1.0'."\n";
    	$headers.= 'Content-Type: multipart/mixed; boundary="'.$frontiere."\"\n\n";
     
    	//-----------------------------------------------
    	//MESSAGE
    	//-----------------------------------------------
     
    	$message ='This is a multi-part/mixed message in MIME format.'."\n";
    	$message.='--'.$frontiere."\n";
    	$message.='Content-Type: text/html; charset="ISO-8859-1"'."\n";
    	$message.='Content-Transfer-Encoding: base64'."\n\n";
     
    	$message.=chunk_split(base64_encode(nl2br($msg)))."\n";
     
    	//-----------------------------------------------
    	//PIECE JOINTE
    	//-----------------------------------------------
     
    	if ($_FILES['file1']['size']>0) {
    	$base1=basename($adr_file1);
     
    	$message.='--'.$frontiere."\r\n";
    	$message.= 'Content-Type: image/jpeg; name='.$base1."\r\n";
    	$message.= 'Content-Transfer-Encoding: base64'."\r\n\r\n";
    	//$message.= 'Content-Disposition:attachement; filename='.$base1."\n\n";
    	$message.= chunk_split(base64_encode(file_get_contents($adr_file1)))."\r\n";
    }
     
    	if ($_FILES['file2']['size']>0) {
     
    	$message.='--'.$frontiere.'--'."\r\n";
    	$message.= 'Content-Type: image/jpeg; name='.$base2."\r\n";
    	$message.= 'Content-Transfer-Encoding: base64'."\r\n\r\n";
    	//$message.= 'Content-Disposition:attachement; filename='.$base2."\n\n";
    	$message.= chunk_split(base64_encode(file_get_contents($adr_file2)))."\r\n";
    	}
    	//$message.='--'.$frontiere.'--'."\r\n";	
     
    	if(@mail($destinataire,$sujet,$message,$headers)){
    		echo '<iframe src="../envoye/envoye.php" width=1000 height=1000 frameborder=0></iframe>'."\n";
    Je sais qu'il existe des librairies qui font ce boulot (phpmailer, swiftmailer...), mais n'ayant pas du tout investigué celles-ci, j'aimerais y arriver par mon code ; mon problème est que seule la première pièce attachée arrive. Quelqu'un peut-il m'aider ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    J'étais déjà tombé sur ce post au cours de ma recherche, mais il ne m'a pas permis de résoudre mon problème...(suite de ma réponse en MP)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    J'étais déjà tombé sur ce post au cours de ma recherche, mais il ne m'a pas permis de résoudre mon problème...(suite de ma réponse en MP)
    t'as bien fais comme il a fait ?

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    t'as bien fais comme il a fait ?
    D'après moi, oui ; j'ai notamment fait gaffe à ça :
    il ne faut qu'un seul délimiteur+saut de ligne entre les deux pièces jointes
    et comme il y a encore un souci, voici mon code actuel :
    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
    $chemin_destination = './';	
    	if (isset($_FILES['file1']['name'])) {
    	    move_uploaded_file($_FILES['file1']['tmp_name'], $chemin_destination.$_FILES['file1']['name']);
    	    $adr_file1=$chemin_destination.$_FILES['file1']['name'];
    		}
     
    	if (isset($_FILES['file2']['name'])) {
    	    move_uploaded_file($_FILES['file2']['tmp_name'], $chemin_destination.$_FILES['file2']['name']);
    	    $adr_file2=$chemin_destination.$_FILES['file2']['name'];	
    		}
     
    	//-----------------------------------------------
    	//DECLARE LES VARIABLES
    	//-----------------------------------------------
     
    	$exp=$mail;
    	$email_expediteur=$exp;
    	$email_reply=$exp;
    	$destinataire=$mail;
     
    	$frontiere = '-----=' . md5(uniqid(mt_rand()));
     
    	//-----------------------------------------------
    	//HEADERS DU MAIL
    	//-----------------------------------------------
     
    	$headers = 'From: "Nom" <'.$email_expediteur.'>'."\n";
    	$headers.= 'Return-Path: <'.$email_reply.'>'."\n";
    	$headers.= 'MIME-Version: 1.0'."\n";
    	$headers.= 'Content-Type:multipart/mixed;boundary="'.$frontiere."\"\n\n";
     
    	//-----------------------------------------------
    	//MESSAGE
    	//-----------------------------------------------
     
    	$message ='This is a multi-part/mixed message in MIME format.'."\n";
    	$message.='--'.$frontiere."\n";
    	$message.='Content-Type: text/html; charset="ISO-8859-1"'."\n";
    	$message.='Content-Transfer-Encoding: base64'."\n\n";
     
    	$message.=chunk_split(base64_encode(nl2br($msg)))."\n";
     
    	//-----------------------------------------------
    	//PIECE JOINTE
    	//-----------------------------------------------
     
    	if ($_FILES['file1']['size']>0) {
    	$base1=basename($adr_file1);
     
    	$message.='--'.$frontiere."\n";
    	$message.= 'Content-Type: image/jpeg; name='.$base1."\r\n";
    	$message.= 'Content-Transfer-Encoding: base64'."\r\n\r\n";
    	//$message.= 'Content-Disposition:attachement; filename='.$base1."\n\n";
    	$message.= chunk_split(base64_encode(file_get_contents($adr_file1)))."\r\n";
    }
     
    	if ($_FILES['file2']['size']>0) {
     
    	$message.='--'.$frontiere.'--'."\n";
    	$message.= 'Content-Type: image/jpeg; name='.$base2."\r\n";
    	$message.= 'Content-Transfer-Encoding: base64'."\r\n\r\n";
    	//$message.= 'Content-Disposition:attachement; filename='.$base2."\n\n";
    	$message.= chunk_split(base64_encode(file_get_contents($adr_file2)))."\r\n";
    	}
    	//$message.='--'.$frontiere.'--'."\r\n";	
     
    	if(@mail($destinataire,$sujet,$message,$headers)){
    ---
    (et l'upload a bien eu lieu : j'ai vérifié)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    que rend le $message ?

    ps : inutile de déplacer le fichier si c'est juste pour prendre le contenu

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    que rend le $message ?
    Je le mets vraiment ? La réponse est hyper longue...(une centaine de lignes)

    inutile de déplacer le fichier si c'est juste pour prendre le contenu
    Tu veux dire que l'upload est inutile ? Car si je laisse le fichier sur mon disque, ça ne va pas aller...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    montre un réponse avec des petit fichier texte (genre juste un "hello")

    pour le reste enfaite t'as juste pas besoin de faire le move_uploaded_file, pour récupéré le contenu, fait juste une file_get_contents sur le fichier temporaire (tmp_name)

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    Pour ne pas alourdir le forum, je l'ai mis ds un doc (avec les txt, pas de mise en page, donc illisible), donc voici le lien et sinon, OK pour le file_get_contents.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    avec un petit fichier pas un gros, et pourquoi un fichier Word un fichier txt suffit ...

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    Jette un coup d'oeil au fichier word ; en txt, il mets ça sur 2 lignes, donc illisible...et tu dis petit fichier, pas gros, mais et si le contenu de $message est gros ?

    sinon, j'ai aussi essayé le file_get_contents sur le fichier temporaire ($message.= chunk_split(base64_encode(file_get_contents($chemin_dest.$_FILES['file1']['tmp_name'])))."\n";) et
    Warning: file_get_contents(./tmp/phpYvGQYD) [function.file-get-contents]: failed to open stream: No such file or directory in /homepages/18/d246623212/htdocs/test/mailetpieceattac/action.php on line 88
    C'est quoi mon erreur ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Jette un coup d'oeil au fichier word ; en txt, il mets ça sur 2 lignes, donc illisible...et tu dis petit fichier, pas gros, mais et si le contenu de $message est gros ?
    j'ai pas Word,
    montre avec un petit fichier (la taille ne change rien, ça sera juste plus lisible), et fait un <pre> pour les sauts de ligne sinon on vois rien

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    J'avais pensé à ça : lien avec un txt et <pre>
    y a rien ds le 2e filename...Mais pas le temps d'investiguer maintenant...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t'as deux fois la fin du boundary
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -------=099b81ed1523706b2ea546c76b91641a--

  15. #15
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 370
    Points : 5 734
    Points
    5 734
    Billets dans le blog
    1
    Par défaut
    Bien vu pour la répétition du boundary ;maintenant, ça marche ; par contre si je remplace l'upload par file_get_contents ($message.= chunk_split(base64_encode(file_get_contents($rep_dest.$_FILES['file1']['name'])))."\n"; ; ça ne va pas : quelle mon erreur ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. [AC-2013] Envoyer un e-mail avec PLUSIEURS pièces jointes
    Par JPJOLY dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/01/2015, 17h44
  2. mail avec plusieurs pièces jointes dans les tâches planifiées
    Par gretch dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 01/08/2014, 13h27
  3. Envoi d'e-mails avec plusieurs pièces jointes
    Par xnomad dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 16/07/2007, 15h02
  4. Réponses: 6
    Dernier message: 14/11/2006, 10h35
  5. Envoi d'un mail avec plusieurs pièces jointes
    Par Wilco dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/04/2006, 10h19

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