Как исправить ошибку «Транспорту не удалось подключиться к серверу» при отправке почты из 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При реализации механизмов автоматической отправки электронных писем с вложениями из 1С разработчики нередко сталкиваются с ошибкой времени выполнения: «Ошибка при вызове метода контекста (Send): Произошла исключительная ситуация (CDO.Message.1). Транспорту не удалось подключиться к серверу». Часто такая ситуация возникает при смене операционной системы (например, при переходе с Windows 7 на более современные версии Windows) или при отправке через внешние почтовые сервисы (Gmail, Яндекс, Mail.ru).

Разберем детально причины возникновения данной проблемы и рассмотрим надежные варианты ее устранения.

Причина 1: Некорректный порт и отсутствие шифрования SSL/TLS

Проанализируем базовый сценарий работы через COM-объект CDO.Message. В исходном коде для подключения к серверу Gmail был указан порт 25:


loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = "25";

Стандартный порт 25 предназначен для открытой передачи данных без шифрования и в современных почтовых службах либо полностью закрыт провайдерами для защиты от спама, либо отклоняется самим почтовым сервисом. Для безопасного соединения через SSL/TLS необходимо использовать порт 465 или 587 с обязательным включением шифрования.

Выясним, как правильно настроить поля конфигурации CDO для защищенного соединения:


loConfig = Новый ComОбъект("CDO.Configuration");
loCdoMessage = Новый ComОбъект("CDO.Message");
loCdoMessage.Configuration = loConfig;

// Заполнение полей сообщения
loCdoMessage.From = "myaccount@gmail.com";
loCdoMessage.To = СокрЛП(АдресЭП);
loCdoMessage.Subject = "Дисконтная карта";
loCdoMessage.BodyPart.Charset = "windows-1251";
loCdoMessage.HTMLBody = "<html><body><p>Ваша дисконтная карта во вложении.</p></body></html>";

// Добавление сформированного файла во вложение
loCdoMessage.AddAttachment(ИмяФайла);

// Настройка параметров подключения к SMTP
Схема = "http://schemas.microsoft.com/cdo/configuration/";
loConfig.Fields.Item(Схема + "sendusing").Value = 2; // cdoSendUsingPort
loConfig.Fields.Item(Схема + "smtpserver").Value = "smtp.gmail.com";
loConfig.Fields.Item(Схема + "smtpserverport").Value = 465; // Использование защищенного порта
loConfig.Fields.Item(Схема + "smtpusessl").Value = 1; // Включение SSL
loConfig.Fields.Item(Схема + "smtpauthenticate").Value = 1; // Базовая аутентификация
loConfig.Fields.Item(Схема + "sendusername").Value = "myaccount@gmail.com";
loConfig.Fields.Item(Схема + "sendpassword").Value = "пароль_приложения";
loConfig.Fields.Item(Схема + "smtpconnectiontimeout").Value = 60;

loConfig.Fields.Update();
loCdoMessage.Send();

Причина 2: Использование основного пароля аккаунта вместо пароля приложения

Современные почтовые серверы требуют обязательного использования двухфакторной аутентификации (2FA) и специальных паролей приложений. Передача обычного пароля от учетной записи приводит к блокировке авторизации со стороны сервера.

Разберем по шагам, как настроить доступ:

  1. Перейдите в настройки безопасности учетной записи почтового сервиса.
  2. Включите двухфакторную аутентификацию (подтверждение по SMS или через приложение).
  3. Сгенерируйте пароль приложения для внешнего почтового клиента.
  4. Укажите полученный 16-значный код в качестве значения пароля в коде 1С.

Причина 3: Права доступа к каталогу с файлом вложения

Обратим внимание на сохранение временного файла. Если формирование файла вложения выполняется кодом вида:

ИмяФайла = КаталогПрограммы() + СокрЛП(Контрагент.Наименование) + ".jpg";

В современных операционных системах папка установки платформы (например, C:\Program Files\1cv8\...) защищена механизмами контроля учетных записей (UAC). Пользователь 1С или служба сервера 1С не имеют прав на запись в эту директорию. В результате файл не создается или оказывается поврежденным, что приводит к ошибкам при его прикреплении.

Для сохранения временных файлов всегда используйте системный временный каталог:


КаталогВременных = КаталогВременныхФайлов();
ИмяФайла = КаталогВременных + "Card_" + СокрЛП(Контрагент.Код) + ".jpg";

Альтернативное решение: Отказ от устаревшего CDO и переход на штатный объект 1С «ИнтернетПочта»

Библиотека CDO.Message является устаревшим 32-разрядным COM-объектом Windows. При переходе на 64-разрядный сервер 1С или современные ОС такой механизм может давать сбои из-за отключения старых версий протоколов TLS. Рекомендуется использовать встроенные средства платформы 1С:Предприятие 8 — объекты ИнтернетПочтовыйПрофиль и ИнтернетПочта.

Посмотрим на пример отправки письма штатными средствами 1С:


// 1. Формирование профиля подключения
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.gmail.com";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "myaccount@gmail.com";
Профиль.ПарольSMTP = "пароль_приложения";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.Таймаут = 60;

// 2. Создание почтового сообщения
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Служба поддержки";
Письмо.Отправитель.Адрес = "myaccount@gmail.com";
Письмо.Получатели.Добавить(СокрЛП(АдресЭП));
Письмо.Тема = "Дисконтная карта";
Письмо.Кодировка = "UTF-8";

// Формирование HTML-тела письма
Письмо.Тексты.Добавить("<html><body><p>Здравствуйте! Ваша дисконтная карта во вложении.</p></body></html>", ТипТекстаПочтовогоСообщения.HTML);

// 3. Добавление вложения
Если ФайлСуществует(ИмяФайла) Тогда
    Письмо.Вложения.Добавить(ИмяФайла, "ДисконтнаяКарта.jpg");
КонецЕсли;

// 4. Отправка сообщения
Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
    Почта.Послать(Письмо);
    Почта.Отключиться();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Почта.Отключиться();
    ВызватьИсключение "Ошибка при отправке почты: " + ОписаниеОшибки();
КонецПопытки;

Использование встроенных объектов ИнтернетПочтовыйПрофиль и ИнтернетПочта полностью устраняет зависимость от операционной системы, COM-компонентов и разрядности платформы, обеспечивая стабильную работу почтовых механизмов.

← На главную