PHPMailer not working when function is within and included file

Something is mighty odd. I created a basic test file with the code from PHPMailer.

# Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'includes/PHPMailer/PHPMailer.php';
require 'includes/PHPMailer/SMTP.php';
require 'includes/PHPMailer/Exception.php';

function sendCampaignEmail ($email, $firstname, $lastname)
    {
    $mail = new PHPMailer(true); // Create a new PHPMailer instance. Passing `true` enables exceptions.
    try {
        //Server settings
        # $mail->SMTPDebug = SMTP::DEBUG_SERVER;       // Enable verbose debug output.  SMTP::DEBUG_SERVER = client and server messages
        # $mail->SMTPDebug = SMTP::DEBUG_CLIENT;       // SMTP::DEBUG_CLIENT = client messages
        $mail->SMTPDebug = SMTP::DEBUG_OFF;       // SMTP::DEBUG_OFF = off (for production use)
        $mail->isSMTP();                                            // Send using SMTP
        $mail->Host       = 'myhostxxxx.co.uk';                    // Set the SMTP server to send through
        $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
        $mail->Username   = '[email protected]';         // SMTP username
        $mail->Password   = 'xxxxxmyEmailPasswordxxxxx';        // SMTP password
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
        $mail->Port       = 465;                                    // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above

        //Recipients
        $mail->setFrom('myfromemail.co.uk', 'My Name');
        $mail->addAddress($email, $firstname . ' ' . $lastname);    // Add a recipient
        $mail->addReplyTo('myfromemail.co.uk', 'My Name');

        // Content
        $mail->isHTML(true);                                  // Set email format to HTML
        $mail->Subject = 'Here is the subject';
        $mail->Body    = 'Dear ' . $firstname . ' ' . $lastname . '<br/><br/>This is the HTML message body <b>in bold!</b>';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

        $mail->send();
        echo '<br/>Message has been sent to ' . $email . ' (' . $firstname . ' ' . $lastname . ')';
        } catch (Exception $e) {
            echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
        }
    }


$names= array();

$id=0;

$names[$id]['email'] = "[email protected]";
$names[$id]['first_name'] = "Bob";
$names[$id]['last_name'] = "gMail"; $id++;

$names[$id]['email'] = "[email protected]";
$names[$id]['first_name'] = "Sid";
$names[$id]['last_name'] = "Smith"; $id++;



$count=0;
while ($count < count($names))
    {
    sendCampaignEmail ($names[$count]['email'], $names[$count]['first_name'], $names[$count]['last_name']);
    $count++;
    }

THIS CODE ABOVE WORKS FINE.

So... Then, I took the function and put it into an Included file (where all my functions are: "globalfunctions.php").... And now it says "Fatal error: Uncaught Error: Class 'PHPMailer' not found"

So, now, at the top of my index.php, I have:

## PHP MAILER - # Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require_once 'includes/PHPMailer/PHPMailer.php';
require_once 'includes/PHPMailer/SMTP.php';
require_once 'includes/PHPMailer/Exception.php';

require_once 'includes/connect.php';
require_once 'includes/globalfunctions.php';

I am confused as everything else works. All my other functions work. I thought namespaces were global... But, I tried adding the "use" code into the function... but, as expected, that didn't work either....

I am stumped.


PHP use declarations are local aliases that apply only to the file they appear in. You have to add a use statement in every file that uses that class; you can't put all your declares in one file and then include it from somewhere else.

Now might be a good time to learn how to use composer as it takes care of a lot of this.