Search code examples
phpfunctionclassemailphpmailer

How to make "PHPmailer" work in a function


I don't know how to send a mail using PHPmailer in a function.

I want to do something similar to this - when I'll want to send a mail, I'll just call a function (like send::mail()). here is my code:

<?php
require '.\vendor\autoload.php';

//PHPMailer Object
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->IsSendmail();
//From email address and name
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->setFrom('my.bot.mail@gmail.com', 'Bot name');
$mail->Password = "########";                       // SMTP password
$mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465;         
//To address and name
$mail->addAddress("mymail@gmail.com"); //Recipient name is optional

//Address to which recipient will reply

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
$mail->Mailer = "sendmail";
if(!$mail->send()) 
{
    echo "Mailer Error: " . $mail->ErrorInfo;
}
?>

can someone help me put it into a function? when I tried, the "use" command didn't work.


Solution

  • First, you must determine the data.

        $mailHost = '';
        $mailSMTPAuth = '';
        $mailUsername = '';
        $mailPassword = '';
        $mailSMTPSecure = '';
        $mailPort = '';
        $mailSenderAddress = '';
        $mailSenderName = '';
    

    Then you can generate a function that contains only the recipient, subject and message, and you can send the mail easily by pull the settings into this function:

    function sendMail($sendMailAdress, $sendMailName, $sendMailSubject, $sendMailMessage) {
        global $mailHost;
        global $mailSMTPAuth;
        global $mailUsername;
        global $mailPassword;
        global $mailSMTPSecure;
        global $mailPort;
        global $mailSenderAddress;
        global $mailSenderName;
    
        require_once('class/phpmailer/PHPMailerAutoload.php');
        $mail = new PHPMailer;
        $mail->isSMTP(); // Set mailer to use SMTP
        $mail->Host = $mailHost; // Specify main and backup SMTP servers
        $mail->SMTPAuth = $mailSMTPAuth; // Enable SMTP authentication
        $mail->Username = $mailUsername; // SMTP username or mail
        $mail->Password = $mailPassword; // SMTP password
        $mail->SMTPSecure = $mailSMTPSecure; // Enable TLS encryption, `ssl` also accepted
        $mail->Port = $mailPort; // TCP port to connect to
        $mail->CharSet = 'utf-8';
        $mail->setFrom($mailSenderAddress, $mailSenderName);
        $mail->addAddress($sendMailAdress, $sendMailName); // Add a recipient
        $mail->isHTML(true); // Set email format to HTML
        $mail->Subject = $sendMailSubject;
        $mail->Body = $sendMailMessage;
        if(!$mail->send()) {
            return false;
        } else {
            return true;
        }
    }
    

    The function will work like this:

    sendMail('hello@test.com', 'Test User', 'Subject of test mail', 'And your mail message);