ホームページ  >  記事  >  バックエンド開発  >  PHP で複数の添付ファイルを電子メールで送信するにはどうすればよいですか?

PHP で複数の添付ファイルを電子メールで送信するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 06:53:29954ブラウズ

How to Send Multiple File Attachments with Email in PHP?

PHP で複数の添付ファイルを電子メールで送信する

はじめに
ドキュメントの転送を伴う電子メール通信を処理する場合、場合によっては、単一のファイルではなく複数のファイルを添付する必要があります。 PHP は、このような電子メール操作を処理するための堅牢なプラットフォームを提供します。

元のコードを理解する
指定した元のコードは、単一の添付ファイルを正常に送信します。ただし、複数のファイルを添付するには、特定の変更が必要です。

解決策: 複数のファイル添付の機能強化
以下の改良されたコードにより、複数のファイルを添付ファイルとして送信できるようになります。

<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>

説明:

  • フォーム (
    ) ブロックを使用すると、アップロードする複数のファイルを選択できます。
  • ループは反復されます。
  • $files 配列には、添付するファイル名が入力されます。
  • 電子メールの本文は複数の部分からなり、境界で区切られたテキストと添付ファイルが含まれます。 (--{$mime_boundary})。
  • 各添付ファイルには、ファイル名とタイプを指定する固有の Content-Disposition があります。
  • $ok が true の場合、電子メールは添付ファイルとともに正常に送信されます。

以上がPHP で複数の添付ファイルを電子メールで送信するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。