adminUser();
$module = $entity->getModuleName();
$taskContents = Zend_Json::decode($this->getContents($entity));
$relatedInfo = Zend_Json::decode($this->getRelatedInfo());
$from_email = $taskContents['fromEmail'];
$from_name = $taskContents['fromName'];
// $to_email = $taskContents['toEmail'];
$cc = $taskContents['ccEmail'];
$bcc = $taskContents['bccEmail'];
$replyTo = $taskContents['replyTo'];
$subject = $taskContents['subject'];
$content = $taskContents['content'];
$isPdfTemplateEnabled = $this->pdf;
$pdfTemplateId = $this->pdfTemplateId;
if (!$entityCache) {
$entityCache = new VTEntityCache($admin);
}
$et = new VTEmailRecipientsTemplate($this->recepient);
$to_email = $et->render($entityCache, $entity->getId());
if(!empty($to_email)) {
//Storing the details of emails
$entityIdDetails = vtws_getIdComponents($entity->getId());
$entityId = $entityIdDetails[1];
$moduleName = 'Emails';
$userId = $current_user->id;
$emailFocus = CRMEntity::getInstance($moduleName);
$processedContent = Emails_Mailer_Model::getProcessedContent($content); // To remove script tags
$mailerInstance = Emails_Mailer_Model::getInstance();
$mailerInstance->isHTML(true);
$processedContentWithURLS = $mailerInstance->convertToValidURL($processedContent);
$emailFocus->column_fields['assigned_user_id'] = $userId;
$emailFocus->column_fields['subject'] = $subject;
$emailFocus->column_fields['description'] = $processedContentWithURLS;
$emailFocus->column_fields['from_email'] = $from_email;
$emailFocus->column_fields['saved_toid'] = $to_email;
$emailFocus->column_fields['ccmail'] = $cc;
$emailFocus->column_fields['bccmail'] = $bcc;
$emailFocus->column_fields['parent_id'] = $entityId."@$userId|";
$emailFocus->column_fields['email_flag'] = 'SENT';
$emailFocus->column_fields['activitytype'] = $moduleName;
$emailFocus->column_fields['date_start'] = date('Y-m-d');
$emailFocus->column_fields['time_start'] = date('H:i:s');
$emailFocus->column_fields['mode'] = '';
$emailFocus->column_fields['id'] = '';
$emailFocus->save($moduleName);
// To add entry in ModTracker
$entityFocus = CRMEntity::getInstance($module);
$entityFocus->retrieve_entity_info($entityId, $module);
relateEntities($entityFocus, $module, $entityId, 'Emails', $emailFocus->id);
//Including email tracking details
$emailId = $emailFocus->id;
$imageDetails = Vtiger_Functions::getTrackImageContent($emailId, $entityId);
$content = $content.$imageDetails;
if (stripos($content, '
')) {
$mailerInstance->AddEmbeddedImage('layouts/v7/skins/images/logo_mail.jpg', 'logo', 'logo.jpg',"base64","image/jpg");
}
$nameEmailArray = Vtiger_Functions::extractNameEmail($from_email);
if($nameEmailArray) {
$from_name = $nameEmailArray['name'];
$from_email = $nameEmailArray['email'];
}
//set properties
$toEmail = trim($to_email,',');
if(!empty($toEmail)) {
if(is_array($toEmail)) {
foreach ($toEmail as $email) {
$mailerInstance->AddAddress($email);
}
}else{
$toEmails = explode(',', $toEmail);
foreach ($toEmails as $email) {
$mailerInstance->AddAddress($email);
}
}
}
//Retrieve MessageID from Mailroom table only if module is not users
$inReplyToMessageId = $mailerInstance->retrieveMessageIdFromMailroom($entityId);
$generatedMessageId = $mailerInstance->generateMessageID();
if (empty($inReplyToMessageId)) {
$inReplyToMessageId = $generatedMessageId;
}
//Set messageId header for every sending email
if (!empty($generatedMessageId)) {
$mailerInstance->MessageID = $generatedMessageId;
}
//If variable is not empty then add custom header
if (!empty($inReplyToMessageId)) {
$mailerInstance->AddCustomHeader("In-Reply-To", $inReplyToMessageId);
}
$this->addCCAddress($mailerInstance, $cc);
$this->addCCAddress($mailerInstance, $bcc,true);
$mailerInstance->From = $from_email;
$mailerInstance->FromName = decode_html($from_name);
$mailerInstance->AddReplyTo($replyTo);
$mailerInstance->Subject = strip_tags(decode_html($subject));
$mailerInstance->Body = decode_emptyspace_html($content);
$mailerInstance->Body = Emails_Mailer_Model::convertCssToInline($mailerInstance->Body);
$mailerInstance->Body = Emails_Mailer_Model::makeImageURLValid($mailerInstance->Body);
$emailRecord = Emails_Record_Model::getInstanceById($emailId);
$mailerInstance->Body = $emailRecord->convertUrlsToTrackUrls($mailerInstance->Body,$entityId);
$plainBody = decode_html($content);
$plainBody = preg_replace(array("/
/i","/
/i","/
/i"),array("\n","\n","\n"),$plainBody);
$plainBody = strip_tags($plainBody);
$plainBody = Emails_Mailer_Model::convertToAscii($plainBody);
$plainBody = $emailRecord->convertUrlsToTrackUrls($plainBody,$entityId,'plain');
$mailerInstance->AltBody = $plainBody;
//Block to get file details if comment is having attachment
if(!empty($relatedInfo) && $relatedInfo['module'] == 'ModComments'){
$modcommentsRecordId = $relatedInfo['id'];
$modcommentsRecordModel = ModComments_Record_Model::getInstanceById($modcommentsRecordId);
$modcommentsRecordModel->set('id',$modcommentsRecordId);
$fileDetails = $modcommentsRecordModel->getFileDetails();
//If no attachment details are found
$path = '';
//There can be multiple attachments for a single comment
foreach($fileDetails as $fileDetail){
if(!empty($fileDetail)){
$path = $fileDetail['path'].$fileDetail['attachmentsid'].'_'.decode_html($fileDetail['name']);
$mailerInstance->AddAttachment($path);
}
}
}
$archive = false;
if ($module == 'Project' && ($this->workflowId == 63)) {
$archive = Vtiger_Base_Service::createArchive($entityId);
$archive
? $mailerInstance->AddAttachment($archive['path'])
: false;
}
file_put_contents(
'logs/mail.log',
implode(' / ', [
date('Ymd His'),
$module,
$entityId,
$this->workflowId,
var_export($archive, 1),
]) . "\n",
FILE_APPEND
);
$mailerInstance->send(true);
if ($archive && file_exists($archive['path'])) @unlink($archive['path']);
$error = $mailerInstance->getError();
if(!empty($emailId)) {
$emailFocus->setEmailAccessCountValue($emailId);
}
if($path){
if(!empty($fileDetails) && is_array($fileDetails)){
foreach($fileDetails as $fileDetail){
$modcommentsRecordModel->uploadAndSaveFile($emailId,$fileDetail['attachmentsid']);
}
}
}
if($error) {
//If mail is not sent then removing the details about email
$emailFocus->trash($moduleName, $emailId);
} else {
//If mail sending is success store message Id for given crmId
if($generatedMessageId && $entityId){
$mailerInstance->updateMessageIdByCrmId($generatedMessageId,$entityId);
}
}
}
$util->revertUser();
}
/**
* Function to get contents of this task
* @param