我正在尝试修改 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)));
}
我不知道我在这一点上做错了什么,所以任何输入都将不胜感激。我只需要发送一封电子邮件。