ServerAvatar Logo

PHP Mailer Tutorial with Examples and Best Practices

  • Author: Suresh Ramani
  • Published: 4 September 2025
  • Last Updated: 4 September 2025
PHP Mailer Tutorial with Examples and Best Practices

Table Of Contents

Introduction

Ever felt frustrated trying to send emails from your PHP application? You’re not alone! Imagine sending a letter through snail mail versus a lightning-fast courier service – that’s the difference between PHP’s basic mail() function and PHP Mailer. In this guide, we’ll walk through everything you need to know about php mailer in plain English, with live code snippets and practical tips. Ready to become an email-sending pro?

What Is PHP Mailer?

PHP Mailer is a popular open-source library that simplifies sending emails from PHP applications. Instead of wrestling with low-level headers and inconsistent server setups, php mailer offers a clean, object-oriented interface. Think of it as a well-oiled machine versus a rusty manual crank.

Why Use PHP Mailer Over mail()?

Ever tried using the built-in mail() and ended up in your spam folder? The basic mail() function sends emails without authentication or proper headers, making it a magnet for spam filters. PHP Mailer handles:

  • SMTP authentication
  • Secure connections (TLS/SSL)
  • Rich email formatting

This dramatically improves deliverability and professionalism.

Installing PHP Mailer

Getting started is a breeze:

  1. Install via Composer:
Bash
composer require phpmailer/phpmailer
  1. Or download from the PHPMailer GitHub repo.

This process is like plugging in a USB drive – quick and painless.

Basic Configuration

Once installed, include the autoloader and initialize:

PHP
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer();

Then set key properties:

PHP
$mail->isSMTP();
$mail->Host  =  'smtp.example.com';
$mail->SMTPAuth  =  true;
$mail->Username  =  'user@example.com';
$mail->Password  =  'secret';

These steps unlock the power of authenticated email delivery.

Sending Your First Email

Ready to fire off your maiden email? Here’s a minimal example:

PHP
$mail->setFrom('from@domain.com',  'Your Name');
$mail->addAddress('to@domain.com',  'Recipient');
$mail->Subject  =  'Hello from PHP Mailer';
$mail->Body  =  'This is a test email!';

if(!$mail->send()) {
	echo  'Mailer Error: '  .  $mail->ErrorInfo;
} else {
	echo  'Message sent!';
}

Voilà – your message zips off like an express train.

SMTP Authentication Explained

Why authenticate? Email providers want to know you’re legit. SMTP authentication requires a username and password, preventing unauthorized users from abusing your server. It’s like showing your ID before boarding a flight.

Sending Emails Using SMTP with PHP Mailer

Using SMTP is like sending a letter through a trusted, secured courier service rather than just dropping it in the mailbox. It ensures your emails are authenticated and less likely to end up in the dreaded spam folder.

Here’s a simple example of how to send an email via SMTP using PHP Mailer:

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

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    // Server settings
    $mail->isSMTP();                                            // Set mailer to use SMTP
    $mail->Host       = 'smtp.example.com';                     // Specify main and backup SMTP servers
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = 'your_email@example.com';               // SMTP username
    $mail->Password   = 'your_password';                        // SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
    $mail->Port       = 587;                                    // TCP port to connect to

    // Recipients
    $mail->setFrom('your_email@example.com', 'Your Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name'); // Add a recipient

    // Content
    $mail->isHTML(true);                                        // Set email format to HTML
    $mail->Subject = 'Here is the subject via SMTP';
    $mail->Body    = '<b>This is a test SMTP email sent using PHP Mailer!</b>';
    $mail->AltBody = 'This is a test SMTP email sent using PHP Mailer!';

    $mail->send();
    echo 'Message has been sent successfully via SMTP';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Explanation:

  • $mail->isSMTP(); tells PHP Mailer to use SMTP instead of the basic mail function.
  • Replace 'smtp.example.com''your_email@example.com', and 'your_password' with your real SMTP server credentials.
  • TLS encryption (ENCRYPTION_STARTTLS) is enabled for secure communication.
  • Port 587 is commonly used for TLS; if your provider uses SSL, you might use port 465.
  • The email includes both HTML content (Body) and plain text (AltBody) for fallback.

Adding Attachments

Need to attach a file? Use:

PHP
$mail->addAttachment('/path/to/file.pdf',  'Document.pdf');

Whether it’s a PDF or image, php mailer handles the MIME encoding under the hood.

Sending HTML Emails

Want a splash of color? Switch to HTML:

PHP
$mail->isHTML(true);
$mail->Body  =  '<h1>Welcome!</h1><p>This is an <strong>HTML</strong> email.</p>';
$mail->AltBody  =  'Welcome! This is an HTML email.';

Your email becomes a miniature webpage in the inbox.

Handling Errors Gracefully

Don’t let errors crash your app. Wrap sends in try/catch:

PHP
try {
	$mail->send();
	echo  'Sent!';
} catch (Exception  $e) {
	error_log('Mail Error: '  .  $mail->ErrorInfo);
	echo  'Sorry, email could not be sent.';
}

This approach keeps your user experience smooth.

Security Best Practices

Protect your credentials:

  • Store SMTP passwords in environment variables.
  • Use TLS/SSL ($mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;).
  • Limit attachments types to safe formats.

Treat your configuration like a vault – lock it down!

Real-World Example: Contact Form

Imagine a simple contact form:

HTML
<form  method="post">
	<input  name="email"  type="email"  required>
	<textarea  name="message"  required></textarea>
	<button  type="submit">Send</button>
</form>

In PHP:

PHP
if($_POST)  {
	$mail->addAddress('support@domain.com');
	$mail->Subject  =  'New Message';
	$mail->Body  =  "From: {$_POST['email']}\nMessage: {$_POST['message']}";
	$mail->send();
}

A real visitor just hit “Send,” and you get the message instantly.

Debugging Tips

When things go wrong, enable verbose debug:

PHP
$mail->SMTPDebug  =  2;
$mail->Debugoutput  =  'html';

This prints detailed logs – your email’s black box.

Advanced Features

Explore:

  • CC/BCC: $mail->addCC()$mail->addBCC()
  • Custom headers: $mail->addCustomHeader()
  • Embedded images: $mail->addEmbeddedImage()

These unlock pro-level email functionality.

Common Pitfalls and Solutions

  • Emails stuck in spam? Use valid SPF and DKIM records.
  • Invalid certificates? Disable peer verification only in dev:
PHP
$mail->SMTPOptions  =  [
	'ssl'  =>  ['verify_peer'  =>  false,  'verify_peer_name'  =>  false]
];
  • Large attachments? Check server limits.

Conclusion & Next Steps

You’ve now mastered php mailer, from installation to advanced features. As you build your next project, remember that sending emails doesn’t have to be a headache – it can be a smooth, reliable process. Ready to explore more? Check the official PHPMailer documentation for deeper dives and community tips.

FAQs

What is the difference between mail() and PHP Mailer?

mail() is PHP’s basic function without authentication or modern headers; PHP Mailer adds SMTP, security, and rich formatting.

How do I install PHP Mailer without Composer?

Download the ZIP from GitHub, extract it, and include src/PHPMailer.php and src/SMTP.php manually.

Can PHP Mailer send attachments larger than 5MB?

Yes, but ensure your upload_max_filesize and post_max_size in php.ini exceed your file size.

Is it safe to disable SSL verification in production?

No. Only disable peer verification in local development environments to avoid certificate errors.

Where can I find more examples of PHP Mailer usage?

Visit the official PHPMailer GitHub repository or the Mailtrap tutorial for detailed guides.

Deploy your first application in 10 minutes, Risk Free!

Learn how ServerAvatar simplifies server management with intuitive dashboards and automated processes.
  • No CC Info Required
  • Free 4-Days Trial
  • Deploy in Next 10 Minutes!