Как настроить отправку и получение почты в мобильном приложении 1С?

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

При переносе функциональности из десктопного клиента на мобильную платформу 1С разработчики нередко сталкиваются с ситуацией, когда отработанный код работы с электронной почтой через объект ИнтернетПочта перестает функционировать. При попытке подключения к почтовому серверу возникают ошибки соединения, сбои при установке защищенного канала или проблемы контекстной доступности свойств почтового профиля. Рассмотрим причины такого поведения мобильной платформы и разберем работающие способы отправки и приема корреспонденции на мобильных устройствах.

Причины сбоев при работе с почтой на мобильных устройствах

Проанализируем ключевые факторы, из-за которых мобильное приложение не может установить соединение с сервером по протоколам POP3, SMTP или IMAP:

  1. Ограничения реализации SSL/TLS в платформе. В ранних версиях мобильной платформы (включая ветку 8.3.5) свойства безопасного соединения ИспользоватьSSLPOP3, ИспользоватьSSLSMTP и соответствующие методы аутентификации имели неполную контекстную поддержку либо вызывали сбои при согласовании параметров шифрования через встроенные библиотеки OpenSSL. Кроме того, мобильная платформа не выполняет полноценную проверку цепочек сертификатов серверов, что может приводить к аварийному разрыву TLS-сессии.
  2. Отсутствие разрешений на доступ к сети в манифесте приложения. Если при сборке мобильного приложения через сборщик пакетов для ОС Android не был включен флаг доступа к сети Интернет (INTERNET), операционная система блокирует любые попытки создания исходящих сетевых сокетов на системном уровне.
  3. Требования почтовых провайдеров к безопасности. Современные почтовые сервисы блокируют авторизацию по обычному паролю учётной записи. Для работы почтовых протоколов требуется предварительно активировать протоколы POP3/IMAP в веб-интерфейсе ящика и сгенерировать отдельный «пароль для внешних приложений».

Отправка сообщений через встроенный клиент (объект СредстваПочты)

На мобильной платформе наиболее надежным способом отправки электронных писем является вызов системного почтового клиента устройства с помощью объекта СредстваПочты. Этот механизм не требует низкоуровневой настройки шифрования сокетов и авторизации, перекладывая отправку на операционную систему мобильного устройства.

Разберем пример формирования и отправки сообщения с вложениями:


Если СредстваПочты.ПоддерживаетсяОтправка() Тогда
    Письмо = Новый ИнтернетПочтовоеСообщение;
    
    // Заполняем список получателей
    СтрокаПолучатели = СтрЗаменить(Получатели, ",", Символы.ПС);
    Для Счетчик = 1 По СтрЧислоСтрок(СтрокаПолучатели) Цикл
        Письмо.Получатели.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаПолучатели, Счетчик)));
    КонецЦикла;
    
    Письмо.Тема = ТемаСообщения;
    Письмо.Тексты.Добавить(ТекстСообщения);
    
    // Добавление вложений из локальных файлов
    Если Не ПустаяСтрока(ПутьКФайлуВложения) Тогда
        Письмо.Вложения.Добавить(ПутьКФайлуВложения, "Документ");
    КонецЕсли;
    
    // Передача сообщения почтовому клиенту ОС
    СредстваПочты.Послать(Письмо, ОбработкаТекстаИнтернетПочтовогоСообщения.Обрабатывать);
КонецЕсли;

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

Прямая работа с почтой через ИнтернетПочта и протокол IMAP

Если бизнес-логика требует фоновой обработки входящих сообщений без участия пользователя через системный клиент, необходимо использовать объект ИнтернетПочта. На современных версиях платформы протокол IMAP работает стабильнее, чем устаревший POP3.

Посмотрим на пример правильной инициализации защищенного профиля и получения входящих писем:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераIMAP = "imap.example.com";
Профиль.ПортIMAP = 993;
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.Пользователь = "agent@example.com";
Профиль.Пароль = "ПарольПриложения"; // Пароль внешнего приложения почтового сервиса

Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
    
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Прочитанные", Ложь);
    
    МассивПисем = Почта.Выбрать(Ложь, ПараметрыОтбора);
    Для Каждого Письмо Из МассивПисем Цикл
        // Обработка темы, тела письма и вложенных файлов
        Для Каждого Вложение Из Письмо.Вложения Цикл
            ИмяФайла = КаталогВременныхФайлов() + Вложение.Имя;
            Вложение.Данные.Записать(ИмяФайла);
        КонецЦикла;
    КонецЦикла;
    
    Почта.Отключиться();
Исключение
    ИнформацияОбОшибке = ОписаниеОшибки();
    ВызватьИсключение "Ошибка взаимодействия с почтовым сервером: " + ИнформацияОбОшибке;
КонецПопытки;

Альтернативные архитектурные варианты обмена данными

Если основной целью работы с почтой является передача файлов обновлений или выгрузок данных между сервером компании и мобильными приложениями, использование электронной почты создает избыточные точки отказа (задержки доставки, спам-фильтры, сбои при разрыве связи). Рекомендуется использовать проверенные подходы:

  1. HTTP-сервисы центральной информационной базы. Центральная база публикует собственный HTTP-сервис. Мобильное приложение обращается к нему через объект HTTPСоединение с поддержкой ЗащищенноеСоединениеOpenSSL. Это обеспечивает гарантированную передачу данных в обе стороны с контролем целостности.
  2. REST API почтовых или облачных сервисов. Если обмен должен идти через внешние хранилища, надежнее взаимодействовать с ними по протоколу HTTPS через REST API провайдера (с OAuth-авторизацией). В мобильной платформе механизмы HTTP-клиента работают стабильно на всех поддерживаемых операционных системах.
← На главную