Как создать почтовую функцию с PHPMailer без использования автозагрузки - PullRequest
0 голосов
/ 06 февраля 2019

Я переставляю функцию 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

1 Ответ

0 голосов
/ 07 февраля 2019

По данной информации вы сможете решить вашу проблему с помощью этого решения:

inc / mail.php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

/* The main PHPMailer class. */
require_once '../PHPMailer/src/PHPMailer.php';
/* Exception class. */
require_once '../PHPMailer/src/Exception.php';
/* SMTP class, needed if you want to use SMTP. */
require_once '../PHPMailer/src/SMTP.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";
    }
}

Смотрите, что пространства именне меняйте, потому что пространства имен остаются неизменными независимо от структуры файла.Но пути к включаемым файлам должны быть изменены, потому что ваш PHP-файл может иметь любое имя и помещаться в любой доступный для вас путь.

Поэтому следующим шагом является включение вашей функции вфинальный файл и протестируйте его:

test.php

require_once 'inc/mail.php';

send_mail($to_address, $from_address, $from_name, $email_subject, $email_body);
...