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

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

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

Рассмотрим основные способы реализации такой задачи с использованием возможностей платформы 1С:Предприятие 8.3 и операционной системы.

Способ 1. Создание временного EML-файла и запуск его в системе

Разберем наиболее универсальный способ, который позволяет сформировать полноценное почтовое сообщение и вызывать стандартный почтовый клиент операционной системы (MS Outlook, Mozilla Thunderbird и др.).

Суть метода заключается в подготовке текстового файла в стандарте MIME с расширением .eml и его последующем открытии через команду платформы ЗапуститьПриложение().

Посмотрим на пример программной реализации этого способа:


&НаКлиенте
Процедура ОткрытьEMLФайлНаКлиенте()
    
    АдресПолучателя = "user@domain.com";
    ТемаПисьма      = "Тестовая тема письма из 1С";
    ТекстПисьма     = "Здравствуйте!" + Символы.ПС + "Это текст сформированного письма.";
    
    // Формируем структуру файла EML в формате MIME
    СодержимоеEML = "To: " + АдресПолучателя + Символы.ПС +
                    "Subject: =?utf-8?B?" + СредстваМультимедиа.ЗакодироватьСтрокуBase64(ТемаПисьма) + "?=" + Символы.ПС +
                    "MIME-Version: 1.0" + Символы.ПС +
                    "Content-Type: text/plain; charset=utf-8" + Символы.ПС +
                    "Content-Transfer-Encoding: 8bit" + Символы.ПС + Символы.ПС +
                    ТекстПисьма;
                    
    ПутьКФайлу = КаталогВременныхФайлов() + "Message_" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "") + ".eml";
    
    ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
    ЗаписьТекста.Записать(СодержимоеEML);
    ЗаписьТекста.Закрыть();
    
    // Запускаем файл средствами ОС
    ЗапуститьПриложение(ПутьКФайлу);
    
КонецПроцедуры

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

Способ 2. Использование системного протокола mailto

Проанализируем альтернативный вариант без создания промежуточных файлов — запуск приложения через протокол mailto:. Этот способ работает как с установленными почтовыми клиентами, так и с браузерами, если они зарегистрированы в системе в качестве обработчиков почтовых ссылок.

Для корректной передачи спецсимволов и кириллицы параметры ссылки предварительно необходимо закодировать. Рассмотрим пример работы с протоколом mailto::


&НаКлиенте
Процедура ОткрытьMailTo()
    
    Получатель = "client@company.ru";
    Тема       = "Уведомление об оплате";
    Тело       = "Добрый день! Просим проверить поступление оплаты по счету.";
    
    // Кодируем параметры для подстановки в URL
    ЗакодированнаяТема = КодироватьСтр(Тема, ТипКодированияСтр.URLКодирование);
    ЗакодированноеТело = КодироватьСтр(Тело, ТипКодированияСтр.URLКодирование);
    
    СсылкаMailTo = "mailto:" + Получатель + "?subject=" + ЗакодированнаяТема + "&body=" + ЗакодированноеТело;
    
    // Открываем навигационную ссылку
    ЗапуститьПриложение(СсылкаMailTo);
    
КонецПроцедуры

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

Если пользователи работают преимущественно через веб-интерфейс корпоративной или публичной почты (например, Яндекс Почта или Gmail), вы можете программно сформировать прямую ссылку на создание нового письма в браузере.

Выясним, как сформировать такую ссылку для веб-интерфейса:


&НаКлиенте
Процедура ОткрытьФормуВБраузере()
    
    Адрес    = "example@mail.ru";
    Заголовок = "Информационное сообщение";
    
    URL = "https://mail.yandex.ru/compose?to=" + Адрес + "&subject=" + КодироватьСтр(Заголовок, ТипКодированияСтр.URLКодирование);
    
    ЗапуститьПриложение(URL);
    
КонецПроцедуры

Сравнение и особенности применения методов

При выборе подходящего варианта следует учитывать следующие ограничения и особенности систем:

  1. Ограничения протокола mailto::
    • Длина текста: Из-за ограничений операционных систем на максимальную длину командной строки и URI (порядок 2000 символов) передавать слишком объемные тексты нельзя.
    • Вложения: Протокол mailto: из соображений безопасности не поддерживает автоматическое прикрепление локальных файлов.
    • Формат текста: Поддерживается только обычный текст (Plain Text) без HTML-разметки.
  2. Преимущества EML-файлов:
    • Позволяют передавать HTML-форматированный текст.
    • Поддерживают вложение файлов (путем Base64-кодирования содержимого внутри EML-структуры).
  3. Поведение в тонком и веб-клиенте 1С:
    • В тонком клиенте метод ЗапуститьПриложение() работает напрямую с файловой системой и командами ОС.
    • В веб-клиенте для работы с локальными файлами требуется установленное расширение работы с файлами, либо использование прямых веб-ссылок (URL).
← На главную