Current Location: Home> Latest Articles> How to Send Multiple Emails with Image Captchas Using PHP - Complete Tutorial and Code Examples

How to Send Multiple Emails with Image Captchas Using PHP - Complete Tutorial and Code Examples

M66 2025-07-14

How to Send Multiple Emails with Image Captchas Using PHP

Email has become an essential communication tool in today's digital world. Often, we need to send verification codes via email, such as during user registration or password resets. To enhance security and user experience, captcha images are frequently used. This article will walk you through the process of sending emails with image captchas using PHP, along with specific code examples.

Including the PHP Mailer Library

First, we need to include the PHP Mailer library, which is a popular and easy-to-use library for sending emails in PHP. Once we include this library, we can easily use the SMTP protocol to send emails. After importing the library, we can implement functionality to send emails with captchas.

Generating the Captcha Image

Generating a captcha image is a crucial step. To achieve this, we can use PHP's GD library, which provides functions to create images. Below is an example of how to generate a captcha image using PHP:

<?php
session_start();
$code = ""; // Save the generated captcha
$width = 200; // Image width
$height = 100; // Image height
$codeLength = 4; // Length of captcha
$image = imagecreate($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255); // Background color (white)
$fontColor = imagecolorallocate($image, 0, 0, 0); // Font color (black)
$fonts = array('arial.ttf', 'verdana.ttf', 'times.ttf'); // List of font files
for ($i = 0; $i < $codeLength; $i++) {
    $font = $fonts[array_rand($fonts)]; // Randomly select a font
    $char = chr(rand(65, 90)); // Randomly generate a character (A-Z)
    $code .= $char;
    imagettftext($image, 30, rand(-30, 30), 20 + $i * $width / $codeLength, 50, $fontColor, $font, $char); // Draw the character on the image
}
$_SESSION['code'] = $code; // Save captcha to session
header('Content-Type: image/jpeg');
imagejpeg($image); // Output the image
imagedestroy($image);

The above code generates a 200x100 captcha image and saves the captcha in the session.

Sending Emails with Captcha Images Using PHP Mailer

Next, we can use PHP Mailer to send an email with the captcha image. Here’s a full code example:

<?php
require 'vendor/autoload.php'; // Include PHP Mailer library
use PHPMailer\PHPMailer\PHPMailer;

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.example.com'; // SMTP server address
$mail->Port = 465; // SMTP server port
$mail->SMTPSecure = 'ssl'; // Encryption method
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'your_email@example.com'; // Email username
$mail->Password = 'your_password'; // Email password
$mail->setFrom('your_email@example.com', 'Your Name'); // Sender info
$mail->addAddress('recipient@example.com', 'Recipient Name'); // Recipient info
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Captcha Email'; // Email subject
$mail->Body = 'Your captcha is: ' . $_SESSION['code']; // Email body
$mail->send(); // Send the email

The above code demonstrates how to use PHP Mailer to send an email containing the captcha. In the code, we generate the captcha with PHP and include it in the email body.

Encapsulating the Function to Send Emails with Captcha

To make it easier to reuse, we can encapsulate the email sending functionality into a function. Here’s an example:

<?php
function sendEmailWithCaptcha($recipient, $name) {
    // Generate captcha image and save it in the session
    // ...
    // Send email using PHP Mailer
    // ...
}

By doing this, we can easily call this function anywhere we need to send an email with an image captcha.

Conclusion

By following this tutorial, you now know how to send multiple emails with image captchas using PHP. We have walked through the entire process of including the PHP Mailer library, generating captcha images, and sending the email via SMTP. We hope this guide has been helpful!