Многие разработчики, использующие объект CDO.Message для автоматизации отправки почты из 1С через серверы Gmail, столкнулись с ограничением безопасности. Google прекратил поддержку авторизации с использованием логина и стандартного пароля учетной записи для сторонних программ. Рассмотрим, как решить эту проблему, не меняя привычную инфраструктуру и сохранив работоспособность текущего кода.
Google перешел на усиленную модель безопасности. Ранее мы использовали настройку «Доступ небезопасных приложений», которая позволяла программным скриптам авторизоваться на smtp.gmail.com напрямую. Сейчас этот метод признан устаревшим и небезопасным. Поскольку объект CDO является технологией Windows и не поддерживает современный протокол OAuth 2.0 в стандартном исполнении, нам необходимо использовать промежуточное решение — пароли приложений.
Для восстановления отправки почты из 1С выполним следующие действия в аккаунте Google, через который осуществляется рассылка:
Теперь, когда у нас есть специальный пароль, необходимо внести изменения в конфигурацию 1С. Рассмотрим типичный пример настройки объекта CDO.Message, который обычно используется в обработках 1С.
Ранее в коде вы указывали основной пароль от своей почты. Теперь в качестве пароля необходимо использовать именно тот 16-значный код, который мы получили на предыдущем этапе. Все остальные настройки сервера остаются прежними:
// Пример настройки параметров подключения CDO
Конфигурация = Новый COMОбъект("CDO.Configuration");
Поля = Конфигурация.Fields;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.gmail.com";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = True;
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "ваш_адрес@gmail.com";
Поля.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "ваш_16_значный_пароль_приложения";
Поля.Update();
Давайте проанализируем, почему использование «Паролей приложений» является оптимальным выходом для существующих систем:
OAuth 2.0, которые трудно реализуемы в старых объектах Windows типа CDO.Конечно, стоит понимать, что технологии развиваются. В долгосрочной перспективе, если Google полностью откажется от использования паролей приложений, потребуется переход на использование современных библиотек 1С, поддерживающих протокол OAuth 2.0 через официальный API Gmail, либо переход на использование профессиональных SMTP-релеев (сервисов для транзакционной почты), которые позволяют делегировать управление безопасностью специализированным провайдерам. Однако на текущий момент описанный выше метод остается самым быстрым и эффективным способом решения проблемы «небезопасных приложений» для большинства конфигураций 1С.