How can a Mailer class be utilized to improve the process of sending HTML emails in PHP?

Sending HTML emails in PHP can be cumbersome and error-prone. By creating a Mailer class, we can encapsulate the email sending functionality and make it easier to send HTML emails with attachments, inline images, and custom headers. This class can handle the complexities of email formatting and sending, allowing the developer to focus on the content of the email rather than the technical details.

<?php
class Mailer {
    public function sendHtmlEmail($to, $subject, $message, $attachments = array(), $headers = array()) {
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'Content-type: text/html; charset=iso-8859-1';
        
        $headers = implode("\r\n", $headers);

        $attachment_headers = array();
        foreach ($attachments as $attachment) {
            $attachment_headers[] = "Content-Type: application/octet-stream; name=\"" . basename($attachment) . "\"";
            $attachment_headers[] = "Content-Transfer-Encoding: base64";
            $attachment_headers[] = "Content-Disposition: attachment; filename=\"" . basename($attachment) . "\"";
            $attachment_headers[] = chunk_split(base64_encode(file_get_contents($attachment)));
        }

        $message = "<html><body>" . $message . "</body></html>";

        return mail($to, $subject, $message, $headers . "\r\n" . implode("\r\n", $attachment_headers));
    }
}

// Example of sending an HTML email with attachments
$mailer = new Mailer();
$to = 'recipient@example.com';
$subject = 'Test HTML Email';
$message = '<h1>Hello, world!</h1>';
$attachments = array('attachment1.pdf', 'attachment2.jpg');
$headers = array('From: sender@example.com', 'Reply-To: sender@example.com');

$mailer->sendHtmlEmail($to, $subject, $message, $attachments, $headers);
?>