Не комментирую — просто оставлю здесь себе на память. Это логическое продолжение кейса, когда почта приходит в Битрикс24 не на одни общий ящик компании, а на множество ящиков сотрудников. Соответсвенно, каждый сотрудник может отправить письмо прямо из портала, и оно уйдет по smtp через ящик этого сотрудника.
function custom_mail($to, $subject, $message, $additionalHeaders = '', $additional_parameters='') { //AddMessage2Log($to, "TO"); AddMessage2Log($subject, "SUBJECT"); //AddMessage2Log($message, "MESSAGE"); //AddMessage2Log($additionalHeaders, "HEADERS"); //AddMessage2Log($additional_parameters, "PARAMS"); require_once __DIR__ . '/phpmailer/PHPMailerAutoload.php'; CModule::IncludeModule('mail'); CModule::IncludeModule('crm'); global $DB; //1. get posting ID $userID=0; $postingID=0; $status=false; $arr = explode("\n", $additionalHeaders); if (is_array($arr)) { foreach ($arr as $key => $value) { $arrr = explode(":", $value); if($arrr[0] == 'X-Bitrix-Posting') $postingID = $arrr[1]; } } AddMessage2Log($postingID, "POSTINGID"); if ($postingID>0) { //2. get userid $strSql = "SELECT ASSOCIATED_ENTITY_ID, AUTHOR_ID FROM b_crm_act WHERE ASSOCIATED_ENTITY_ID='".$postingID."' AND TYPE_ID='4'"; $res = $DB->Query($strSql); if ($ar = $res->GetNext()) { AddMessage2Log($ar, "USERID"); $userID=$ar['AUTHOR_ID']; } AddMessage2Log($userID, "USERID"); //3. processing if ($userID>0) { try { $res=CMailbox::GetList(array(),array('USER_ID'=>$userID, 'ACTIVE'=>'Y')); $asUser = CUser::GetByID($userID); $arUser = $asUser->Fetch(); if ($mailbox = $res->Fetch()) { AddMessage2Log($mailbox, "MAILBOX1"); if ($mailbox['SERVER_TYPE']=='domain') { $res=CMailbox::GetList(array(),array('LOGIN'=>$mailbox['LOGIN'], 'SERVER_TYPE'=>'pop3')); if (!$mailbox = $res->Fetch()) { AddMessage2Log('Не найден подключенный ящик ДОМЕНА...', "MAILBOX"); } } AddMessage2Log($mailbox, "MAILBOX2"); if ($mailbox['PASSWORD']!="") { $mail = new PHPMailer(); $mail->CharSet = 'UTF-8'; $mail->IsHTML(true); $mail->IsSMTP(); $mail->Timeout=30; //$mail->Host = $mailbox['SERVER']; //$mail->Port = $mailbox['PORT']; $mail->Host = 'smtp.yandex.ru'; $mail->Port = 587; //$mail->SMTPDebug = 3; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Username = $mailbox['LOGIN']; $mail->Password = $mailbox['PASSWORD']; $mail->SetFrom($mailbox['LOGIN'], $arUser['NAME'].' '.$arUser['LAST_NAME']); //AddMessage2Log($to, "TO"); $mail->AddAddress($to); $mail->Body = $message; $mail->Subject = $subject; $mail->AddBCC($mailbox['LOGIN'], 'Письмо c портала на '.$to); $arr = explode("\n", $additionalHeaders); if (is_array($arr)){ foreach ($arr as $key => $value) { $arrr = explode(":", $value); $addh = $mail->HeaderLine($arrr[0], $arrr[1]); if($arrr[0] == 'Content-Type') $mail->ContentType = $arrr[1]; } } AddMessage2Log("SENDING...", "STATUS"); $status = $mail->Send(); AddMessage2Log($status, "STATUS"); if (!$status) { AddMessage2Log($mail->ErrorInfo, "ERROR"); } } else { AddMessage2Log('Не найден пароль от ящика...', "MAILBOX"); return mail($to, $subject, $message, $additionalHeaders, $additional_parameters); } } else { AddMessage2Log('Не найден подключенный ящик...', "MAILBOX"); return mail($to, $subject, $message, $additionalHeaders, $additional_parameters); } } //try catch (phpmailerException $e) { //echo $e->errorMessage(); AddMessage2Log($e->errorMessage(), "ERROR_SENDING"); } catch (Exception $e) { //echo $e->getMessage(); AddMessage2Log($e->getMessage(), "ERROR_SENDING"); } }//if userid>0 else { AddMessage2Log('Не найден пользователь, отправивший письмо...', "MAILBOX"); return mail($to, $subject, $message, $additionalHeaders, $additional_parameters); } }//if postingID>0 else { AddMessage2Log('Служебное письмо...', "MAILBOX"); return mail($to, $subject, $message, $additionalHeaders, $additional_parameters); } AddMessage2Log('Письмо обработано', "END"); return ($status); }