@avtomon
Full-stack разработчик

Почему PHPMailer требует больше 1Гб памяти?

Пытаюсь отправить письма через PHPMailer (PHP7 крутится php-fpm под FreeBSD), код:
function mailSend ($addresses, $subject, $message)
{
    try {
        $mail = new PHPMailer;
        $mail->SMTPDebug = 3;
        $mail->setLanguage('ru', __DIR__ . '/PHPMailer/language/phpmailer.lang-ru.php');
        $mail->CharSet = MAIL_CHARSET;
        $mail->isSMTP();
        $mail->Host = MAIL_HOST;
        $mail->SMTPAuth = true;
        $mail->Username = MAIL_USERNAME;
        $mail->Password = MAIL_PASSWORD;
        $mail->SMTPSecure = 'ssl';
        $mail->Port = MAIL_PORT;

        $mail->From = MAIL_FROM;
        $mail->FromName = MAIL_FROM_NAME;
        $mail->addAddress($addresses);
        $mail->addReplyTo(MAIL_REPLYTO_ADDRESS, MAIL_REPLYTO_NAME);

        $mail->WordWrap = 50;
        //$mail->addAttachment('/var/tmp/file.tar.gz');
        //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');
        $mail->isHTML(true);

        $mail->Subject = $subject;
        $mail->Body = $message;

        if (!$mail->send()) {
            echo 'false';
        } else {
            echo 'true';
        }
    }
    catch (Exception $e)
    {
        echo $e->getMessage();
    }
}

mailSend('avtomon86@mail.ru', 'test', 'test');

Скрипт выдает ошибку:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1113159516 bytes) in /usr/local/www/avtomon.com/classes/PHPMailer/class.smtp.php on line 578.

Понимаю, что библиотека большая, но требовать больше Гб памяти это слишком. В чем может быть проблема?
  • Вопрос задан
  • 685 просмотров
Пригласить эксперта
Ответы на вопрос 2
ubernoob
@ubernoob
Работаю с ней под php5.6 на сервере с 512 оперативы, всё отлично. Думаю дело в php-fpm или в php7 ставьте xhprof смотрите какая именно часть всю память сжирает
Ответ написан
@avtomon Автор вопроса
Full-stack разработчик
Если кому-то будет нужно...
Решил проблему пока закомментировав вот это:
$sock_status = stream_get_meta_data($this->smtp_conn);
            if ($sock_status['eof']) {
                // The socket is valid but we are not connected
                $this->edebug(
                    'SMTP NOTICE: EOF caught while checking if connected',
                    self::DEBUG_CLIENT
                );
                $this->close();
                return false;
            }

в методе connected класса SMTP, и вот это:
$info = stream_get_meta_data($this->smtp_conn);
            if ($info['timed_out']) {
                $this->edebug(
                    'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }

в методе get_lines того же класса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы