Я переставляю функцию php mail () с PHPMailer , чтобы использовать аутентификацию SMTP.Мне удалось заставить его работать нормально, без использования автозагрузки, но вместо этого с использованием пространства имен:
test.php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/* The main PHPMailer class. */
require 'PHPMailer/src/PHPMailer.php';
/* Exception class. */
require 'PHPMailer/src/Exception.php';
/* SMTP class, needed if you want to use SMTP. */
require 'PHPMailer/src/SMTP.php';
$email = new PHPMailer(TRUE);
...
/* Finally send the mail. */
if (!$email->send()) {
/* PHPMailer error. */
return $email->ErrorInfo;
} else {
return "OK";
}
Как уже говорилось, все работает отлично.
Но когда я пытаюсь превратить почтовую часть в функцию, сохраненную во внешнем файле (здесь, mail.php), у меня возникают проблемы с «HTTP ERROR 500»;Я полагаю, что это из-за пространства имен, которое неправильно отображается оператором new PHPMailer(TRUE)
внутри функции.
test2.php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/* The main PHPMailer class. */
require 'PHPMailer/src/PHPMailer.php';
/* Exception class. */
require 'PHPMailer/src/Exception.php';
/* SMTP class, needed if you want to use SMTP. */
require 'PHPMailer/src/SMTP.php';
send_mail($to_address, $from_address, $from_name, $email_subject, $email_body);
mail.php
function send_mail($to_address, $from_address, $from_name, $email_subject, $email_body)
{
$email = new PHPMailer(TRUE);
...
/* Finally send the mail. */
if (!$email->send()) {
/* PHPMailer error. */
return $email->ErrorInfo;
} else {
return "OK";
}
}
Как правильно использовать операторы пространства имен внутри функции?И / или есть ли лучший способ решить проблему?Заранее спасибо.
PS: структура каталогов следующая:
test.php
test2.php
inc \ mail.php