Работа с электронной почтой через встроенные механизмы 1С — задача стандартная, но часто преподносящая сюрпризы в виде неинформативных ошибок. Одной из самых коварных является ошибка с кодом 27 при вызове метода Подключиться. Ситуация осложняется тем, что один и тот же код может идеально работать на сервере, но выдавать ошибку на рабочем месте пользователя в файловом варианте базы. Рассмотрим подробно причины такого поведения и способы их устранения.
Для начала разберем, что именно сообщает нам платформа. Код ошибки 27 при работе с объектом ИнтернетПочта чаще всего транслируется из низкоуровневых библиотек (cURL), используемых платформой. В большинстве случаев это означает SSL establish error — неудачную попытку установления защищенного соединения. Процесс обрывается на этапе "рукопожатия" (handshake) между клиентом 1С и почтовым сервером (в нашем примере — smtp.mail.ru).
Проанализируем ситуацию, описанную в теме: на сервере (в серверной базе) всё работает, а на локальном ПК (в файловой базе) — нет. Это сразу сужает круг поиска до настроек конкретного рабочего места, операционной системы или сетевых ограничений клиентского компьютера.
Современные почтовые сервисы (Mail.ru, Yandex, Gmail) из соображений безопасности запрещают использование основного пароля от почтового ящика для сторонних программ. Даже если ваш код абсолютно правильный, сервер отклонит авторизацию.
Что нужно сделать:
Выясним причину разного поведения кода. В серверной базе код, скорее всего, выполняется в модуле на стороне сервера 1С, где установлены все необходимые сертификаты и открыты доступы. В файловой базе (или при запуске в толстом клиенте) код выполняется непосредственно на компьютере пользователя.
Проанализируем настройки ИнтернетПочтовыйПрофиль. В коде автора есть несколько критических опечаток, которые могут влиять на инициализацию объекта в памяти, даже если ошибка вылетает на этапе SMTP:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ПользовательSMTP = "ваша_почта@list.ru";
Профиль.ПарольSMTP = "пароль_приложения";
// Обратите внимание на ошибки в блоке IMAP у автора:
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.АдресСервераIMAP = "imap.mail.ru";
Профиль.ПортIMAP = 993;
// Ошибка в коде автора: заполнялся ПользовательSMTP вместо ПользовательIMAP
Профиль.ПользовательIMAP = "ваша_почта@list.ru";
Профиль.ПарольIMAP = "пароль_приложения";
Убедитесь, что все свойства объекта ИнтернетПочтовыйПрофиль заполнены корректно и соответствуют используемому протоколу.
Поскольку ошибка 27 указывает на проблемы с SSL, крайне важно проверить версию протокола TLS, которую поддерживает операционная система. Почтовые серверы давно отказались от SSL 2.0/3.0 и TLS 1.0/1.1 в пользу TLS 1.2 и выше.
Если на локальном ПК стоит устаревшая ОС (например, Windows 7 без обновлений), 1С не сможет договориться с сервером о шифровании. Рассмотрим шаги для исправления:
cacert.pem.cacert.pem из папки bin платформы 1С с рабочего сервера на проблемный компьютер.Часто антивирусное ПО на рабочих станциях включает функцию "Почтовый антивирус" или "Сканирование защищенных соединений". Антивирус перехватывает трафик на порту 465, подменяет SSL-сертификат своим собственным для расшифровки и проверки письма. Платформа 1С видит подмену сертификата и обрывает соединение с ошибкой.
Проанализируем ситуацию: telnet на порт 465 проходит, так как он проверяет только открытие порта, но не проверяет корректность SSL-handshake. Для проверки этого решения временно отключите антивирус и попробуйте отправить почту снова.
В некоторых версиях платформы 1С (особенно в режимах совместимости со старыми версиями 8.2) работа с портом 465 (Implicit SSL) может быть нестабильной. Рассмотрим альтернативный вариант подключения через порт 587 (Explicit SSL/STARTTLS):
Профиль.ПортSMTP = 587;
// В некоторых версиях платформы STARTTLS инициируется при установке этого флага
Профиль.ИспользоватьSSLSMTP = Истина;
Хотя Mail.ru рекомендует порт 465, порт 587 часто оказывается более "проходимым" для клиентских машин за корпоративными экранами.
Соберем всё воедино и посмотрим на пример функции, которая учитывает основные нюансы:
Функция ПодключитьсяКПочте()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
// Всегда используйте почту целиком как логин
Профиль.ПользовательSMTP = "example@list.ru";
// Пароль, полученный в разделе "Пароли для внешних приложений"
Профиль.ПарольSMTP = "abcd-efgh-ijkl-mnop";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь;
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Возврат Почта;
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Важный совет: Если вы столкнулись с ошибкой 27 на клиентской машине, всегда проверяйте версию платформы 1С. Обновление клиента до последней актуальной версии в рамках ветки 8.3.13 (или выше) часто исправляет внутренние ошибки работы с SSL-библиотеками без изменения программного кода.