How to Send Attachments with PHP mail() Function and Why PHPMailer is Better

Send attachments with PHP Mail()?

Sending emails with attachments using PHP’s built-in mail() function is a bit complex, but it can be done by creating a MIME-compliant email manually. However, a more efficient approach is to use PHPMailer, a robust and user-friendly email library. In this guide, we’ll cover both options to help you decide which method suits your needs.

Method 1: Sending Attachments with PHP mail() Function

The PHP mail() function lacks built-in support for attachments, so you’ll need to handle the MIME structure manually. Here’s a complete guide on how to add attachments to your email using the mail() function.

Step 1: Set Up Variables

Set up variables for the file path, recipient, subject, and message.

$filename = 'myfile.pdf';
$path = 'path/to/your/file';
$file = $path . "/" . $filename;

$mailto = '[email protected]';
$subject = 'Subject Here';
$message = 'Your email message content';

Step 2: Encode the Attachment

Read the file and encode it in base64 to send it as an attachment.

$content = file_get_contents($file);
$content = chunk_split(base64_encode($content));

Step 3: Create the Email Headers

Use MIME boundaries to specify the email format.

$separator = md5(time());
$eol = "\r\n";

$headers = "From: Your Name <[email protected]>" . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;

Step 4: Construct the Email Body

Add the email message and attach the encoded file content.

$body = "--" . $separator . $eol;
$body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol;
$body .= "Content-Transfer-Encoding: 7bit" . $eol . $eol;
$body .= $message . $eol;

$body .= "--" . $separator . $eol;
$body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;
$body .= "Content-Disposition: attachment; filename=\"" . $filename . "\"" . $eol . $eol;
$body .= $content . $eol;
$body .= "--" . $separator . "--";

Step 5: Send the Email

Finally, use the mail() function to send the email.

if (mail($mailto, $subject, $body, $headers)) {
echo "Email sent successfully!";
} else {
echo "Failed to send email.";
}

Why PHPMailer is a Better Option

The mail() function in PHP can be challenging to work with, especially when attachments or HTML formatting are required. PHPMailer simplifies this by handling the complexities of MIME encoding, attachments, and SMTP configurations for you.

Benefits of PHPMailer:

  • Simple Syntax: Adding attachments is straightforward.
  • Better SMTP Control: Supports SMTP, providing more reliability in sending emails.
  • Error Handling: Has built-in error-handling features.

Method 2: Sending Attachments with PHPMailer

Here’s how to send an email with an attachment using PHPMailer.

Step 1: Install PHPMailer

You can download PHPMailer from its GitHub repository or install it via Composer.

composer require phpmailer/phpmailer

Step 2: Include PHPMailer in Your Script

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';

Step 3: Set Up PHPMailer

Create a new PHPMailer instance, set your email content, and add the attachment.

$mail = new PHPMailer();
$mail->setFrom('[email protected]', 'Your Name');
$mail->addAddress('[email protected]');
$mail->Subject = 'Your Subject Here';
$mail->Body = 'Your email message content';
$mail->isHTML(true);

$filePath = 'path/to/your/file.pdf';
$mail->addAttachment($filePath, 'myfile.pdf');

if($mail->send()) {
echo 'Email sent successfully!';
} else {
echo 'Email could not be sent. Error: ' . $mail->ErrorInfo;
}

Summary

While you can send attachments with PHP’s mail() function, using PHPMailer is a more efficient and reliable solution. PHPMailer simplifies the process, reduces errors, and provides better support for attachments, HTML content, and SMTP.

For more guides on PHP and web development, explore more posts on CodeROG.com!

Tags

What do you think?

Leave a Reply

Your email address will not be published. Required fields are marked *

Related articles

Contact us

Partner with Us for Comprehensive IT

We’re happy to answer any questions you may have and help you determine which of our services best fit your needs.

Your benefits:
What happens next?
1

We Schedule a call at your convenience 

2

We do a discovery and consulting meting 

3

We prepare a proposal 

Schedule a Free Consultation