Отправить письмо с использованием PHP напрямую без очереди базы данных - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь изменить существующую функцию электронной почты PHP на платформе Yeti CRM.Прямо сейчас функция sendFromTemplate ($ params) принимает собранные переменные формы (хранящиеся в $ params) и отправляет их другой функции, которая записывает ее в таблицу базы данных, которая ставится в очередь и отправляется каждые пять минут.Я пытаюсь использовать PHPMailer или собственный PHP для прямой отправки электронной почты, но получаю ошибки.

В коде я закомментировал функцию addMail, которая создает очередь данных и вместо этого устанавливает $ params = $ mailer-> send ().Я получаю сообщение об ошибке: «PHP Fatal error: Uncaught Error: вызов функции-члена send () для null.

Другой код, который я пробовал, и ошибка

$ params = $ mailer-> send ($ params); Неустранимая ошибка PHP: необработанная ошибка: вызов функции-члена send () со значением null

$ params-> mailer-> send (); Неустранимая ошибка PHP: необработанная ошибка: вызовк функции-члену send () со значением NULL

return ['result' => $ params-> send (), 'error' => implode (PHP_EOL, $ params-> error)]; PHP фатальная ошибка: Uncaught Error: вызов функции-члена send () для массива

Вот функция, которую я изменяю.

public static function sendFromTemplate($params)
    {
        Log::warning('Send mail from template', 'Mailer');

        //error_log('Testing - sendFromTemplate');

        if (empty($params['template'])) {
            Log::warning('No templete', 'Mailer');

            return false;
        }

        $recordModel = false;
        if (empty($params['recordModel'])) {
            $moduleName = $params['moduleName'] ?? null;
            if (isset($params['recordId'])) {
                $recordModel = \Vtiger_Record_Model::getInstanceById($params['recordId'], $moduleName);
            }
        } else {
            $recordModel = $params['recordModel'];
        }
        //error_log('Template Name: ' . $params['template']);
        $template = Mail::getTemplete($params['template']);
        //error_log('Testing - template: ' . print_r($template, false));
        if (!$template) {
            Log::warning('No mail templete', 'Mailer');

            return false;
        }

        //error_log('have a template and all');
        $textParser = $recordModel ? TextParser::getInstanceByModel($recordModel) : TextParser::getInstance($params['moduleName'] ?? '');
        if (!empty($params['language'])) {
            $textParser->setLanguage($params['language']);
        }
        if (!empty($params['sourceRecord'])) {
            $textParser->setSourceRecord($params['sourceRecord'], $params['sourceModule']);
        }
        $textParser->setParams(array_diff_key($params, array_flip(['subject', 'content', 'attachments', 'recordModel'])));
        $params['subject'] = $textParser->setContent($template['subject'])->parse()->getContent();
        $params['content'] = $textParser->setContent($template['content'])->parse()->getContent();

        //Added to allow for something extra from customer service.
        $params['content'] = str_replace("$(zcoMessage)", $params['message'], $params['content']);

        unset($textParser);
        if (empty($params['smtp_id']) && isset($template['smtp_id'])) {
            $params['smtp_id'] = $template['smtp_id'];
        }
        if (isset($template['attachments'])) {
            $params['attachments'] = array_merge(empty($params['attachments']) ? [] : $params['attachments'], $template['attachments']);
        }
        if (!empty($template['email_template_priority'])) {
            $params['priority'] = $template['email_template_priority'];
        }
        $params = $mailer->send();
        return true;
        //return static::addMail(array_intersect_key($params, array_flip(static::$quoteColumn)));
    }

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

...