Еще один интересный кейс по отправке почты из Б24


Не комментирую — просто оставлю здесь себе на память. Это логическое продолжение кейса, когда почта приходит в Битрикс24 не на одни общий ящик компании, а на множество ящиков сотрудников. Соответсвенно, каждый сотрудник может отправить письмо прямо из портала, и оно уйдет по smtp через ящик этого сотрудника.

phpmailer.tar

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);


}

 

,

Добавить комментарий

Ваш адрес email не будет опубликован.