Ранее я уже писала о том, как диагностировать проблему недоставки писем из портала Битрикс24, развернутого в локальной сети клиента, и как ее решать.
Недавно мне попался кейс, который показал мне, что моя методика, описанная в данном посте, не полна и требует расширения.
Битрикс24 был развернут в локальной сети клиента. Почтовый сервер так же был развернут в локальной сети клиента. Доступа в локальную сеть клиента нам не дали — нужно было решить проблему, консультируя по скайпу админа (вообще-то мы так не работаем — это было исключение).
Письма, отправленные из CRM Битрикс24, не доходили даже до тестового сервиса www.mail-tester.com Сотрудники клиента отправляли письма из корпоративных ящиков через веб-интерфейс почтового сервера, доступного в локальной сети.
Я решила, что в данной ситуации будет проще сразу перенастроить отправку почты из Битрикс24 через SMTP. Для того, чтобы проверить, работает ли в локальной сети клиента возможность отправки писем по SMTP, я попросила админа клиента, чтобы он поставил себе на компьютер оутлук и отправил мне письмо через оутлук со своего корпоративного почтового ящика. Убедившись, что, SMTP у клиента работает, и выяснив, что оно работает без TSL, я прислала админу клиента функцию, использующую библиотеку phpmailer.
function custom_mail($to, $subject, $message, $additionalHeaders = '', $additional_parameters='') { require_once __DIR__ . '/phpmailer/PHPMailerAutoload.php'; $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]; } } try { $mail = new PHPMailer(); $mail->CharSet = 'UTF-8'; $mail->IsHTML(true); $mail->IsSMTP(); $mail->Timeout=30; $mail->Host = 'Хост'; $mail->Port = 25; $mail->SMTPDebug = 2; $mail->SMTPAuth = true; $mail->Username = 'Логин'; $mail->Password = 'Пароль'; $mail->SetFrom('ОтКого'); $mail->AddAddress($to); $mail->Body = $message; $mail->Subject = $subject; $mail->AddBCC('ОтКого', 'Письмо 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"); } } //try catch (phpmailerException $e) { AddMessage2Log($e->errorMessage(), "ERROR_SENDING"); } catch (Exception $e) { AddMessage2Log($e->getMessage(), "ERROR_SENDING"); } return ($status); }
которая позволила порталу отправлять письма по SMTP через специально заведенный для портала ящик.