[QUOTE]Дмитрий Салтановский написал:
Была следующая проблема:
Коробка Б24, внутри неё у пользователей настроен доступ к персональным почтовым ящикам через раздел "Почта".
-Письма от портала (Уведомления и Проверка системы) ходят нормально, цепляются настройки из /home/bitrix/.msmtprc
-Письма от имени персональных ящиков пользователей (из CRM или из раздела Почта) не отправляются, т.к. подключаемся к SMTP через настройки из .msmtprc, а отправителем ставим адрес пользователя, соответственно яндекс ругается "not owned by authorized user".
Спасибо всем, отписавшимся выше, и отдельно А.Долганину. Благодаря вам пришёл к следующему решению:
В init.php прописываем следующий код:
[CODE] function custom_mail ( $to , $subject , $message , $additional_headers = '' , $additional_parameters = '' ) {
global $DB ;
if (preg_match( '/^From:.*?(?<email>[^<>@\n ]+@[^<>@\n ]+)/mi' , $additional_headers , $matches )) {
$fr om = $matches [ 'email' ];
// выбор соответствующих адресу отправителя параметров
$query = 'SEL ECT box.`NAME`, box.`LOGIN`, box.`PASSWORD`, box.`EMAIL` FR OM b_mail_mailbox as box WH ERE box.`EMAIL`="' . $from . '"' ;
$res = $DB ->Query( $query );
if ( $arMail = $res ->Fetch()) {
\Bitrix\Main\Loader::includeModule( 'mail' );
$password = CMailUtil::Decrypt( $arMail [ 'PASSWORD' ]);
$additional_parameters .= ' --auth=login --from="' . $arMail [ 'EMAIL' ] . '" --user="' . $arMail [ 'NAME' ] . '" --passwordeval="echo ' . $password . '"' ;
}
}
if ( $additional_parameters != '' ) {
$result = @mail( $to , $subject , $message , $additional_headers , $additional_parameters );
} else {
$result = @mail( $to , $subject , $message , $additional_headers );
}
return $result ;
} [/CODE] Здесь мы выцепляем регуляркой значение заголовка From, находим в таблице b_mail_mailbox эту учётку и подставляем её данные в параметры командной строки для msmtp. Костыль работает, но есть некоторые особенности: -в файле .msmtprc пароль для учётки тоже должен быть задан через passwordeval (не через password), иначе он не подменяется и msmtp пытается авторизоваться под учёткой из командной строки с паролем из файла настроек -это будет корректно работать только если у всех пользователей и у портала один и тот же smtp-сервер, в моём случае это яндекс. Если у пользователей почты на разных серверах, то метод надо совершенствовать, например добавить в .msmtprc учётки других сервисов, в запросе джойнить таблицу b_mail_mailservices, определять из неё сервис и в параметры командной строки добавлять выбор нужной учётки.
[/QUOTE]
Если кому то будет полезным. У нас после редактирования /home/bitrix/www/bitrix/php_interface/init.php метод не сработал. Заработало когда добавили этот код в /home/bitrix/www/local/php_interface/init.php
Была следующая проблема:
Коробка Б24, внутри неё у пользователей настроен доступ к персональным почтовым ящикам через раздел "Почта".
-Письма от портала (Уведомления и Проверка системы) ходят нормально, цепляются настройки из /home/bitrix/.msmtprc
-Письма от имени персональных ящиков пользователей (из CRM или из раздела Почта) не отправляются, т.к. подключаемся к SMTP через настройки из .msmtprc, а отправителем ставим адрес пользователя, соответственно яндекс ругается "not owned by authorized user".
Спасибо всем, отписавшимся выше, и отдельно А.Долганину. Благодаря вам пришёл к следующему решению:
В init.php прописываем следующий код:
[CODE] function custom_mail ( $to , $subject , $message , $additional_headers = '' , $additional_parameters = '' ) {
global $DB ;
if (preg_match( '/^From:.*?(?<email>[^<>@\n ]+@[^<>@\n ]+)/mi' , $additional_headers , $matches )) {
$fr om = $matches [ 'email' ];
// выбор соответствующих адресу отправителя параметров
$query = 'SEL ECT box.`NAME`, box.`LOGIN`, box.`PASSWORD`, box.`EMAIL` FR OM b_mail_mailbox as box WH ERE box.`EMAIL`="' . $from . '"' ;
$res = $DB ->Query( $query );
if ( $arMail = $res ->Fetch()) {
\Bitrix\Main\Loader::includeModule( 'mail' );
$password = CMailUtil::Decrypt( $arMail [ 'PASSWORD' ]);
$additional_parameters .= ' --auth=login --from="' . $arMail [ 'EMAIL' ] . '" --user="' . $arMail [ 'NAME' ] . '" --passwordeval="echo ' . $password . '"' ;
}
}
if ( $additional_parameters != '' ) {
$result = @mail( $to , $subject , $message , $additional_headers , $additional_parameters );
} else {
$result = @mail( $to , $subject , $message , $additional_headers );
}
return $result ;
} [/CODE] Здесь мы выцепляем регуляркой значение заголовка From, находим в таблице b_mail_mailbox эту учётку и подставляем её данные в параметры командной строки для msmtp. Костыль работает, но есть некоторые особенности: -в файле .msmtprc пароль для учётки тоже должен быть задан через passwordeval (не через password), иначе он не подменяется и msmtp пытается авторизоваться под учёткой из командной строки с паролем из файла настроек -это будет корректно работать только если у всех пользователей и у портала один и тот же smtp-сервер, в моём случае это яндекс. Если у пользователей почты на разных серверах, то метод надо совершенствовать, например добавить в .msmtprc учётки других сервисов, в запросе джойнить таблицу b_mail_mailservices, определять из неё сервис и в параметры командной строки добавлять выбор нужной учётки.
[/QUOTE]
Если кому то будет полезным. У нас после редактирования /home/bitrix/www/bitrix/php_interface/init.php метод не сработал. Заработало когда добавили этот код в /home/bitrix/www/local/php_interface/init.php