>  기사  >  백엔드 개발  >  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>

설명:

  • form(
    ) 블록을 사용하면 업로드할 여러 파일을 선택할 수 있습니다.
  • 루프가 반복됩니다. 업로드된 파일을 덮어쓰고 해당 이름을 $csv_files 배열에 캡처합니다.
  • $files 배열은 첨부할 파일 이름으로 채워집니다.
  • 이메일 본문은 경계로 구분된 텍스트와 첨부 파일을 포함하는 여러 부분으로 구성됩니다. (--{$mime_boundary}).
  • 첨부된 각 파일에는 파일 이름과 유형을 지정하는 고유한 콘텐츠 처리가 있습니다.
  • $ok가 true인 경우 이메일은 첨부 파일과 함께 성공적으로 전송됩니다.

위 내용은 PHP에서 이메일로 여러 첨부 파일을 보내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.