Я использую форму в Yeti CRM, которая позволяет пользователю просматривать документ, а затем дает им возможность отправить указанный документ по электронной почте. Он использует PHPMailer, но я не могу заставить его прикрепить документ. Все остальные поля отвечают на изменения (Кому, От, Тема, Тело), но ничего не прикрепляется. Журналы ошибок не выдают ошибку.
Я попытался напрямую связать файл, который, как я знаю, существует, но все же безуспешно. Может кто-нибудь увидеть в коде ниже, где я на самом деле не прикрепляю документ?
Вот функция PHP
public function process(\App\Request $request)
{
$moduleName = $request->getModule();
$recordId = $request->getInteger('record');
$documentRecordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName);
$currentUser = Users_Record_Model::getCurrentUserModel();
$mails = $request->get('to');
$message = $request->get('message');
$from['email'] = $currentUser->get('email1');
$name = $currentUser->get('first_name') . " " . $currentUser->get('last_name');
$from['name'] = $name;
$file = $documentRecordModel->get('filename');
$title = $documentRecordModel->get('notes_title') . substr($file, strrpos($file, "."));
if (strpos($file, "\\\\") !== false) {
$file = trim($file);
$file = str_replace('\\\\', '\\', $file);
$file = str_replace('\\', '/', $file);
$file = str_replace(' ', '%20', $file);
$file = ROOT_DIRECTORY . DIRECTORY_SEPARATOR .
"public_html" . DIRECTORY_SEPARATOR .
"external" .
$file;
$attachment[$file] = $title;
} else {
//this is a http type document, so just link straight to it.
$message .= '<br />' . '<a href=' . $file . '>' . $title . '</a>';
}
if (count($mails) > 0) {
$results[] = \App\Mailer::sendFromTemplate([
'template' => 'ZcoSendPDFFile',
'moduleName' => 'Documents',
'recordId' => $recordId,
'to' => $mails,
'from' => $from,
'message' => $message,
'attachments' => $attachment,
//'smtp_id' => 2,
]);
}
$response = new Vtiger_Response();
$response->setResult($results);
$response->emit();
}
}
Это файл js, который строит параметры
$(document).ready(function () {
var form = document.getElementById("emailDocument");
form.onsubmit = function (event) {
event.preventDefault();
let thisInstance = this;
let fromEmail = $("#fromEmail").html();
let toEmail = $("#toEmail").val();
let message = $("#message").val();
let recordId = getParameterByName("record");
let attachment = $("#pdfAttach").html();
let params = {
'module': 'Documents',
'action': 'ZcoEmailFile',
'mode': 'process',
'from': fromEmail,
'to': toEmail,
'message': message,
'record': recordId,
'attachments': attachment
};
$.post({
url: "index.php",
data: params,
ContentType: "text/json",
success: function() {
alert('Email has been sent!');
},
beforeSend: function(xhr) {
$("#submitEmail").attr("disabled", "disabled");
},
complete: function() {
$("#submitEmail").removeAttr("disabled");
},
error: function(msg) {
alert(JSON.stringify(msg));
}
});
};
});
И форма
<form id="emailDocument">
<div id="pdfAttach" value="{$FILENAME}" style=display:none;>{$FILENAME}</div>
<div class="row pdfForm">
<div class="col-md-5">
<div class="toFrom">From:</div>
<div><span id="fromEmail" class="ml-1">{$USER_MODEL->get('email1')}</span></div>
<br />
<div class="toFrom">To:</div>
<div><input type="text" id="toEmail" value="{$CONTACT->get('email')}"></div>
<br />
</div>
<div class="col-md-5" rowspan="2">
Additional Message:
<textarea type="text" id="message" rows="3" cols="50"></textarea></div>
<div class="col-md-2">
<br />
<input type="submit" value="Submit" id="submitEmail">
</div>
</div>
</form>
Письмо отправляется в порядке со всеми полями, кроме вложения. Я не использовал PHP шесть лет, поэтому достаточно сказать, что я немного ржавый. Кто-нибудь может понять, почему вложение не прикрепляется?