Attaching Multiple Files to Emails in PHP
When sending emails, it's often necessary to include attachments, whether it's a single file or multiple. The code you've provided for sending a single attachment can be modified to accommodate multiple files.
Understanding the MIME Boundary
To send multiple files, you must utilize the MIME boundary, which separates the different parts of the email (text, attachments). A unique boundary is generated using a random string, ensuring that the email reader can properly differentiate the parts.
Multi-part Message Preparation
To prepare the multi-part message, begin with the standard textual message content and specify the MIME version and the section boundary.
Attachment Handling
For each file to be attached, you need to read the file's contents using fopen() and encode it using base64_encode(). The attachment section header includes information such as the file type, name, and transfer encoding.
Assembling the Email
The final email message is assembled by combining the textual content and the attachment sections, each separated by the MIME boundary.
Example Implementation
The following code illustrates how to attach multiple files to an email using PHP:
<code class="php">// Prepare the email fields $to = "recipient@example.com"; $from = "sender@example.com"; $subject = "Email with Attachments"; $message = "This email contains multiple attachments."; $headers = "From: $from"; // Generate a random boundary $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; // Prepare the multipart message $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"; // Prepare attachments $files = ["file1.pdf", "file2.rar"]; foreach ($files as $file) { $file_content = file_get_contents($file); $encoded_content = chunk_split(base64_encode($file_content)); $message .= "--{$mime_boundary}\n" . "Content-Type: application/octet-stream;\n" . " name=\"$file\"\n" . "Content-Disposition: attachment;\n" . " filename=\"$file\"\n" . "Content-Transfer-Encoding: base64\n\n" . $encoded_content . "\n\n"; } // Complete the message $message .= "--{$mime_boundary}--\n"; // Headers for attachment $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; // Send the email if (mail($to, $subject, $message, $headers)) { echo "Email sent with attachments."; } else { echo "Failed to send email."; }</code>
Conclusion
By using multiple MIME boundaries within the email message, it's possible to attach and send multiple files in a single email using PHP. This code will assist you in streamlining your email communication by allowing you to share various files in one go.
The above is the detailed content of How to Attach Multiple Files to Emails in PHP?. For more information, please follow other related articles on the PHP Chinese website!