0

我正在尝试修改 Yeti CRM 平台上现有的 PHP 电子邮件功能。现在,函数 sendFromTemplate($params) 获取收集的表单变量(存储在 $params 中)并将其发送到另一个函数,该函数将其写入数据库表以每五分钟排队和发送一次。我正在尝试使用 PHPMailer 或原生 PHP 直接发送电子邮件,但我不断收到错误消息。

在代码中,我注释掉了执行数据库队列的 addMail 函数,而是设置了 $params = $mailer->send()。我收到错误消息:“ PHP 致命错误:未捕获的错误:在 null 上调用成员函数 send()。

我尝试过的其他代码和错误

$params = $mailer->发送($params); PHP 致命错误:未捕获的错误:在 null 上调用成员函数 send()

$params->mailer->send(); PHP 致命错误:未捕获的错误:在 null 上调用成员函数 send()

return ['result' => $params->send(), 'error' => implode(PHP_EOL, $params->error)]; PHP 致命错误:未捕获的错误:调用数组上的成员函数 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)));
    }

我不知道我在这一点上做错了什么,所以任何输入都将不胜感激。我只需要发送一封电子邮件。

4

0 回答 0