Files
crm.clientright.ru/modules/Workflow2/tasks/WfTaskSendmail.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

893 lines
35 KiB
PHP

<?php
/**
This File was developed by Stefan Warnat <vtiger@stefanwarnat.de>
It belongs to the Workflow Designer and must not be distributed without complete extension
**/
require_once(realpath(dirname(__FILE__).'/../autoload_wf.php'));
require_once('modules/Emails/mail.php');
/* vt6 ready 2014/04/09 */
class WfTaskSendmail extends \Workflow\Task {
protected $_envSettings = array("sendmail_result", 'email_crm_id');
private $_mailRecord = null;
public function init() {
$this->addPreset("Attachments", "attachments", array(
'module' => $this->getModuleName()
));
}
public function beforeGetTaskform($viewer) {
global $adb;
$connected = $this->getConnectedObjects("Absender");
if(count($connected) > 0) {
$viewer->assign("from", array(
"from_mail" => $connected[0]->get("email1"),
"from_name" => trim($connected[0]->get("first_name")." ".$connected[0]->get("last_name")),
"from_readonly" => true,
));
}
$smtpServer = \Workflow\ConnectionProvider::getAvailableConfigurations('smtp');
$viewer->assign('SMTPSERVER', $smtpServer);
$connected = $this->getConnectedObjects("BCC");
$bccs = $connected->get("email1");
$viewer->assign("bccs", $bccs);
$from_email = $this->get("from_mail");
if($from_email === -1) {
global $current_user;
$from_email = $current_user->column_fields["email1"];
$from_name = $current_user->column_fields["first_name"]." ".$current_user->column_fields["last_name"];
$this->set("from_mail", $from_email);
$this->set("from_name", $from_name);
}
if($this->notEmpty('mailtemplate')) {
$mailtemplate = $this->get("mailtemplate");
if(is_numeric($mailtemplate)) {
$this->set('mailtemplate', 's#V2#\\Workflow\\Plugins\\EmailTemplate\\Core-'.$mailtemplate);
} else {
$parts = explode('#', $mailtemplate);
switch($parts[1]) {
case 'emailmaker':
$this->set('mailtemplate', 's#V2#\\Workflow\\Plugins\\EmailTemplate\\Emailmaker-'.$parts[2]);
break;
}
}
}
/* if(vtlib_isModuleActive('Emails')) {
$availableAttachments = \Workflow\InterfaceFiles::getAvailableFiles($this->getModuleName());
} else {
throw new \Exception('To use this task, you need to activate the "Emails" module.');
}
$jsList = array();
foreach($availableAttachments as $title => $group) {
foreach($group as $index => $value) {
$jsList[$index] = $value;
}
}
$viewer->assign("jsAttachmentsList", $jsList);
$viewer->assign("available_attachments", $availableAttachments);
if($this->get("attachments") == -1) {
$this->set("attachments", '{}');
}
if($this->get("attachments") == "") {
$this->set("attachments", '{}');
}
*/
$attachments = $this->get("attachments");
if($this->notEmpty('provider')) {
/**
* @var $smtpServer \Workflow\Plugins\ConnectionProvider\SMTP
*/
$smtpServer = \Workflow\ConnectionProvider::getConnection($this->get('provider'));
if(empty($smtpServer)) {
$query = "select from_email_field from vtiger_systems where server_type=?";
$params = array('email');
$result = $adb->pquery($query,$params);
$from_email_field = $adb->query_result($result,0,'from_email_field');
if(!empty($from_email_field)) {
$viewer->assign('show_emailfrom_checkbox', true);
} else {
$viewer->assign('show_emailfrom_checkbox', false);
}
} else {
$senderMail = $smtpServer->get('sender_mail');
if (!empty($senderMail)) {
$viewer->assign('show_emailfrom_checkbox', true);
} else {
$viewer->assign('show_emailfrom_checkbox', false);
}
}
} else {
$query = "select from_email_field from vtiger_systems where server_type=?";
$params = array('email');
$result = $adb->pquery($query,$params);
$from_email_field = $adb->query_result($result,0,'from_email_field');
if(!empty($from_email_field)) {
$viewer->assign('show_emailfrom_checkbox', true);
} else {
$viewer->assign('show_emailfrom_checkbox', false);
}
}
if(strpos($attachments, '"pdfmaker') !== false) {
$attachments = json_decode($this->get("attachments"), true);
if(is_array($attachments) && count($attachments) > 0) {
\Vtiger_Loader::autoLoad('PDFMaker_PDFMaker_Model');
$PDFMaker = new \PDFMaker_PDFMaker_Model();
if (method_exists($PDFMaker, "GetAvailableTemplates")) {
$templates = $PDFMaker->GetAvailableTemplates($this->getModuleName());
foreach ($templates as $index => $value) {
$pdfmaker[$index] = 'PDFMaker - ' . $value["templatename"];
}
foreach($attachments as $id => $attachment) {
//{"s#external#pdfmaker#1":["PDFMaker - Invoice","",{"val":"pdfmaker#1"}]
$parts = explode('#', $id);
if($parts[0] == 'pdfmaker') {
unset($attachments[$id]);
$attachments['s#external#pdfmaker#'.$parts[1]] = array($pdfmaker[$parts[1]], "", array("val" => "pdfmaker#".$parts[1]));
}
}
$this->set('attachments', json_encode($attachments));
}
}
}
$obj = new \Workflow\Emailtemplates();
$mailtemplates = $obj->getAllTemplates($this->getModuleName());
/*$sql = "SELECT * FROM vtiger_emailtemplates WHERE deleted = 0";
$result = $adb->query($sql);
$mailtemplates = array();
while($row = $adb->fetchByAssoc($result)) {
$mailtemplates['Email Templates'][$row["templateid"]] = $row["templatename"];
}*/
/*
if(vtlib_isModuleActive('EMAILMaker') && class_exists('EMAILMaker_Module_Model')) {
}
*/
/*
if(vtlib_isModuleActive('SWBeeFree') && class_exists('SWBeeFree_Module_Model')) {
$beefree = new \SWBeeFree_Module_Model();
$templates = $beefree->getTemplatesForModule($this->getModuleName());
foreach($templates as $template) {
$mailtemplates['BeeFree']['s#beefree#'.$template['id']] = $template['name'];
}
}
*/
$viewer->assign("MAIL_TEMPLATES", $mailtemplates);
$viewer->assign("fields", \VtUtils::getFieldsWithBlocksForModule($this->getModuleName(), true));
if(defined("WF_DEMO_MODE") && constant("WF_DEMO_MODE") == true) {
echo "<p style='text-align:center;margin:0;padding:5px 0;background-color:#fbcb09;font-weight:bold;'>The sendmail Task won't work on demo.stefanwarnat.de</p>";
}
}
/**
* @param $context \Workflow\VTEntity
* @return mixed
*/
public function handleTask(&$context) {
global $adb, $current_user;
global $current_language;
if(defined("WF_DEMO_MODE") && constant("WF_DEMO_MODE") == true) {
return "yes";
}
/* if(!class_exists("Workflow_PHPMailer")) {
require_once("modules/Workflow2/phpmailer/class.phpmailer.php");
}*/
#$result = $adb->query("select user_name, email1, email2 from vtiger_users where id=1");
#$from_email = "swarnat@praktika.de";
#$from_name = "Stefan Warnat";
$module = $context->getModuleName();
if($this->notEmpty('interactivemail')) {
$blockReqKey = '_sendmail_' . $this->getBlockId();
// var_dump($context);
if ($this->getWorkflow()->hasRequestValues($blockReqKey)) {
$data = $context->getEnvironment($blockReqKey);
// $this->getWorkflow()->
if(!empty($data['emailid'])) {
$record = \Vtiger_Record_Model::getInstanceById($data['emailid']);
$record->delete();
}
if(strpos($data['recepient'], ';#;') !== false) {
$data['recepient'] = explode(';#;', $data['recepient']);
} else {
$data['recepient'] = array($data['recepient']);
}
$this->set('from_mail', $data['from_mail']);
$this->set('from_name', $data['from_name']);
$this->set('recepient', implode(',', $data['recepient']));
$this->set('subject', $data['subject']);
$this->set('content', $data['content']);
}
}
$recepient = $this->get('recepient', $context);
if(strpos($recepient, ';#;') !== false) {
$recepient = str_replace(';#;', ',', $recepient);
}
if(strpos($recepient, ',') !== false) {
$recepients = explode(',', $recepient);
} else {
$recepients = array($recepient);
}
if($this->notEmpty('storeid')) {
$storeid = explode(',', $this->get('storeid'));
} else {
$storeid = array();
}
$recepient = array();
foreach($recepients as $receiver) {
if(substr($receiver, 0, 5) == 'crm##') {
$recieverParts = explode('##', $receiver);
$recepient[] = $recieverParts[2];
$storeid[] = $recieverParts[1];
} elseif(substr($receiver, 0, 5) == 'raw##') {
$recieverParts = explode('##', $receiver);
$recepient[] = $recieverParts[2];
} else {
$recepient[] = $receiver;
}
}
// var_dump($recepient);
if(!empty($storeid)) {
$this->set('storeid', '$crmid,'.implode(',',$storeid));
}
$this->set('recepient', implode(',', $recepient));
if(!$this->notEmpty('recepient')) {
return 'yes';
}
$et = new \Workflow\VTTemplate($context);
$to_email = $et->render(trim($this->get("recepient")),","); #
$connected = $this->getConnectedObjects("Absender");
if(count($connected) > 0) {
$from_name = trim($connected[0]->get("first_name")." ".$connected[0]->get("last_name"));
$from_email = $connected[0]->get("email1");
} else {
$from_name = $et->render(trim($this->get("from_name")),","); #
$from_email = $et->render(trim($this->get("from_mail")),","); #
}
$cc = $et->render(trim($this->get("emailcc")),","); #
$bcc = $et->render(trim($this->get("emailbcc")),","); #
/*
if($this->get('use_mailserver_from') == '1') {
$query = "select from_email_field from vtiger_systems where server_type=?";
$params = array('email');
$result = $adb->pquery($query, $params);
$from_email_field = $adb->query_result($result, 0, 'from_email_field');
if (!empty($from_email_field)) {
$from_email = $from_email_field;
}
}
*/
/**
* Connected BCC Objects
* @var $connected
*/
$connected = $this->getConnectedObjects("BCC");
$bccs = $connected->get("email1");
if(count($bccs) > 0) {
$bcc = array($bcc);
foreach($bccs as $bccTMP) {
$bcc[] = $bccTMP;
}
$bcc = trim(implode(",",$bcc),",");
}
if(strlen(trim($to_email, " \t\n,")) == 0 && strlen(trim($cc, " \t\n,")) == 0 && strlen(trim($bcc, " \t\n,")) == 0) {
return "yes";
}
$storeid = trim($this->get("storeid", $context));
if(empty($storeid) || $storeid == -1 || (!is_numeric($storeid) && strpos($storeid, ',') === false)) {
$storeid = $context->getId();
}
$embeddedImages = null;
$unlinkAfterSending = array();
$content = $this->get("content");
$subject = $this->get("subject");
$content = preg_replace( '/[\x{200B}-\x{200D}]/u', '', $content );
$subject = preg_replace( '/[\x{200B}-\x{200D}]/u', '', $subject );
#$subject = utf8_decode($subject);
#$content = utf8_encode($content);
$content = html_entity_decode(str_replace("&nbsp;", " ", $content), ENT_QUOTES, "UTF-8");
#$subject = html_entity_decode(str_replace("&nbsp;", " ", $subject), ENT_QUOTES, "UTF-8");
$mailtemplate = $this->get("mailtemplate");
if(!empty($mailtemplate) && $mailtemplate != -1) {
if(is_numeric($mailtemplate)) {
$obj = new \Workflow\Emailtemplates();
$mailtemplate = $obj->getTemplate('\\Workflow\\Plugins\\EmailTemplate\\Core-'.$mailtemplate, $context);
$content = str_replace('$mailtext', $content, $mailtemplate["content"]);
if(empty($subject)) {
$subject = $mailtemplate["subject"];
}
if(!empty($mailtemplate['images'])) {
$embeddedImages = $mailtemplate['images'];
}
} else {
$parts = explode('#', $mailtemplate);
switch($parts[1]) {
case 'emailmaker':
$obj = new \Workflow\Emailtemplates();
$mailtemplate = $obj->getTemplate('\\Workflow\\Plugins\\EmailTemplate\\Emailmaker-'.$parts[2], $context);
$content = str_replace('$mailtext', $content, $mailtemplate["content"]);
if(empty($subject)) {
$subject = $mailtemplate["subject"];
}
if(!empty($mailtemplate['images'])) {
$embeddedImages = $mailtemplate['images'];
}
break;
case 'beefree':
$obj = new \Workflow\Emailtemplates();
$mailtemplate = $obj->getTemplate('\\Workflow\\Plugins\\EmailTemplate\\Beefree-'.$parts[2], $context);
$content = str_replace('$mailtext', $content, $mailtemplate["content"]);
if(!empty($mailtemplate['images'])) {
$embeddedImages = $mailtemplate['images'];
}
break;
case 'V2':
$obj = new \Workflow\Emailtemplates();
$mailtemplate = $obj->getTemplate($parts[2], $context);
$content = str_replace('$mailtext', $content, $mailtemplate["content"]);
if(empty($subject)) {
$subject = $mailtemplate["subject"];
}
if(!empty($mailtemplate['images'])) {
$embeddedImages = $mailtemplate['images'];
}
break;
}
}
}
$subject = $et->render(trim($subject));
$content = $et->render(trim($content));
#$content = htmlentities($content, ENT_NOQUOTES, "UTF-8");
if(DEMO_MODE == false) {
if ($this->notEmpty('provider')) {
/**
* @var $smtpServer \Workflow\Plugins\ConnectionProvider\SMTP
*/
$smtpServer = \Workflow\ConnectionProvider::getConnection($this->get('provider'));
$mail = $smtpServer->getPHPMailer();
} else {
$mail = \Workflow\Plugins\ConnectionProvider\SMTP::getDefaultMailer();
}
if($this->get('use_mailserver_from') == '1') {
$from_email = $mail->From;
}
}
if(getTabid('Emails') && vtlib_isModuleActive('Emails')) {
$storeIdParts = array();
if(strpos($storeid, ',') !== false) {
$storeIdParts = explode(',', $storeid);
$storeid = array_shift($storeIdParts);
}
require_once('modules/Emails/Emails.php');
$focus = new Emails();
$focus->column_fields["assigned_user_id"] = \Workflow\VTEntity::getUser()->id;
$focus->column_fields["activitytype"] = "Emails";
$focus->column_fields["date_start"] = date("Y-m-d");
$focus->column_fields["time_start"] = date("H:i:s");
$focus->column_fields["parent_id"] = $storeid;
$focus->column_fields["email_flag"] = "SAVED";
$focus->column_fields["subject"] = $subject;
$focus->column_fields["description"] = $content;
$focus->column_fields["from_email"] = $from_email;
$focus->column_fields["saved_toid"] = '["'.str_replace(',','","',trim($to_email,",")).'"]';
$focus->column_fields["ccmail"] = $cc;
$focus->column_fields["bccmail"] = $bcc;
$focus->save("Emails");
$this->_mailRecord = $focus;
#error_log("eMail:".$emailID);
$emailID = $focus->id;
if(!empty($storeIdParts)) {
foreach($storeIdParts as $id) {
$sql = 'INSERT INTO vtiger_seactivityrel SET crmid = ?, activityid = ?';
$adb->pquery($sql, array($id, $emailID));
}
}
} else {
$emailID = "";
}
$attachments = json_decode($this->get("attachments"), true);
if(is_array($attachments) && count($attachments) > 0) {
// Module greifen auf Datenbank zurück. Daher vorher speichern!
$context->save();
//$this->addStat($attachments);
foreach($attachments as $key => $value) {
if($value == false) {
continue;
}
if(is_string($value)) { $value = array($value, false, array()); }
// legacy check
if(strpos($key, 'document#') === 0) {
$key = 's#'.$key;
}
if(strpos($key, 's#') === 0) {
$tmpParts = explode('#', $key, 2);
$specialAttachments = \Workflow\Attachment::getAttachments($tmpParts[1], $value, $context, \Workflow\Attachment::MODE_NOT_ADD_NEW_ATTACHMENTS);
//$this->addStat('Add Attachment 1');
//$this->addStat($specialAttachments);
foreach($specialAttachments as $attachment) {
$this->addStat($attachment[2]);
$this->addStat(filesize($attachment[1]).' Bytes');
if($attachment[0] === 'ID') {
$this->attachByAttachmentId($attachment[1]);
} elseif($attachment[0] === 'PATH') {
$this->attachFile($attachment[1], $attachment[2], $attachment[3]);
}
}
} else {
$file = \Workflow\InterfaceFiles::getFile($key, $this->getModuleName(), $context->getId());
//$this->addStat('Add Attachment 2');
//$this->addStat($file['path']);
//$this->addStat(filesize($file));
$this->attachFile($file['path'], $value[1] != false ? $value[1] : $file['name'], $file['type']);
}
}
}
if($_SERVER['REMOTE_ADDR'] == '87.134.26.231') {
ini_set('display_errors', 1);
error_reporting(-1);
}
if($embeddedImages === null && $this->get('attachImages') == '1') {
if(!function_exists('str_get_html')) {
require_once('include/simplehtmldom/simple_html_dom.php');
}
$html = str_get_html($content);
if(count($html->find('img')) > 0) {
$tmppath = realpath(vglobal('root_directory') . '/modules/Workflow2/tmp');
$embeddedImages = array();
$done = array();
$index = 50;
foreach ($html->find('img') as $img) {
$src = $img->src;
if(isset($done[$src])) {
$newCID = $done[$src];
} else {
$done[$src] = 'image'.$index;
$parts = explode('.', $src);
$fileSuffix = end($parts);
$tmpFile = tempnam($tmppath,'Embedd');
$unlinkAfterSending[] = $tmpFile;
try {
$content = \Workflow\VtUtils::getContentFromUrl($src);
} catch (\Exception $exp) {
$this->addStat('[SKIP] Error during download Image '.$src.': Code '.$exp->getCode());
$this->addStat(substr(htmlentities($exp->getMessage()), 0, 200));
continue;
};
if(empty($content)) {
continue;
}
file_put_contents($tmpFile, $content);
$embeddedImages['image'.$index] = array(
"name" => 'image'.$index.'.'.$fileSuffix,
"path" => $tmpFile
);
$newCID = 'image'.$index;
$index++;
}
$img->src = 'cid:'.$newCID;
}
}
$content = $html->save();
}
$receiver = explode(",", $to_email);
foreach($receiver as $to_email) {
$to_email = trim($to_email);
if(empty($to_email))
continue;
$mail->ClearAddresses();
if(DEMO_MODE == false) {
if(is_array($embeddedImages)) {
foreach ($embeddedImages AS $cid => $cdata) {
$mail->AddEmbeddedImage($cdata["path"], $cid, $cdata["name"]);
}
}
$to_email = trim($to_email,",");
$mail->FromName = $from_name;
if($this->get('use_mailserver_from') != '1') {
$mail->From = $from_email;
}
$this->addStat("From: ".$from_name." &lt;".$from_email."&gt;");
if($this->get('trackAccess') == '1') {
//Including email tracking details
global $site_URL, $application_unique_key;
$counterUrl = $site_URL.'/modules/Emails/actions/TrackAccess.php?parentId='.$storeid.'&record='.$focus->id.'&applicationKey='.$application_unique_key;
$counterHeight = 1;
$counterWidth = 1;
if(defined('TRACKING_IMG_HEIGHT')) {
$counterHeight = TRACKING_IMG_HEIGHT;
}
if(defined('TRACKING_IMG_WIDTH')) {
$counterWidth = TRACKING_IMG_WIDTH;
}
$content = $content."<img src='".$counterUrl."' alt='' width='".$counterWidth."' height='".$counterHeight."'>";
}
$mail->Subject = $subject;
$this->addStat("Subject: ".$subject);
$mail->MsgHTML($content);
$mail->SMTPDebug = 2;
if($this->notEmpty('multiplereceiver')) {
foreach($receiver as $to) {
$to = trim($to);
if(empty($to))
continue;
$mail->addAddress($to);
}
} else {
$mail->addAddress($to_email);
}
$this->addStat("To: ".$to_email);
setCCAddress($mail,'cc',$cc);
setCCAddress($mail,'bcc',$bcc);
if($this->get('replyto') != -1 && $this->get('replyto') != '') {
$replyto = $et->render(trim($this->get('replyto')));
$split = explode(',', $replyto);
foreach($split as $email) {
$email = trim($email);
if(empty($email)) continue;
$mail->addReplyTo($email);
}
}
if($this->get('confirmreading') != -1 && $this->get('confirmreading') != '') {
$mail->ConfirmReadingTo = $this->get('confirmreading');
}
#$mail->IsHTML(true);
if(!empty($emailID)) {
addAllAttachments($mail, $emailID);
}
$mail->Debugoutput=0;
$this->addStat('PHPMailer Attachments');
$this->addStat($mail->GetAttachments());
$this->addStat($emailID);
$sql = "select vtiger_attachments.* from vtiger_attachments inner join vtiger_seattachmentsrel on vtiger_attachments.attachmentsid = vtiger_seattachmentsrel.attachmentsid inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_attachments.attachmentsid where vtiger_crmentity.deleted=0 and vtiger_seattachmentsrel.crmid=?";
$res = $adb->pquery($sql, array($emailID));
$count = $adb->num_rows($res);
global $root_directory;
for($i=0;$i<$count;$i++)
{
$fileid = $adb->query_result($res,$i,'attachmentsid');
$filename = decode_html($adb->query_result($res,$i,'name'));
$filepath = $adb->query_result($res,$i,'path');
$filewithpath = $root_directory.$filepath.$fileid."_".$filename;
$this->addStat($filewithpath);
$this->addStat(is_file($filewithpath) ? 'exist' : 'not exist');
//if the file is exist in test/upload directory then we will add directly
//else get the contents of the file and write it as a file and then attach (this will occur when we unlink the file)
}
if($this->get('interactivemail') === '1') {
$blockReqKey = '_sendmail_'.$this->getBlockId();
if(!$this->getWorkflow()->hasRequestValues($blockReqKey)) {
$req = new \Workflow\RequestValuesForm($blockReqKey);
$req->setSettings('width', '700px');
$req->setTargetScope($blockReqKey);
$row1 = $req->addRow();
$fieldSender = $row1->addField();
$fieldSender->setType('hidden');
$fieldSender->setFieldname('emailid');
$fieldSender->setValue($emailID);
$fieldSender = $row1->addField();
$fieldSender->setType('email-text');
$fieldSender->setFieldname('from_mail');
$fieldSender->setValue($mail->From);
$fieldSender->setLabel('From');
$fieldSenderName = $row1->addField();
$fieldSenderName->setType('text');
$fieldSenderName->setFieldname('from_name');
$fieldSenderName->setLabel('From Name');
$fieldSenderName->setValue($mail->FromName);
$row2 = $req->addRow();
$fieldTo = $row2->addField();
$fieldTo->setType('email');
$fieldTo->setFieldname('recepient');
$fieldTo->setConfigValue('multiple', '1');
$fieldTo->setValue(implode(',', $receiver));
$fieldTo->setLabel('Recipient');
$row3 = $req->addRow();
$fieldSubject = $row3->addField();
$fieldSubject->setType('text');
$fieldSubject->setFieldname('subject');
$fieldSubject->setValue($mail->Subject);
$fieldSubject->setLabel('Subject');
$row4 = $req->addRow();
$fieldContent = $row4->addField();
$fieldContent->setType('htmleditor');
$fieldContent->setFieldname('content');
$fieldContent->setValue($mail->Body);
$fieldContent->setLabel('E-Mail Body');
$req->startRequestValues($this, $context);
return false;
}
}
try {
ob_start();
$mail_return = MailSend($mail);
$debug = ob_get_clean();
$debug = preg_replace("/\s(.{60,})\s/", " ", $debug);
$debug = preg_replace("/CLIENT -> SMTP:(\s+)\n/", "", $debug);
$this->addStat($debug);
} catch(Workflow_phpmailerException $exp) {
$debug = ob_get_clean();
$this->addStat('SMTP Error');
$this->addStat($exp->getMessage());
$debug = preg_replace("/\s(.{60,})\s/", " ", $debug);
$debug = preg_replace("/CLIENT -> SMTP:(\s+)\n/", "", $debug);
$this->addStat($debug);
}
#$mail_return = send_mail($module, $to_email,$from_name,$from_email,$subject,$content, $cc, $bcc,'all',$emailID);
} else {
$mail_return = 1;
}
$this->addStat("Send eMail with following Result:");
$this->addStat($mail_return);
foreach($unlinkAfterSending as $filename) {
@unlink($filename);
}
if($mail_return != 1) {
if (empty($mail->ErrorInfo) && empty($mail_return)) {
$mail_return = 1;
}
}
$context->setEnvironment("email_crm_id", $emailID, $this);
$context->setEnvironment("sendmail_result", $mail_return, $this);
if($mail_return != 1) {
$retry = $context->getEnvironment('_blockRetry'.$this->getBlockId());
if(empty($retry)) {
// 1h später
$retryTimer = 60;
$retry = 1;
} else {
switch ($retry) {
case 2:
case 3:
// 3 h später
$retryTimer = 180;
break;
case 4:
// 4h später
$retryTimer = 240;
break;
break;
case 5:
// 24 h später
$retryTimer = 1440;
break;
default:
$unlimited = $this->notEmpty('unlimitedretry');
if($unlimited) {
$retryTimer = 1440;
} else {
return 'yes';
}
}
}
$context->setEnvironment('_blockRetry'.$this->getBlockId(), $retry + 1);
Workflow2::send_error("Sendmail Task couldn't send an email to ".$to_email."<br>Error: ".var_export($mail->ErrorInfo, true)."<br><br>The Task will be rerun after ".$retryTimer." minutes.", __FILE__, __LINE__);
Workflow2::error_handler(E_NONBREAK_ERROR, "Sendmail Task couldn't send an email to ".$to_email. "<br>Error: ".var_export($mail->ErrorInfo, true)."<br><br>The Task will be rerun after ".$retryTimer." minutes.", __FILE__, __LINE__);
return array("delay" => time() + ($retryTimer * 60), "checkmode" => "static");
}
if($this->notEmpty('multiplereceiver')) {
break;
}
}
// Set Mails as Send
$sql = "UPDATE vtiger_emaildetails SET email_flag = 'SENT' WHERE emailid = '".$emailID."'";
$adb->query($sql);
return "yes";
}
public function attachByAttachmentId($attachmentID) {
if(null === $this->_mailRecord) {
return;
}
$adb = \PearDatabase::getInstance();
$sql = 'select crmid from vtiger_seattachmentsrel WHERE crmid = ? AND attachmentsid = ?';
$result = $adb->pquery($sql, array($this->_mailRecord->id, $attachmentID));
if($adb->num_rows($result) == 0) {
$sql3='insert into vtiger_seattachmentsrel values(?,?)';
$adb->pquery($sql3, array($this->_mailRecord->id, $attachmentID));
}
}
public function attachFile($filePath, $filename, $filetype) {
if(null === $this->_mailRecord) {
return;
}
if(empty($filePath)) {
return;
}
$adb = \PearDatabase::getInstance();
$current_user = \Users_Record_Model::getCurrentUserModel();
$upload_file_path = decideFilePath();
$date_var = date("Y-m-d H:i:s");
$next_id = $adb->getUniqueID("vtiger_crmentity");
if(is_array($filename)) {
if(!empty($filename['filename'])) {
$filename = $filename['filename'];
} else {
$filename = 'unknown-filename.txt';
}
}
rename($filePath, $upload_file_path . $next_id . "_" . $filename);
$sql1 = "insert into vtiger_crmentity (crmid,smcreatorid,smownerid,setype,description,createdtime,modifiedtime) values(?, ?, ?, ?, ?, ?, ?)";
$params1 = array($next_id, $current_user->id, $current_user->id, "Documents Attachment",'Documents Attachment', date("Y-m-d H:i:s"), date("Y-m-d H:i:s"));
$adb->pquery($sql1, $params1);
$sql2 = "insert into vtiger_attachments(attachmentsid, name, description, type, path) values(?, ?, ?, ?, ?)";
$params2 = array($next_id, $filename, $this->_mailRecord->column_fields["description"], $filetype, $upload_file_path);
$adb->pquery($sql2, $params2, true);
$sql3 = 'insert into vtiger_seattachmentsrel values(?,?)';
$adb->pquery($sql3, array($this->_mailRecord->id, $next_id));
}
}