В процессе разработки часто возникает задача сформировать готовое электронное письмо (с заполнением получателя, темы и текста), но не отправлять его автоматически прямо из 1С через SMTP-сервер, а предоставить пользователю возможность проверить черновик в привычной почтовой программе или браузере перед отправкой.
Рассмотрим основные способы реализации такой задачи с использованием возможностей платформы 1С:Предприятие 8.3 и операционной системы.
Разберем наиболее универсальный способ, который позволяет сформировать полноценное почтовое сообщение и вызывать стандартный почтовый клиент операционной системы (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, и откроет готовый черновик письма со всеми заполненными реквизитами.
Проанализируем альтернативный вариант без создания промежуточных файлов — запуск приложения через протокол mailto:. Этот способ работает как с установленными почтовыми клиентами, так и с браузерами, если они зарегистрированы в системе в качестве обработчиков почтовых ссылок.
Для корректной передачи спецсимволов и кириллицы параметры ссылки предварительно необходимо закодировать. Рассмотрим пример работы с протоколом mailto::
&НаКлиенте
Процедура ОткрытьMailTo()
Получатель = "client@company.ru";
Тема = "Уведомление об оплате";
Тело = "Добрый день! Просим проверить поступление оплаты по счету.";
// Кодируем параметры для подстановки в URL
ЗакодированнаяТема = КодироватьСтр(Тема, ТипКодированияСтр.URLКодирование);
ЗакодированноеТело = КодироватьСтр(Тело, ТипКодированияСтр.URLКодирование);
СсылкаMailTo = "mailto:" + Получатель + "?subject=" + ЗакодированнаяТема + "&body=" + ЗакодированноеТело;
// Открываем навигационную ссылку
ЗапуститьПриложение(СсылкаMailTo);
КонецПроцедуры
Если пользователи работают преимущественно через веб-интерфейс корпоративной или публичной почты (например, Яндекс Почта или Gmail), вы можете программно сформировать прямую ссылку на создание нового письма в браузере.
Выясним, как сформировать такую ссылку для веб-интерфейса:
&НаКлиенте
Процедура ОткрытьФормуВБраузере()
Адрес = "example@mail.ru";
Заголовок = "Информационное сообщение";
URL = "https://mail.yandex.ru/compose?to=" + Адрес + "&subject=" + КодироватьСтр(Заголовок, ТипКодированияСтр.URLКодирование);
ЗапуститьПриложение(URL);
КонецПроцедуры
При выборе подходящего варианта следует учитывать следующие ограничения и особенности систем:
mailto::
mailto: из соображений безопасности не поддерживает автоматическое прикрепление локальных файлов.ЗапуститьПриложение() работает напрямую с файловой системой и командами ОС.