При переносе функциональности из десктопного клиента на мобильную платформу 1С разработчики нередко сталкиваются с ситуацией, когда отработанный код работы с электронной почтой через объект ИнтернетПочта перестает функционировать. При попытке подключения к почтовому серверу возникают ошибки соединения, сбои при установке защищенного канала или проблемы контекстной доступности свойств почтового профиля. Рассмотрим причины такого поведения мобильной платформы и разберем работающие способы отправки и приема корреспонденции на мобильных устройствах.
Проанализируем ключевые факторы, из-за которых мобильное приложение не может установить соединение с сервером по протоколам POP3, SMTP или IMAP:
ИспользоватьSSLPOP3, ИспользоватьSSLSMTP и соответствующие методы аутентификации имели неполную контекстную поддержку либо вызывали сбои при согласовании параметров шифрования через встроенные библиотеки OpenSSL. Кроме того, мобильная платформа не выполняет полноценную проверку цепочек сертификатов серверов, что может приводить к аварийному разрыву TLS-сессии.INTERNET), операционная система блокирует любые попытки создания исходящих сетевых сокетов на системном уровне.На мобильной платформе наиболее надежным способом отправки электронных писем является вызов системного почтового клиента устройства с помощью объекта СредстваПочты. Этот механизм не требует низкоуровневой настройки шифрования сокетов и авторизации, перекладывая отправку на операционную систему мобильного устройства.
Разберем пример формирования и отправки сообщения с вложениями:
Если СредстваПочты.ПоддерживаетсяОтправка() Тогда
Письмо = Новый ИнтернетПочтовоеСообщение;
// Заполняем список получателей
СтрокаПолучатели = СтрЗаменить(Получатели, ",", Символы.ПС);
Для Счетчик = 1 По СтрЧислоСтрок(СтрокаПолучатели) Цикл
Письмо.Получатели.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаПолучатели, Счетчик)));
КонецЦикла;
Письмо.Тема = ТемаСообщения;
Письмо.Тексты.Добавить(ТекстСообщения);
// Добавление вложений из локальных файлов
Если Не ПустаяСтрока(ПутьКФайлуВложения) Тогда
Письмо.Вложения.Добавить(ПутьКФайлуВложения, "Документ");
КонецЕсли;
// Передача сообщения почтовому клиенту ОС
СредстваПочты.Послать(Письмо, ОбработкаТекстаИнтернетПочтовогоСообщения.Обрабатывать);
КонецЕсли;
Перед отправкой обязательно проверяем условие СредстваПочты.ПоддерживаетсяОтправка(), так как на некоторых конфигурациях оборудования или при отсутствии настроенного системного почтового клиента отправка может быть недоступна.
Если бизнес-логика требует фоновой обработки входящих сообщений без участия пользователя через системный клиент, необходимо использовать объект ИнтернетПочта. На современных версиях платформы протокол IMAP работает стабильнее, чем устаревший POP3.
Посмотрим на пример правильной инициализации защищенного профиля и получения входящих писем:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераIMAP = "imap.example.com";
Профиль.ПортIMAP = 993;
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.Пользователь = "agent@example.com";
Профиль.Пароль = "ПарольПриложения"; // Пароль внешнего приложения почтового сервиса
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Прочитанные", Ложь);
МассивПисем = Почта.Выбрать(Ложь, ПараметрыОтбора);
Для Каждого Письмо Из МассивПисем Цикл
// Обработка темы, тела письма и вложенных файлов
Для Каждого Вложение Из Письмо.Вложения Цикл
ИмяФайла = КаталогВременныхФайлов() + Вложение.Имя;
Вложение.Данные.Записать(ИмяФайла);
КонецЦикла;
КонецЦикла;
Почта.Отключиться();
Исключение
ИнформацияОбОшибке = ОписаниеОшибки();
ВызватьИсключение "Ошибка взаимодействия с почтовым сервером: " + ИнформацияОбОшибке;
КонецПопытки;
Если основной целью работы с почтой является передача файлов обновлений или выгрузок данных между сервером компании и мобильными приложениями, использование электронной почты создает избыточные точки отказа (задержки доставки, спам-фильтры, сбои при разрыве связи). Рекомендуется использовать проверенные подходы:
HTTPСоединение с поддержкой ЗащищенноеСоединениеOpenSSL. Это обеспечивает гарантированную передачу данных в обе стороны с контролем целостности.