Как распечатать SMTP-отладку в другом месте? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь отобразить отладочную информацию PHPMailer SMTP. Это нормально , если электронное письмо не удалось, но в случае успеха отправлено два письма.

<code>global $phpmailer;
$send = wp_mail( $to, 'Test Email', $message );

$phpmailer->SMTPDebug = 3;

ob_start();
$send = wp_mail( $to, 'Test Email', $message );
$smtp_debug = ob_get_clean();


echo "<pre>"; print_r( $smtp_debug ); echo "
";

Если я удалю первый wp_mail () :

<code>global $phpmailer;

$phpmailer->SMTPDebug = 3;

ob_start();
$send = wp_mail( $to, 'Test Email', $message );
$smtp_debug = ob_get_clean();


echo "<pre>"; print_r( $smtp_debug ); echo "
";

Выдает предупреждение:

PHP Предупреждение: создание объекта по умолчанию из пустого значения в строке: $phpmailer->SMTPDebug = 3;

Если я удалю второй wp_mail () , $smtp_debug будет пустым.

Итак, как отправить только одно электронное письмо в случае успеха, а также получить ошибку при ошибке?

1 Ответ

1 голос
/ 07 января 2020

Чтобы получить контроль над выводом отладки PHPMailer, вы можете ввести вызываемое свойство в свойство Debugoutput, так как исходный код говорит: :

$phpmailer->Debugoutput = function($str, $level) {
    echo "debug level $level; message: $str";
};

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

Как сказал @Akam, предупреждение default object, которое вы получаете, означает, что переменная $phpmailer пуста (например, NULL или undefined) и, таким образом, вы устанавливаете несуществующее свойство, в результате чего появляется предупреждение.

Убедитесь, что $phpmailer содержит то, что, как вы думаете, должно (т.е. отследите, где оно было изначально создано), и убедитесь, что код запускается до того, как вы попытаетесь использовать экземпляр.

...