/**
  * @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);
     }
 }
示例#2
0
文件: event.php 项目: ASDAFF/bitrix-5
 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;
 }
示例#3
0
 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;
 }
示例#4
0
 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;
 }