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 :

boucle sur pièces jointes mail [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut boucle sur pièces jointes mail
    Bonsoir,

    je cherche à réaliser une boucle sur mes pièces jointes mais je bloque.

    J'ai cherché des tuto mais la majorité propose une seule pièce jointe ou de dupliquer le code...en ce qui me concerne j'aimerai réaliser si cela est possible une boucle.


    form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    <p>	Pièces jointes <input type="file" name="pj[]" accept="pdf, doc, docx, xls, xlsx, jpg, jpeg, png, gif, ppt" multiple=""></p>
    ...
    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
    <?php
    
    //....
    
    
    public function sendMail($nom_expediteur, $mail_expediteur, $mail_replyto, $mail_destinataires, $bcc, $objet, $contenu, $files) {
    
     // générer la frontière entre contenu-html, pièces jointes
     $boundary = md5(uniqid(mt_rand())); 
    		
     //hearder du mail
     $headers = 'From: "' .$nom_expediteur.'" <'.$mail_expediteur.'>'."\n"; 
     $headers .= 'Return-Path: <'.$mail_replyto.'>'."\n"; 
     $headers .= 'MIME-Version: 1.0'."\n";
    
     if ($bcc != '') {
      $headers .= "Bcc: ".$bcc. "\n";
     }
    		
     $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\n";
     $headers .= "\n";
    		
    
     //début de construction du message
     $message = '';
    
     //partie du texte 
     if ($contenu != ''){
      $message .= '--'.$boundary."\n";
      $message .= 'Content-type: text/plain; charset=utf-8'."\n";
      $message .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
      $message .= $contenu."\n\n"; 
     }
    
    // JE VOUS MONTRE CE QUE ME RENVOIE MON VAR DUMP DE $files (mes pièces jointes = [] )
     //var_dump($files); 
    
    /* array (size=5)
     'name' =>
      array(size = 3)
       0 => string 'nom du fichier 1.doc'
       1 => string 'nom du fichier 2.xls' 
       2 => string 'nom du fichier 3.xls'
     'type' =>
      array(size = 3)
       0 => application/msword'
       1 => application/msword'
       2 => application/sheet'
     'tmp_name' =>
      array(size = 3)
       0 => string 'C:\wamp64\tmp\php1.tmp'
       1 => string 'C:\wamp64\tmp\php2.tmp'
       2 => string 'C:\wamp64\tmp\php3.tmp'
     'error' =>
      array(size = 3)
       0 => int 0
       1 => int 0
       2 => int 0
     'size' =>
      array(size = 3)
       0 => int 1000
       1 => int 2000
       2 => int 3000 */
    
     foreach($files as $file => $name){  // A MODIFIER MAIS JE N'Y ARRIVE PAS CAR PLUSIEURS NIVEAUX 
    
      $fichier = file_get_contents($name['tmp_name']);
      $content = chunk_split(base64_encode($fichier));
      $message .= '--'.$boundary."\n";
      $message .= 'Content-type:'.$name['type'].';name='.$name['name']."\n";
      $message .= 'Content-transfer-encoding:base64'."\n";
      $message .= $content."\n";
     }
    
     $message .= '--'.$boundary."\n";
    
     return mail($mail_destinataires, $objet, $message, $headers); 
    
    }
    
    
    ?>


    par la suite

    $mail = new Mail();
    $mailIsOK = $mail->sendMail($nom_expediteur, $mail_expediteur, $mail_replyto, $mail_destinataires, $bcc, $objet, $contenu, $files);

    // je récupère des données de la SESSION OUVERTE pour $nom_expéditeur, $mail_expéditeur, $mail_replyto..

    MERCI POUR VOTRE AIDE

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Personellement, j'ai tendance à utiliser quelque chose comme PhpMailer, où il suffit d'appeler autant de fois la fonction addAttachement qu'il y a de pièces jointes.
    En ce qui concerne ta boucle, il faut boucler sur un niveau et utiliser l'index pour récupérer les informations dans les autres niveaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($files['name'] as $index => $name) {
       $tmpName = $files['tmp_name'][$index];
       $type = $files['type'][$index];
    // ...
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    MErci pour votre retour,

    J'ai bien vu l'existence de phpMailer. Est-ce qu'on peut faire un envoi multiple de pièces jointes avec un seul bouton ou faut-il réaliser un input-file par fichier ?

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Merci pour le code foreach....mon code fonctionne

    je vais mettre résolu mais pouvez-vous me dire où je peux trouver un bon tuto récent sur phpmailer et toutes ses fonctionnalité

    Bonne journée à vous

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

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