Maison  >  Article  >  développement back-end  >  Comment envoyer plusieurs pièces jointes par e-mail en PHP ?

Comment envoyer plusieurs pièces jointes par e-mail en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 06:53:29950parcourir

How to Send Multiple File Attachments with Email in PHP?

Envoyer plusieurs pièces jointes par e-mail en PHP

Introduction
Lorsque vous traitez une communication par e-mail impliquant le transfert de documents, vous pouvez occasionnellement devez joindre plusieurs fichiers plutôt qu’un seul. PHP fournit une plate-forme robuste pour gérer de telles opérations de courrier électronique.

Comprendre le code d'origine
Le code d'origine que vous avez fourni envoie avec succès une seule pièce jointe. Cependant, pour joindre plusieurs fichiers, certaines modifications sont nécessaires.

Solution : Améliorations pour les pièces jointes multiples
Le code amélioré ci-dessous permet l'envoi de plusieurs fichiers en pièces jointes :

<code class="php"><form action="#" method="POST" enctype="multipart/form-data"  >
<input type="file" name="csv_file[]" />
<br/>
<input type="file" name="csv_file[]" />
<br/>
<input type="file" name="csv_file[]" />
<br/>
<input type="submit" name="upload" value="Upload" />
<br/>
</form>

<?php
if ($_POST) {
    $csv_files = array();
    $files = array();
    for ($i=0; $i < count($_FILES['csv_file']['name']); $i++){
        $csv_files[]       = $_FILES['csv_file']['name'][$i];
    }

    // array with filenames to be sent as attachments
    $files = $csv_files;

    // email fields: to, from, subject, and so on
    $to = "[email&#160;protected]";
    $from = "[email&#160;protected]";
    $subject = "My subject";
    $message = "My message";
    $headers = "From: $from";

    // boundary
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

    // headers for attachment
    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";

    // multipart boundary
    $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
    $message .= "--{$mime_boundary}\n";

    // preparing attachments
    for($x=0;$x<count($files);$x++){
        $file = fopen($files[$x],"rb");
        $data = fread($file,filesize($files[$x]));
        fclose($file);
        $data = chunk_split(base64_encode($data));
        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" .
        "Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" .
        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}\n";
    }

    // send
    $ok = @mail($to, $subject, $message, $headers);
    if ($ok) {
        echo "<p>mail sent to $to!</p>";
    } else {
        echo "<p>mail could not be sent!</p>";
    }
}
?></code>

Explication :

  • Le bloc formulaire (
    ) permet de sélectionner plusieurs fichiers pour le téléchargement.
  • La boucle itère sur les fichiers téléchargés, en capturant leurs noms dans le tableau $csv_files.
  • Le tableau $files est rempli avec les noms de fichiers à joindre.
  • Le corps de l'e-mail est en plusieurs parties, contenant du texte et des pièces jointes séparés par des limites. (--{$mime_boundary}).
  • Chaque fichier joint a une disposition de contenu unique pour spécifier son nom et son type de fichier.
  • L'e-mail est envoyé avec succès avec les pièces jointes si $ok est vrai.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn