Неустранимая ошибка: невозможно переопределить PHPMailerAutoload ()

1

Я использую PHPMailer для отправки писем с моего локального хоста.

Я написал функцию, которая должна отправлять электронные письма зарегистрированным пользователям, которые выбрали вариант их получения. (например, подписка на рассылку новостей и т.д.)

function email_users($subject, $body) {
    include('core/db/db_connection.php');
    $sql = "SELECT email, first_name FROM '_users' WHERE allow_email = 1";
    $query = mysqli_query($dbCon, $sql);
    while (($row = mysqli_fetch_assoc($query)) !== false) {
        $body = "Hello ". $row['first_name'] . ", <br><br>" . $body;
        email($row['email'], $subject, $body);
    }
}

Код, вызывающий функцию:

if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
        ?>
            <h3 class="email_success">Emails have been sent</h2>
            <a href="admin.php" class="email_success_a">Go back to the admin page</a>
        <?php 
        } else {
            if (empty($_POST) === false) {
                if (empty($_POST['subject']) === true) {
                    $errors[] = 'A message subject is required.';
                }
                if (empty($_POST['body']) === true) {
                    $errors[] = 'A body message is required.';
                }
                if (empty($errors) === false) {
                    echo output_errors($errors);
                } else {
                    email_users($_POST['subject'], $_POST['body']);
                    header('Location: email_users.php?success');
                    exit();
                }
            }
// generate email form otherwise

Любая идея, почему я получаю эту ошибку?

Неустранимая ошибка: невозможно обновить PHPMailerAutoload()

Я также хотел бы отметить, что даже с этой ошибкой функция по-прежнему работает, и электронные письма отправляются...

EDIT: в соответствии с запросом см. Ниже функцию с помощью PHPMailer:

function email($user, $subject, $body) {
    require 'phpmailer/PHPMailerAutoload.php';
    $mail = new PHPMailer;

 /* $mail -> Host,username,password and other misc stuff
    $mail->Subject = $subject;
    $mail->Body    = $body;
    $mail->AltBody = $body; etc */
}
  • 0
    Где код, где вы создаете экземпляр класса phpmailer?
  • 2
    Скорее всего, вы используете require в нескольких местах вместо require_once при попытке загрузить PHPMailer. Либо так, либо вы объявили PHPMailerAutoload() в нескольких местах.
Показать ещё 6 комментариев
Теги:
phpmailer

2 ответа

3
Лучший ответ

Если вы используете

require 'phpmailer/PHPMailerAutoload.php';

в вашей функции, но вы вызываете функцию 2 раза, она будет обновлять класс. Просто используйте require_once().

require_once('phpmailer/PHPMailerAutoload.php');
1

После большого тестирования решение, которое я нашел, добавляет перенаправление заголовка в функцию и удаляет ее из вызывающего кода:

function email_users($subject, $body) {
    include('core/db/db_connection.php');
    $sql = "SELECT email, first_name FROM '_users' WHERE allow_email = 1";
    $query = mysqli_query($dbCon, $sql);
    while (($row = mysqli_fetch_assoc($query)) !== false) {
        $body = "Hello ". $row['first_name'] . ", <br><br>" . $body;
        email($row['email'], $subject, $body);
        header('Location: email_users.php?success');
    }
}

Кроме того, как указано в honerlawd, require_once необходим для того, чтобы это работало, иначе оно отправит электронное письмо только первой учетной записи, найденной в базе данных. Не переходя к успеху email_users.php?, Это вызовет бесконечный цикл, независимо от того, вызываю ли я require_once или требую.

Будет ли это правильным подходом или это просто временное беспорядочное решение?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню