/** * @see CEvent::HandleEvent() * @see bxmail() * * @param string $to * @param string $subject * @param string $message * @param string $additionalHeaders */ public function send($to, $subject, $message, $additionalHeaders = '') { preg_match('/From: (.+)\\n/i', $additionalHeaders, $matches); list(, $from) = $matches; if (PEAR::isError($settingResult = $this->_transport->mailFrom(trim($from)))) { throw new Capall_MailTransportException($settingResult); } // $to string may contains many recipients. $recipients = explode(',', $to); foreach ($recipients as $recipient) { $recipient = trim($recipient); if (!empty($recipient)) { if (PEAR::isError($settingResult = $this->_transport->rcptTo($recipient))) { throw new Capall_MailTransportException($settingResult); } } } $eol = CAllEvent::GetMailEOL(); $additionalHeaders .= $eol . 'To: ' . $to; $additionalHeaders .= $eol . 'Subject: ' . $subject; if (PEAR::isError($sendingResult = $this->_transport->data($additionalHeaders . "\r\n\r\n" . $message))) { throw new Capall_MailTransportException($sendingResult); } }
function HandleEvent($arEvent) { global $DB; $flag = "0"; // no templates $arResult = array("Success" => false, "Fail" => false, "Was" => false); $eol = CAllEvent::GetMailEOL(); $ar = CAllEvent::ExtractMailFields($arEvent["C_FIELDS"]); $arSites = explode(",", $arEvent["LID"]); foreach ($arSites as $key => $value) { $value = trim($value); if (strlen($value) > 0) { $arSites[$key] = "'" . $DB->ForSql($value, 2) . "'"; } else { unset($arSites[$key]); } } if (count($arSites) <= 0) { return $flag; } $strSites = implode(", ", $arSites); $strSql = "SELECT CHARSET FROM b_lang WHERE LID IN (" . $strSites . ") ORDER BY DEF DESC, SORT"; $dbCharset = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); $arCharset = $dbCharset->Fetch(); if (!$arCharset) { return $flag; } $charset = $arCharset["CHARSET"]; $strWhere = ""; $MESSAGE_ID = intval($arEvent["MESSAGE_ID"]); if ($MESSAGE_ID > 0) { $strSql = "SELECT 'x' FROM b_event_message M WHERE M.ID=" . $MESSAGE_ID; $z = $DB->Query($strSql); if ($z->Fetch()) { $strWhere = "WHERE M.ID=" . $MESSAGE_ID . " and M.ACTIVE='Y'"; } } $strSql = "\n\t\t\tSELECT DISTINCT ID\n\t\t\tFROM b_event_message M\n\t\t\t" . ($strWhere == "" ? ", b_event_message_site MS\n\t\t\t\tWHERE M.ID=MS.EVENT_MESSAGE_ID\n\t\t\t\tAND M.ACTIVE='Y'\n\t\t\t\tAND M.EVENT_NAME='" . $DB->ForSql($arEvent["EVENT_NAME"]) . "'\n\t\t\t\tAND MS.SITE_ID IN (" . $strSites . ")" : $strWhere) . "\n\t\t"; $db_mail_result = $DB->Query($strSql); while ($db_mail_result_array = $db_mail_result->Fetch()) { $rsMail = $DB->Query("\n\t\t\t\tSELECT ID, SUBJECT, MESSAGE, EMAIL_FROM, EMAIL_TO, BODY_TYPE, BCC, CC, REPLY_TO, IN_REPLY_TO, PRIORITY, FIELD1_NAME, FIELD1_VALUE, FIELD2_NAME, FIELD2_VALUE\n\t\t\t\tFROM b_event_message M\n\t\t\t\tWHERE M.ID = " . intval($db_mail_result_array["ID"]) . "\n\t\t\t"); $db_mail_result_array = $rsMail->Fetch(); if (!$db_mail_result_array) { continue; } $strSqlMLid = "\n\t\t\t\tSELECT MS.SITE_ID\n\t\t\t\tFROM b_event_message_site MS\n\t\t\t\tWHERE MS.EVENT_MESSAGE_ID = " . $db_mail_result_array["ID"] . "\n\t\t\t\tAND MS.SITE_ID IN (" . $strSites . ")\n\t\t\t"; $dbr_mlid = $DB->Query($strSqlMLid); if ($ar_mlid = $dbr_mlid->Fetch()) { $arFields = $ar + CAllEvent::GetSiteFieldsArray($ar_mlid["SITE_ID"]); } else { $arFields = $ar + CAllEvent::GetSiteFieldsArray(false); } foreach (GetModuleEvents("main", "OnBeforeEventSend", true) as $event) { ExecuteModuleEventEx($event, array(&$arFields, &$db_mail_result_array)); } $arMailFields = array(); $arMailFields["From"] = CAllEvent::ReplaceTemplate($db_mail_result_array["EMAIL_FROM"], $arFields); if ($db_mail_result_array["BCC"] != '') { $bcc = CAllEvent::ReplaceTemplate($db_mail_result_array["BCC"], $arFields); if (strpos($bcc, "@") !== false) { $arMailFields["BCC"] = $bcc; } } if ($db_mail_result_array["CC"] != '') { $arMailFields["CC"] = CAllEvent::ReplaceTemplate($db_mail_result_array["CC"], $arFields); } if ($db_mail_result_array["REPLY_TO"] != '') { $arMailFields["Reply-To"] = CAllEvent::ReplaceTemplate($db_mail_result_array["REPLY_TO"], $arFields); } else { $arMailFields["Reply-To"] = preg_replace("/(.*)\\<(.*)\\>/i", '$2', $arMailFields["From"]); } if ($db_mail_result_array["IN_REPLY_TO"] != '') { $arMailFields["In-Reply-To"] = CAllEvent::ReplaceTemplate($db_mail_result_array["IN_REPLY_TO"], $arFields); } if ($db_mail_result_array['FIELD1_NAME'] != '' && $db_mail_result_array['FIELD1_VALUE'] != '') { $arMailFields[$db_mail_result_array['FIELD1_NAME']] = CAllEvent::ReplaceTemplate($db_mail_result_array["FIELD1_VALUE"], $arFields); } if ($db_mail_result_array['FIELD2_NAME'] != '' && $db_mail_result_array['FIELD2_VALUE'] != '') { $arMailFields[$db_mail_result_array['FIELD2_NAME']] = CAllEvent::ReplaceTemplate($db_mail_result_array["FIELD2_VALUE"], $arFields); } if ($db_mail_result_array["PRIORITY"] != '') { $arMailFields["X-Priority"] = CAllEvent::ReplaceTemplate($db_mail_result_array["PRIORITY"], $arFields); } else { $arMailFields["X-Priority"] = '3 (Normal)'; } foreach ($ar as $f => $v) { if (substr($f, 0, 1) == "=") { $arMailFields[substr($f, 1)] = $v; } } foreach ($arMailFields as $k => $v) { $arMailFields[$k] = trim($v, "\r\n"); } //add those who want to receive all emails if ($arEvent["DUPLICATE"] == "Y") { $all_bcc = COption::GetOptionString("main", "all_bcc", ""); if (strpos($all_bcc, "@") !== false) { $arMailFields["BCC"] .= strlen($all_bcc) > 0 ? (strlen($arMailFields["BCC"]) > 0 ? "," : "") . $all_bcc : ""; } } $email_to = CAllEvent::ReplaceTemplate($db_mail_result_array["EMAIL_TO"], $arFields); $subject = CAllEvent::ReplaceTemplate($db_mail_result_array["SUBJECT"], $arFields); if (COption::GetOptionString("main", "convert_mail_header", "Y") == "Y") { foreach ($arMailFields as $k => $v) { if ($k == 'From' || $k == 'CC') { $arMailFields[$k] = CAllEvent::EncodeHeaderFrom($v, $charset); } else { $arMailFields[$k] = CAllEvent::EncodeMimeString($v, $charset); } } $email_to = CAllEvent::EncodeHeaderFrom($email_to, $charset); $subject = CAllEvent::EncodeMimeString($subject, $charset); } if (defined("BX_MS_SMTP") && BX_MS_SMTP === true) { $email_to = preg_replace("/(.*)\\<(.*)\\>/i", '$2', $email_to); if ($arMailFields["From"] != '') { $arMailFields["From"] = preg_replace("/(.*)\\<(.*)\\>/i", '$2', $arMailFields["From"]); } if ($arMailFields["To"] != '') { $arMailFields["To"] = preg_replace("/(.*)\\<(.*)\\>/i", '$2', $arMailFields["To"]); } } if (COption::GetOptionString("main", "fill_to_mail", "N") == "Y") { $arMailFields["To"] = $email_to; } $header = ""; foreach ($arMailFields as $k => $v) { $header .= $k . ': ' . $v . $eol; } $header .= "X-MID: " . $arEvent["ID"] . "." . $db_mail_result_array["ID"] . " (" . $arEvent["DATE_INSERT"] . ")" . $eol . "X-EVENT_NAME: " . $arEvent["EVENT_NAME"] . $eol . ($db_mail_result_array["BODY_TYPE"] == "html" ? "Content-Type: text/html; charset=" . $charset . $eol : "Content-Type: text/plain; charset=" . $charset . $eol) . "Content-Transfer-Encoding: 8bit"; $bNewLineToBreak = $db_mail_result_array["BODY_TYPE"] == "html"; $message = CAllEvent::ReplaceTemplate($db_mail_result_array["MESSAGE"], $arFields, $bNewLineToBreak); if (COption::GetOptionString("main", "send_mid", "N") == "Y") { $message .= ($db_mail_result_array["BODY_TYPE"] == "html" ? "<br><br>" : "\n\n") . "MID #" . $arEvent["ID"] . "." . $db_mail_result_array["ID"] . " (" . $arEvent["DATE_INSERT"] . ")\n"; } $message = str_replace("\r\n", "\n", $message); if (COption::GetOptionString("main", "CONVERT_UNIX_NEWLINE_2_WINDOWS", "N") == "Y") { $message = str_replace("\n", "\r\n", $message); } if (defined("ONLY_EMAIL") && $email_to != ONLY_EMAIL) { $arResult["Success"] = true; } elseif (bxmail($email_to, $subject, $message, $header, COption::GetOptionString("main", "mail_additional_parameters", ""))) { $arResult["Success"] = true; } else { $arResult["Fail"] = true; } $arResult["Was"] = true; } if ($arResult["Was"]) { if ($arResult["Success"]) { if ($arResult["Fail"]) { $flag = "P"; } else { $flag = "Y"; } // all sent } else { if ($arResult["Fail"]) { $flag = "F"; } // all templates failed } } return $flag; }
public function Execute() { $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $documentService = $this->workflow->GetService("DocumentService"); $strMailUserFrom = ""; list($mailUserFromArray, $mailUserFromArrayString) = static::ExtractEmails($this->MailUserFromArray); $arMailUserFromArray = CBPHelper::ExtractUsers($mailUserFromArray, $documentId, false); foreach ($arMailUserFromArray as $user) { $dbUser = CUser::GetList($b = "", $o = "", array("ID_EQUAL_EXACT" => $user)); if ($arUser = $dbUser->Fetch()) { if (strlen($strMailUserFrom) > 0) { $strMailUserFrom .= ", "; } if (!defined("BX_MS_SMTP") || BX_MS_SMTP !== true) { if (strlen($arUser["NAME"]) > 0 || strlen($arUser["LAST_NAME"]) > 0) { $strMailUserFrom .= "'" . preg_replace("#['\r\n]+#", "", CUser::FormatName(COption::GetOptionString("bizproc", "name_template", CSite::GetNameFormat(false), SITE_ID), $arUser)) . "' <"; } } $strMailUserFrom .= preg_replace("#[\r\n]+#", "", $arUser["EMAIL"]); if (!defined("BX_MS_SMTP") || BX_MS_SMTP !== true) { if (strlen($arUser["NAME"]) > 0 || strlen($arUser["LAST_NAME"]) > 0) { $strMailUserFrom .= ">"; } } } } $mailUserFromTmp = $this->MailUserFrom; if (strlen($mailUserFromTmp) > 0) { if (strlen($strMailUserFrom) > 0) { $strMailUserFrom .= ", "; } $strMailUserFrom .= preg_replace("#[\r\n]+#", "", $mailUserFromTmp); } if (!empty($mailUserFromArrayString)) { foreach ($mailUserFromArrayString as $s) { if (strlen($strMailUserFrom) > 0) { $strMailUserFrom .= ", "; } $strMailUserFrom .= $s; } } $strMailUserTo = ""; list($MailUserToArray, $MailUserToArrayString) = static::ExtractEmails($this->MailUserToArray); $arMailUserToArray = CBPHelper::ExtractUsers($MailUserToArray, $documentId, false); foreach ($arMailUserToArray as $user) { $dbUser = CUser::GetList($b = "", $o = "", array("ID_EQUAL_EXACT" => $user)); if ($arUser = $dbUser->Fetch()) { if (strlen($strMailUserTo) > 0) { $strMailUserTo .= ", "; } $strMailUserTo .= preg_replace("#[\r\n]+#", "", $arUser["EMAIL"]); } } $mailUserToTmp = $this->MailUserTo; if (strlen($mailUserToTmp) > 0) { if (strlen($strMailUserTo) > 0) { $strMailUserTo .= ", "; } $strMailUserTo .= preg_replace("#[\r\n]+#", "", $mailUserToTmp); } if (!empty($MailUserToArrayString)) { foreach ($MailUserToArrayString as $s) { if (strlen($strMailUserTo) > 0) { $strMailUserTo .= ", "; } $strMailUserTo .= $s; } } $charset = $this->MailCharset; if (!$this->IsPropertyExists("DirrectMail") || $this->DirrectMail == "Y") { global $APPLICATION; $strMailUserFrom = $APPLICATION->ConvertCharset($strMailUserFrom, SITE_CHARSET, $charset); $strMailUserFrom = CBPMailActivity::EncodeHeaderFrom($strMailUserFrom, $charset); $strMailUserTo = $APPLICATION->ConvertCharset($strMailUserTo, SITE_CHARSET, $charset); $strMailUserTo = CBPMailActivity::EncodeMimeString($strMailUserTo, $charset); $mailSubject = $APPLICATION->ConvertCharset($this->MailSubject, SITE_CHARSET, $charset); $mailSubject = CBPMailActivity::EncodeSubject($mailSubject, $charset); $mailText = $APPLICATION->ConvertCharset(CBPHelper::ConvertTextForMail($this->MailText), SITE_CHARSET, $charset); $eol = CAllEvent::GetMailEOL(); mail($strMailUserTo, $mailSubject, $mailText, "From: " . $strMailUserFrom . $eol . "Reply-To: " . $strMailUserFrom . $eol . "X-Priority: 3 (Normal)" . $eol . "Content-Type: text/" . ($this->MailMessageType == "html" ? "html" : "plain") . "; charset=" . $charset . $eol . "X-Mailer: PHP/" . phpversion()); } else { $siteId = null; if ($this->IsPropertyExists("MailSite")) { $siteId = $this->MailSite; } if (strlen($siteId) <= 0) { $siteId = SITE_ID; } $arFields = array("SENDER" => $strMailUserFrom, "RECEIVER" => $strMailUserTo, "TITLE" => $this->MailSubject, "MESSAGE" => CBPHelper::ConvertTextForMail($this->MailText)); $event = new CEvent(); $event->Send("BIZPROC_MAIL_TEMPLATE", $siteId, $arFields, "N"); } return CBPActivityExecutionStatus::Closed; }
public function Execute() { if (!CModule::IncludeModule('crm')) { CBPActivityExecutionStatus::Closed; } $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $documentService = $this->workflow->GetService("DocumentService"); $strMailUserFrom = ""; $arMailUserFromArray = CBPHelper::ExtractUsers($this->MailUserFromArray, $documentId, false); foreach ($arMailUserFromArray as $user) { $dbUser = CUser::GetList($b = "", $o = "", array("ID_EQUAL_EXACT" => $user)); if ($arUser = $dbUser->Fetch()) { if (strlen($strMailUserFrom) > 0) { $strMailUserFrom .= ", "; } if (!defined("BX_MS_SMTP") || BX_MS_SMTP !== true) { if (strlen($arUser["NAME"]) > 0 || strlen($arUser["LAST_NAME"]) > 0) { $strMailUserFrom .= "'" . preg_replace("#['\r\n]+#", "", CUser::FormatName(COption::GetOptionString("bizproc", "name_template", CSite::GetNameFormat(false), SITE_ID), $arUser)) . "' <"; } } $strMailUserFrom .= preg_replace("#[\r\n]+#", "", $arUser["EMAIL"]); if (!defined("BX_MS_SMTP") || BX_MS_SMTP !== true) { if (strlen($arUser["NAME"]) > 0 || strlen($arUser["LAST_NAME"]) > 0) { $strMailUserFrom .= ">"; } } } } $mailUserFromTmp = $this->MailUserFrom; if (strlen($mailUserFromTmp) > 0) { if (strlen($strMailUserFrom) > 0) { $strMailUserFrom .= ", "; } $strMailUserFrom .= preg_replace("#[\r\n]+#", "", $mailUserFromTmp); } $strMailTo = ''; if (is_array($this->MailCrmEntityToArray)) { $addressType = $this->MailCrmEntityAddressType !== '' ? $this->MailCrmEntityAddressType : 'WORK'; foreach ($this->MailCrmEntityToArray as &$entityData) { $s = ''; if (is_string($entityData)) { $s = trim($entityData); } elseif (is_array($entityData) && isset($entityData['VALUE'])) { $s = trim($entityData['VALUE']); } if ($s === '') { continue; } $entityInfo = array(); if (CCrmEntityHelper::ParseEntityKey($s, $entityInfo)) { //Process entity key $dbResult = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => $entityInfo['ENTITY_TYPE_NAME'], 'ELEMENT_ID' => $entityInfo['ENTITY_ID'], 'TYPE_ID' => 'EMAIL', 'VALUE_TYPE' => $addressType)); if ($dbResult) { while ($arField = $dbResult->Fetch()) { $v = isset($arField['VALUE']) ? trim($arField['VALUE']) : ''; if ($v === '' || !check_email($v)) { continue; } if ($strMailTo !== '') { $strMailTo .= ', '; } $strMailTo .= preg_replace("#[\r\n]+#", "", $v); break; } } } else { $ary = explode(',', $s); foreach ($ary as &$v) { $v = trim($v); if ($v === '' || !check_email($v)) { continue; } if ($strMailTo !== '') { $strMailTo .= ', '; } $strMailTo .= preg_replace("#[\r\n]+#", "", $v); } unset($v); } } unset($entityData); } $strReplyTo = $strMailUserFrom; $strCrmEmail = CCrmMailHelper::ExtractEmail(COption::GetOptionString('crm', 'mail', '')); if ($strCrmEmail !== '') { $strReplyTo .= ', ' . $strCrmEmail; } $charset = $this->MailCharset; if (!$this->IsPropertyExists("DirrectMail") || $this->DirrectMail == "Y") { global $APPLICATION; $strMailUserFrom = $APPLICATION->ConvertCharset($strMailUserFrom, SITE_CHARSET, $charset); $strMailUserFrom = self::EncodeHeaderFrom($strMailUserFrom, $charset); $strReplyTo = $APPLICATION->ConvertCharset($strReplyTo, SITE_CHARSET, $charset); $strReplyTo = self::EncodeHeaderFrom($strReplyTo, $charset); $strMailTo = $APPLICATION->ConvertCharset($strMailTo, SITE_CHARSET, $charset); $strMailTo = self::EncodeMimeString($strMailTo, $charset); $mailSubject = $APPLICATION->ConvertCharset($this->MailSubject, SITE_CHARSET, $charset); $mailSubject = self::EncodeSubject($mailSubject, $charset); $mailText = $APPLICATION->ConvertCharset(CBPHelper::ConvertTextForMail($this->MailText), SITE_CHARSET, $charset); $eol = CAllEvent::GetMailEOL(); mail($strMailTo, $mailSubject, $mailText, "From: " . $strMailUserFrom . $eol . "Reply-To: " . $strReplyTo . $eol . "X-Priority: 3 (Normal)" . $eol . "Content-Type: text/" . ($this->MailMessageType == "html" ? "html" : "plain") . "; charset=" . $charset . $eol . "X-Mailer: PHP/" . phpversion()); } else { $siteId = null; if ($this->IsPropertyExists("MailSite")) { $siteId = $this->MailSite; } if (strlen($siteId) <= 0) { $siteId = SITE_ID; } $arFields = array("SENDER" => $strMailUserFrom, "RECEIVER" => $strMailTo, "REPLY_TO" => $strReplyTo, "TITLE" => $this->MailSubject, "MESSAGE" => CBPHelper::ConvertTextForMail($this->MailText)); $event = new CEvent(); $event->Send("BIZPROC_MAIL_TEMPLATE", $siteId, $arFields, "N"); } return CBPActivityExecutionStatus::Closed; }