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] Envoi de plusieurs mails avec plusieurs pièces jointes de plusieurs types [Fait]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut [Mail] Envoi de plusieurs mails avec plusieurs pièces jointes de plusieurs types
    Bonjour à tous,

    je tiens à présiser que j'ai lu pas mal de thread/Faq et autres tutoriel à ce sujet, mais je ne parvient pas à mes fins

    Donc voilà je veux faire un mailing à une ou plusieurs adresse avec une ou plusieurs pièces jointes qui peuvent etre de type différent.

    Voici le dernier code que j'ai essayé :

    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
     
      	$boundary = "-----=".md5(uniqid(rand()));
    	$header = "MIME-Version: 1.0\r\n";
    	$header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
    	$header .= "\r\n";
     
    	$msg = "Je vous informe que ceci est un message au format MIME 1.0.\r\n";
    	$msg .= "--".$boundary."\r\n";
    	$msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
    	$msg .= "Content-Transfer-Encoding:8bit\r\n";
    	$msg .= "\r\n";
    	$msg .= $_POST['msg'];
    	$msg .= "\r\n";
     
     
     
    	$sql_lst_promo = "select * from document where ID in(".$promo.") order by nom";
    	$req_lst_promo = mysql_query($sql_lst_promo);
     
    	while($val_lst_promo = mysql_fetch_array($req_lst_promo)){
    		$filename = $val_lst_promo['ID']."_doc.".$val_lst_promo['ext'];
     
    		$fp = fopen("../files/".$filename, 'rb');
    		$attachment = fread($fp, filesize($file));
    		fclose($fp);
    		$attachment = chunk_split(base64_encode($attachment));
     
    		$msg .= "--".$boundary."\r\n";
    		$msg .= "Content-Type: ".$filename."; \r";
    		$msg .= "name=\"".$filename."\"\r\n";
    		$msg .= "Content-Transfer-Encoding: base64\r\n";
    		$msg .= "Content-Disposition: inline;\r\n filename=\"".$filename."\"\r\n";
    		$msg .= $attachment . "\r\n";
     
    		$msg .= "\r\n";
    		$msg .= "\r\n\r\n";
    	}
     
    	$msg .= "--".$boundary."--\r\n";
     
    	$sql_mailing = "SELECT email_contact FROM client WHERE email_contact<>\"\" and ID in (".$cwhere.")";
     
    	$req_mailing = mysql_query($sql_mailing);
    	while($val_mailing = mysql_fetch_array($req_mailing)){
    		mail($val_mailing[0], $_POST['sujet'] , $msg,"Reply-to: $reponse\r\nFrom: $from\r\n".$header);
    	}
    voilà ce que je reçoit dans ma boite, en ayant choisie deux fichier et mis dans mon message "j'essaye d'envoyer des pièces jointe"

    Content-Type: multipart/mixed; boundary="-----=b70e68019a8bde1c18634be8a4026187"




    Je vous informe que ceci est un message au format MIME 1.0.
    -------=b70e68019a8bde1c18634be8a4026187
    Content-Type: ; charset="iso-8859-1"
    Content-Transfer-Encoding:8bit

    j'essaye d'envoyer des pièces jointe

    -------=b70e68019a8bde1c18634be8a4026187
    Content-Type: 2_doc.pdf; name="2_doc.pdf"
    Content-Transfer-Encoding: base64
    Content-Disposition: inline;
    filename="2_doc.pdf"




    -------=b70e68019a8bde1c18634be8a4026187
    Content-Type: 4_doc.2.zip; name="4_doc.2.zip"
    Content-Transfer-Encoding: base64
    Content-Disposition: inline;
    filename="4_doc.2.zip"




    -------=b70e68019a8bde1c18634be8a4026187--

    et bien sur il n'y a pas de pièce jointe au mail

    merci d'avance

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    essaie attachment au lieu d'inline :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message .= 'Content-Disposition:attachement; filename="export.zip"'."\n\n";
    D'autre part ton Content-type n'est pas valide, tu peux utiliser mime_ content_ type($filename) pour l'avoir automatiquement.
    Et c'est possible que le \r en fin de ligne fasse planter, normalement c'est tout sur la même ligne :

    $msg .= "Content-Type: ".$filename."; \r";

    Bye
    Vive les roues en pierre

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut
    erf

    Fatal error: Call to undefined function: mime_content_type() in /home/baylepro/www/dev/BACK/mailing.php on line 74


    ça a été introduit dans quel version ?

    Mais de toutes façon c'est pas normal que mon entete avant le msg soit lisible, meme si les fichiers sont pas joint, non ?

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    4.3
    Si tu connais à l'avance tous les types de fichiers tu peux faire ca avec un switch en testant l'extension du fichier, sinon si t'as acces au shell et que t'es sous Linux tu peux utiliser file comme dans les exemple de la page du manuel :

    http://www.php.net/manual/fr/function.mime-content-type.php
    Vive les roues en pierre

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut
    merci de te soucier de mon problème, Djakisback

    je remet mon code avec les modifs :

    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
     
    if (!function_exists('mime_content_type')){
    	function mime_content_type ( $f ){
    		return trim ( exec ('file -bi ' . escapeshellarg ( $f ) ) ) ;
    	}
    }
     
    $boundary = "_parties_".md5(uniqid(rand()));
    $header = "MIME-Version: 1.0;";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\";";
     
    $msg = "Je vous informe que ceci est un message au format MIME 1.0.\r\n";
    $msg .= "--=\"".$boundary."\"";
    $msg .= ";Content-Type: text/plain; charset=\"iso-8859-1\";";
    $msg .= "Content-Transfer-Encoding:8bit;";
    $msg .= "\r\n";
    $msg .= $_POST['msg'];
    $msg .= "\r\n";
     
    $sql_lst_promo = "select * from document where ID in(".$promo.") order by nom";
    $req_lst_promo = mysql_query($sql_lst_promo);
    while($val_lst_promo = mysql_fetch_array($req_lst_promo)){
    	$filename = $val_lst_promo['ID']."_doc.".$val_lst_promo['ext'];
     
    	$fp = fopen("../files/".$filename, 'rb');
    	$attachment = fread($fp, filesize("../files/".$filename));
    	fclose($fp);
    	$attachment = chunk_split(base64_encode($attachment));
     
    	$msg .= "--=\"".$boundary."\"";
    	$msg .= ";Content-Type: ".mime_content_type("../files/".$filename).";";
    	$msg .= "name=\"".$filename."\";";
    	$msg .= "Content-Transfer-Encoding: base64;";
    	$msg .= "Content-Disposition: attachement; filename=\"".$filename."\";";
    	$msg .= $attachment;
    }
     
    $msg .= "--=\"".$boundary."\"--\r\n";
     
    $sql_mailing = "SELECT email_contact FROM client WHERE email_contact<>\"\" and ID in (".$cwhere.")";
     
    $req_mailing = mysql_query($sql_mailing);
    while($val_mailing = mysql_fetch_array($req_mailing)){
    	mail($val_mailing[0], $_POST['sujet'] , $msg,"Reply-to: $reponse\r\nFrom: $from\r\n".$header);
    }

    et voici le message que je reçois :
    Je vous informe que ceci est un message au format MIME 1.0.
    --="_parties_94ede789d5b6d1682841443e2b95fcb9";Content-Type: text/plain; charset="iso-8859-1";Content-Transfer-Encoding:8bit;

    --="_parties_94ede789d5b6d1682841443e2b95fcb9";Content-Type: image/x-png;name="11_doc.png";Content-Transfer-Encoding: base64;Content-Disposition: attachement; filename="11_doc.png";iVBORw0KGgoAAAANSUhEUgAACHUAAAaNCAMAAABnCBGFAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
    U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEpUExURf///62mrCMfIJ8xKMjHx5GPj1pX
    [....des tonnes de caractère...]
    IJRMApGAX0AQACNolEwCkbBKBgFo2AU0AcABNAoGgWjYBSMglEwCkYBfQBAAI2iUTAKRsEoGAWj
    YBTQBwAE0CgaBaNgFIyCUTAKRgF9AEAAjaJRMApGwSgYBaNgFNAHAAQYAB5sTV6VkZMMAAAAAElF
    TkSuQmCC
    --="_parties_94ede789d5b6d1682841443e2b95fcb9"--
    ya du mieux, l'entete n'apparait plus dans le mail et la fonction mime_content_type() semble marcher.
    Mais tjr pas de pièce jointe dans mes mails

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Il ne me semble pas qu'il faille de doubles quotes pour la limite :

    $msg .= "--=\"".$boundary."\"";
    =>
    $msg .= "--=".$boundary;

    ici tu peux virer le ; en dbut de ligne :
    $msg .= ";Content-Type: text/plain; charset=\"iso-8859-1\";";

    et oublie pas de mettre des \r\n à chaque fin de ligne dans les headers.
    Vive les roues en pierre

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut
    j'ai suivi scrupuleusement tes indications :

    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
     
    $boundary = md5(uniqid(rand()));
    $header = "MIME-Version : 1.0; \r\n";
    $header .= "Content-Type : multipart/mixed; boundary=\"".$boundary."\"; \r\n";
     
    $msg = "Je vous informe que ceci est un message au format MIME 1.0. \r\n";
    $msg .= "-----=".$boundary." \r\n";
    $msg .= "Content-Type : text/plain; charset=\"iso-8859-1\"; \r\n";
    $msg .= "Content-Transfer-Encoding : 8bit; \r\n";
    $msg .= $_POST['msg'];
    $msg .= "\r\n";
     
    $sql_lst_promo = "select * from document where ID in(".$promo.") order by nom";
    $req_lst_promo = mysql_query($sql_lst_promo);
    while($val_lst_promo = mysql_fetch_array($req_lst_promo)){
    	$filename = $val_lst_promo['ID']."_doc.".$val_lst_promo['ext'];
     
    	$fp = fopen("../files/".$filename, 'rb');
    	$attachment = fread($fp, filesize("../files/".$filename));
    	fclose($fp);
    	$attachment = chunk_split(base64_encode($attachment));
     
    	$msg .= "-----=".$boundary." \r\n";
    	$msg .= "Content-Type : ".mime_content_type("../files/".$filename)."; ";
    	$msg .= "name=\"".$filename."\"; ";
    	$msg .= "Content-Transfer-Encoding : base64; ";
    	$msg .= "Content-Disposition : attachement; filename=\"".$filename."\"; ";
    	$msg .= $attachment;
    }
     
    $msg .= "-----=".$boundary." \r\n";
     
    $sql_mailing = "SELECT email_contact FROM client WHERE email_contact<>\"\" and ID in (".$cwhere.")";
    $req_mailing = mysql_query($sql_mailing);
     
    while($val_mailing = mysql_fetch_array($req_mailing)){
    	mail($val_mailing[0], $_POST['sujet'] , $msg,"Reply-to: $reponse\r\nFrom: $from\r\n".$header);
    	}
    mais rien n'y fait

    quand j'ajoute \r\n à la ligne :
    $header = "MIME-Version : 1.0; ";

    la ligne suivante aparait dans mon mail

Discussions similaires

  1. Imprimer pièces jointes de plusieurs mails sélctionnés
    Par cetipabo dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 22/05/2012, 13h44
  2. [Mail] envoi d'un mail via la fonction mail() de php
    Par Abac_Angelique dans le forum Langage
    Réponses: 1
    Dernier message: 09/02/2009, 23h46
  3. Réponses: 3
    Dernier message: 26/11/2008, 18h00
  4. [Mail] Envoi d'e-mail avec pièces jointes
    Par PrinceMaster77 dans le forum Langage
    Réponses: 1
    Dernier message: 25/01/2007, 16h35

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