PHPMailer Отладочные сообщения - PullRequest
0 голосов
/ 25 апреля 2018

Я использую PHPMailer и хотел бы сохранить в своей БД некоторую отладочную информацию.

Приведенный ниже код показывает, как сохранить отладочную информацию при использовании SMTP-сервера, как показано ниже:

mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->SMTPDebug = 2; //Alternative to above constant
$mail->isSMTP();  // tell the class to use SMTP
$mail->SMTPAuth   = true;                // enable SMTP authentication
$mail->Port       = 25;                  // set the SMTP port
$mail->Host       = "mail.yourhost.com"; // SMTP server
$mail->Username   = "name@yourhost.com"; // SMTP account username
$mail->Password   = "your password";     // SMTP account password

Согласно документации PHPMailer SMTPDebug имеет 4 уровня.

SMTP::DEBUG_OFF (0): Disable debugging (you can also leave this out completely, 0 is the default).
SMTP::DEBUG_CLIENT (1): Output messages sent by the client.
SMTP::DEBUG_SERVER (2): as 1, plus responses received from the server (this is the most useful setting).
SMTP::DEBUG_CONNECTION (3): as 2, plus more information about the initial connection - this level can help diagnose STARTTLS failures.
SMTP::DEBUG_LOWLEVEL (4): as 3, plus even lower-level information, very verbose, don't use for debugging SMTP, only low-level problems.

Когда я использую уровень 2, я получаю ответы клиента и сервера, записанные на экран.

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

1 Ответ

0 голосов
/ 25 апреля 2018

Да.Вы можете внедрить замыкание, которое захватывает выходные данные отладки и записывает их в вашу БД.В документах есть пример :

Это может быть что-то вроде этого (включая фильтрацию клиентских сообщений):

$mail->Debugoutput = function($str, $level) use ($db) {
    if (strpos($str, 'CLIENT -> SERVER') === false) {
        mysqli_query($db, "INSERT INTO maildebug SET level = '".mysqli_real_escape_string($db, $level)."', message = '".mysqli_real_escape_string($db, $str)."'");
    }
};

Несколько более аккуратным вариантом будетнакапливать все выходные данные отладки во временной переменной и записывать их в БД только в случае возникновения проблемы.

...