Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом

Публикация № 906551

Разработка - Печать - Печатные формы документов

письмо почта Outlook Thunderbird Mozilla почтовый клиент локальный RDP remote отправка удаленный

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

Оглавление

1. Введение и описание задачи

2. Основные сложности

3. Решение

3.1 Структура

3.2 Варианты развертывания

3.3 Компоненты

4. Компоненты решения и порядок внедрения

4.1 Почтовый брокер

4.2 Дополнительные объекты к конфигурации 1С

4.3 Описание доработки типовых конфигураций

4.3.1 Доработка конфигураций УТ 10.3, УПП 1.3, КА 1.1, и других, основанных на данном семействе.

4.3.2 Доработка конфигурации БП 2.0, и других на ее основе.

4.3.3 Нюансы

4.4 Формат промежуточных файлов

Заключение

1. Введение и описание задачи

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

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

Зачастую, у пользователя, который не всю свою жизнь проживает в 1С, установлен локальный почтовый клиент (мейлер) типа Outlook, Thunderbird, The Bat! и т.п., в котором находится значимый архив почты. В рамках этой публикации мы рассматриваем ситуацию развертывания 1С на сервере рабочих столов, и эксплуатации локального почтового клиента непосредственно на компьютерах пользователей.

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

2. Сложности

К сожалению, почтовый клиент находится на локальном компьютере, а 1С клиент - на удаленном, и прямого способа передать файл-вложение с печатной формой на почтовый клиент не существует. Приходится сохранять вложение в PDF (XLS), перебрасывать его каким-либо способом с удаленного рабочего стола на локальный, и вкладывать в создаваемое на локальном компьютере письмо. Что крайне трудозатратно, и при сколь-нибудь значимом объеме отправляемых документов (например, счетов, менеджером по продажам), начинает отнимать почти все рабочее время.

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

  • письма сохраняются как документы, а их вложения - в хранилища значений, непосредственно в информационную базу, что, со временем приводит к ее разрастанию (крайне критично для файловых баз); как без доработок сделать отправку писем без их сохранения в журнал, лично я не знаю;
  • архив локального почтового клиента не содержит в папке "Отправленные" писем, отправленных таким образом; можно организовать отправку на собственный же адрес копий писем, но эти письма будут изначально попадать во "Входящие"; а если и для пересортировки таких писем настроить специальный фильтр, то трудозатраты по сопровождению этого решения на рабочем месте каждого менеджера становятся слишком велики;
  • платформа 8.2, которой некоторые еще пользуются для УТ/УПП/КА, не позволяет напрямую работать с защищенными версиями почтовых протоколов, на которые перешли почти все почтовые хостеры;
  • зачастую, по соображениям безопасности, серверу удаленных рабочих столов вообще запрещен выход в интернет, включая почтовые протоколы;
  • пользователи лишены привычного интерфейса локального почтового клиента;
  • приходится дублировать и сопровождать настройки учетных записей электронной почты не только на локальных почтовых клиентах, но и в 1С.

Иногда, даже несмотря на то, что клиент 1С развернут на локальном компьютере, т.е. "рядом" с почтовым клиентом, пользователь предпочел бы отправлять письма именно через почтовый клиент. И хотя возможность включить внешний почтовый клиент присутствует в оговоренных в описании публикации типовых конфигурациях (Комплексная автоматизация 1.1, Управление производственным предприятием 1.3, Управление торговлей 10.3), без доработок печатные формы через него не отправляются. Данное решение подходит и для этого варианта развертывания тоже.

3. Решение

3.1 Структура

Для решения задачи и устранения вышеозначенной проблемы была разработана следующая схема:

В конфигурацию 1С вносятся дополнительные объекты (1 новая обработка, 1 константа, 1 роль и 1 подсистема), составляющие "наш" механизм отправки почты, а также точечные изменения в общие модули конфигурации (одно для конфигураций УТ 10 / КА 1.1 / УПП 1.3), которые перехватывают данные, направляемые из диалога печати штатному механизму отправки почты, и делегируют их нашему механизму.

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

На каждом клиентском компьютере действует специально разработанное приложение - "Почтовый брокер", которое периодически опрашивает папку, получает оттуда промежуточные файлы именно для данного пользователя (соответствующие определенному шаблону имени файла) передают их почтовому клиенту (в настоящее время поддерживаются MS Outlook и Mozilla Thunderbird), который открывает для интерактивного редактирования сформированное сообщение со всеми вложениями. Промежуточный файл после этого удаляется.

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

Интервал опроса, каталог обмена и шаблон имен файлов с письмами, предназначающихся именно для данного экземпляра брокера, настраиваются в почтовом брокере.

Указанная схема представлена, для наглядности, на рисунке, в одном из вариантов развертывания.

Схема

3.2 Варианты развертывания

Ключевым моментом в развертывании системы является определение общей папки, куда будут складываться данные сообщения. Здесь предлагается несколько вариантов:

1. (Как на рисунке) Общая папка находится на сервере терминалов (RDP), или на каком-либо другом сервере (хоть даже на примитивной виртуальной машине на базе linux с самоочищающейся общей папкой на samba), и доступна всем клиентам равноправно. Каждый клиентский брокер ссылается через сеть Microsoft на нее. Файлы создаются с шаблоном <Имя пользователя 1С>-<уникальный код письма>.xml, и подхватываются брокерами по шаблонам вида "<Имя пользователя 1С>-*.xml".

2. Общая папка находится на каждом клиенте в одном и том же месте (т.е. по одинаковому пути), и прописана на стороне 1С через ссылку на tsclient (например, \\tsclient\c\mail1c), если на удаленную машину можно пробросить диски. Почтовые брокеры каждого клиента настроены на одну и ту же папку (c:\mail1c), только эта папка у каждого клиента своя.

3. Клиент 1С находится на одном компьютере с брокером и почтовым клиентом (т.е. все на локальном компьютере, или все в терминале), и работает через временную папку. И все это просто потому, что пользователь желает отправлять печатные формы из 1С через почтовый клиент.

4. Любой другой, или какой-либо промежуточный вариант на усмотрение внедренца, тем более, что логику формирования имен промежуточных файлов можно переделать на свое усмотрение.

5. Вариант, когда промежуточные файлы вообще создаются не клиентом 1С, а каким-либо другим программным продуктом.

3.3 Компоненты

Таким образом, предлагаемое решение содержит:

  • приложение почтового брокера;
  • дополнительные объекты к конфигурации 1С, необходимые для формирования промежуточных файлов; указанные объекты можно доработать на свое усмотрение;
  • описание доработки типовых конфигураций УТ 10.3, УПП 1.3, КА 1.1 для того, чтобы штатная функция отправки вложений почтой использовала обработку, описанную строкой выше.
  • описание формата промежуточных "почтовых" файлов, на случай, если разработчик пожелает генерировать эти файлы каким-либо иным способом (собственным модулем в 1С, вообще иной программой, и т.п.)

Внедрение данного решения, при вариантах №№ 1-3 (указанных выше) занимает не более 30 минут, при возможности монопольного доступа к конфигурации. Ниже представлено описание компонентов и порядок внедрения для варианта №1.

4. Описание компонентов и порядок внедрения

4.1 Почтовый брокер

Почтовый брокер является приложением Win32, разработан на FreePascal с использованием IDE Lazarus. Подтверждена его работа под Windows XP, Vista, а также версий 7, 8, 8.1 и 10, под 32 и 64-битными версиями систем. На данный момент он не подписан доверенным сертификатом, поэтому при его первом запуске у ОС могут появиться вопросы о его "благонадежности". Особенно если это приложение будет запускаться через сеть из общей папки. Разумеется, запуск данного приложения следует разрешить.

Как только дойдут руки, я опубликую исходный код, чтобы его можно было доработать на усмотрение внедренца. Возможно доработать брокер таким образом, чтобы он поддерживал TheBat, иные мейлеры, или даже, полагаю, обращался по API к Web-почтовым клиентам.

Microsoft Outlook запускается брокером через OLE, а Mozilla Thunderbird - через командную строку. При использовании Thunderbird имеется ограничение: если вы отправите из 1С письмо, не закрыв в почтовом клиенте предыдущее, в некоторых версиях Thunderbird окно сообщения не откроется. Это ограничение Thunderbird, я поищу, как его преодолеть.

Порядок внедрения

1. Скачать приложение (mailbroker.exe), доступное по ссылке внизу данной публикации.

2. Скопировать в любую удобную папку на клиентском компьютере, где установлен доступ к RDP для работы с 1С, и локальный почтовый клиент. Специальная процедура установки не требуется.

2. Запустить. Приложение запускается в свернутом режиме, отображая ярлык на панели уведомления (в "трее"). Следует щелкнуть правой кнопкой на этот ярлык и выбрать "Настройки". Откроется окно, представленное на рисунке.

Окно настроек почтового брокера

3. В окне настроек задать следующую информацию:

  • В поле "Маска файлов" указать маску по аналогии с той, что представлена на рисунке. Здесь предполагается, что пользователь ИБ 1С, соответствующий оператору данного компьютера, имеет краткое имя "ПетровПП". Подстановочные знаки ? и * в маске стандартны, и применяются по правилам dos/windows. На другом компьютере, где сидит другой пользователь, эта информация будет иной. Если в информационной базе нет поименованных пользователей (т.е. авторизация не настроена), то в следует использовать маску ПользовательПоУмолчанию*.xml".
  • В поле "Каталог мониторинга" следует выбрать каталог, в который удаленная 1С будет помещать промежуточные файлы с письмами. Ознакомьтесь с вариантами развертывания, которые были упомянуты выше. Каталог должен быть доступен пользователю, запускающему брокер, для записи (чтобы брокер мог удалять файлы, которые он передал почтовому клиенту в виде сообщений).
  • В поле "Интервал опроса" рекомендуется оставить значение в 1с (1000 мс).
  • В поле "Почтовый клиент" следует выбрать используемый и настроенный почтовый клиент.

4. Нажать кнопку "Применить", после чего закрыть окно кнопкой [X] в правом верхнем углу.

5. Провести тестирование, как указано в следующем разделе.

6. После окончания тестирования всей связки, при удовлетворительном результате, прописать данное приложение в автозапуск для данного пользователя, или всех пользователей системы.

Сохраненные настройки хранятся в файле mailbroker.ini каталога AppData\Local текущего пользователя системы.

4.2 Дополнительные объекты к конфигурации 1С

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

Конфигурация содержит следующие объекты:

Дерево конфигурации

Подсистема "в_ВЭП" объединяет все объекты, представленные на рисунке, кроме обработки "в_ВЭП_ТестОтправкиПочты".

Роль "в_ВЭП_ОтправкаПочты" предоставляет доступ к необходимым объектам, для отправки почты, а также является сигнальной ролью для активации перехваченного кода типовой логики формирования писем, о котором будет сказано в следующем разделе.

Константа "в_ВЭП_Настройки" хранит упакованную структуру с настройками модуля, о которых будет рассказано чуть ниже.

Обработка "в_ВЭП_Брокер" содержит основную логику формирования промежуточных файлов из исходных данных, доступных программисту, и в необходимом формате.

Обработка "в_ВЭП_ТестОтправкиПочты" содержит простейший пример передачи писем локальному почтовому клиенту с использованием данного модуля. Ею можно воспользоваться через меню "Операции - Обработки", если запустить конфигурацию как отдельную информационную базу.

Порядок тестирования

1. Создать пустую информационную базу и загрузить туда конфигурацию. Запустить информационную базу.

2. Через меню "Операции - обработки" открыть обработку "(В) Брокер внешней электронной почты". Будет отображена форма, представленная на рисунке.

Настройки со стороны 1С

В ней следует совершить следующие действия:

  • Флажок "Настройки выполнены (модуль активен)" взвести.
  • В поле "Каталог выгрузки" следует указать тот же каталог, который указывался в разделе, посвященном настройке почтового брокера, но с той поправкой, что сейчас этот каталог указывается со стороны 1С:
    • это может быть локальный каталог здесь, на сервере, но удаленный (сетевой) для брокера;
    • может быть сетевой для обоих сторон (как указано в данном примере);
    • a может быть локальный для каждого брокера (например C:\Mailbox1C на каждом клиентском компьютере), но одинаково выглядящий для 1С (находящемся на сервере RDP) сетевой каталог, описанный через условное имя tsclient. Для данного примера это будет \\tsclient\c\Mailbox1C. Разумеется, в этом случае, на каждом клиентском компьютере должен быть создан такой каталог, что немного некрасиво, но иногда - единственный возможный вариант.
  • Применить указанные настройки, нажав кнопку "Сохранить".

3. Через меню "Операции - обработки" открыть обработку "(В) Тест отправки почты через брокер". Сформировать тестовое сообщение, например так, как показано на рисунке, и убедиться, что в каталоге выгрузки появился файл вида "ПользовательПоУмолчанию-f41452s0-0da3-21a5-b0d1-00ca54b6a431.xml". Уникальное цифробуквенное сочетание будет сгенерировано каждый раз случайно. Если в тестовую конфигурацию был добавлен именованный пользователь, то вместо префикса "ПользовательПоУмолчанию" будет указано краткое имя текущего пользователя. Учтите этот момент при настройке брокера.

Образец тестового сообщения со стороны 1С

4. На стороне брокера, если маска файла настроена с учетом имени текущего пользователя (или его отсутствия, т.е. ПользовательПоУмолчанию-*.xml), в используемом почтовом клиенте будет незамедлительно открыто письмо для интерактивного редактирования.

Образец тестового сообщения со стороны почтового клиента

В случае каких-либо проблем, на панели уведомлений будет выведена описание ошибки, после чего программа прервет опрос каталога на некоторое время (10 секунд), для того, чтобы пользователь мог предпринять меры для устранения ошибки, или закрыть брокер. Затем для неотправленных писем будет предпринята повторная попытка.

Образец ошибки, выводимой в панели уведомлений

Порядок практического внедрения

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

2. Произвести сравнение и объединение целевой конфигурации с мини-конфигурацией, предлагаемой в данной публикации. Снять флажок с подэлемента "Свойства" корневого дескриптора конфигурации, но оставить флажки на всех добавляемых объектах. Сохранить и применить изменения.

3. Настроить модуль так же, как было описано с пункта 2 предыдущего подраздела "Порядок тестирования".

4. Разработать собственный механизм формирования сообщений посредством функций обработки в_ВЭП_Брокер "ОтправитьПисьмо()" или более частной - ОтправитьПечатнуюФормуПоЭлектроннойПочте(). См. комментарии кода к данным функциям. Можно доработать формат имен формируемых промежуточных файлов, если переопределить функцию СформироватьПутьКФайлуСообщения(), чтобы имена файлов содержали префикс не в виде имени пользователя, а например, в виде имени клиентского компьютера, или имени системного пользователя.

Если речь идет о доработке конфигураций "Управление торговлей 10.3", "Комплексная автоматизация 1.1", "Управление производственным предприятием 1.3", то рекомендуется проследовать к следующему разделу.

4.3 Описание доработки типовых конфигураций

4.3.1 Доработка конфигураций УТ 10.3, УПП 1.3, КА 1.1, и других, основанных на данном семействе.

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

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

2. Требуется переопределить поведение типового механизма отправки печатных форм по электронной почте. См. рисунок, на котором представлено типовое окно вывода печатной формы.

Типовое окно вывода печатной формы и кнопка отправки электронного сообщения

Интересующая нас кнопка отмечена красной стрелкой. Анализ ее обработчика приводит нас в общий модуль УправлениеОтчетами, в который удобно внести следующее точечное изменение процедуры ОтправитьДокументПоЭлектроннойПочте:

Процедура ОтправитьДокументПоЭлектроннойПочте(Документ, ИмяФайлаВложения = "", ОбъектПечати = Неопределено) Экспорт

	// +stvor перехвачено и заменено для передачи писем на локальные почтовые клиенты
	Если РольДоступна("в_ВЭП_ОтправкаПочты") или ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "" Тогда
		Обработки.в_ВЭП_Брокер.Создать().ОтправитьПечатнуюФормуПоЭлектроннойПочте(Документ, ИмяФайлаВложения, ОбъектПечати);
		Возврат;
	КонецЕсли;	
	// -stvor	

	// далее следует штатный код этой процедуры

Насколько я лично помню, даже в достаточно волатильных конфигурациях УПП 1.3 и КА 1.1, этот модуль не менялся достаточно давно, и вряд ли поменяется теперь, соответственно, обновление конфигурации не будет затруднено. Про УТ 10.3 (которая еще у некоторых вообще 10.2, несмотря на 2018 год) можно вообще не говорить.

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

Суть изменений состоит в том, что если у пользователя доступна роль в_ВЭП_ОтправкаПочты, или пользователь пустой, то сформированный модулем печати табличный документ, ссылка на исходный объект, будут переданы нашему механизму отправки почты, вместо штатного. Если роль недоступна, то будет использован штатный механизм.

3. Всем пользователям, которые эксплуатируют данный механизм, следует включить роль в_ВЭП_ОтправкаПочты - непосредственно, либо через профиль, если профили полномочий используются в вашей ИБ.

4. Предполагая, что порядок внедрения, описанный ранее, пройден успешно, следует вывести на экран какую-либо печатную форму, после чего нажать кнопку, отмеченную красной стрелкой на рисунке выше. В почтовом клиенте незамедлительно откроется окно интерактивного редактирования нового сообщения, в которое будет уже вложен файл с печатной формой.

Это означает, что цель достигнута.

4.3.2 Доработка конфигурации "БП 2.0", и других на ее основе.

В отличие от вышеописанных конфигураций, в "Бухгалтерии предприятия 2.0" отсутствует модуль CRM (если его так можно назвать) и встроенный почтовый клиент. Соответственно, и кнопки отправки по электронной почте тоже нет. Что не мешает ее туда быстро прикрутить.

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

2. В панель инструментов общей формы "ФормаПечати" следует добавить кнопку "Отправить по электронной почте", оформив ее на свое усмотрение.

Пример формы печати в БП 2.0

Создать функцию-обработчик этой кнопки, и написать туда следующий код:

	Если РольДоступна("в_ВЭП_ОтправкаПочты") или ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "" Тогда
		Обработки.в_ВЭП_Брокер.Создать().ОтправитьПечатнуюФормуПоЭлектроннойПочте(ЭлементыФормы.ПолеДокумента, Заголовок, Документ);
		Возврат;
	КонецЕсли;	

3. Всем пользователям, которые эксплуатируют данный механизм, следует включить роль в_ВЭП_ОтправкаПочты.

4. Предполагая, что порядок внедрения, описанный ранее, пройден успешно, следует вывести на экран какую-либо печатную форму, после чего нажать кнопку, которую мы сами создали в пункте 2. В почтовом клиенте незамедлительно откроется окно интерактивного редактирования нового сообщения, в которое будет уже вложен файл с печатной формой.

Это означает, что цель достигнута.

4.3.3 Нюансы

К сожалению, штатный механизм печати предоставляет для формирования почтового сообщения лишь ограниченное количество параметров - табличный документ, имя файла вложения (по факту - синоним метаданных), и ссылку на объект (справочник, документ), из которого вызвана печатная форма. Поэтому, код формирования сообщения "не понимает" о чем именно оно. Это приводит к тому, например, что вложение печатной формы счета из документа "Заказ покупателя" называется именем "Заказ покупателя №1 от 01.01.2018.pdf", и тема у письма такая же, а тело пустое, что не совсем соответствует содержимому: ведь предполагается именно счет на оплату. На доведение сообщения до кондиции пользователю потребуется время, что, при достаточной частоте повторения, снижает ценность автоматизации.

Если конечных пользователей не устраивает формат генерируемого сообщения, имя файла-вложения, то необходимо поправить функцию ОтправитьПечатнуюФормуПоЭлектроннойПочте обработки в_ВЭП_Брокер, в коде которой комментариями указаны точки расширения. Функции, возможно, придется "заниматься телепатией", и определять, как конечный пользователь хотел бы видеть письмо, исходя из метаданных объекта и содержимого печатной формы.  Например, что-то вроде:

///... в функции ОтправитьПечатнуюФормуПоЭлектроннойПочте

ЭтоСчет = Ложь;

// Это счет, если из документа "Счет".
Если ОбъектПечати.Метаданные.Имя = "СчетНаОплатуПокупателя" Тогда
  ЭтоСчет = Истина;
КонецЕсли;

// Это счет, если из документа "Заказ покупателя" а печатная форма содержит текст "Счет на оплату"
Если ОбъектПечати.Метаданные.Имя = "ЗаказПокупателя" и ТабДокумент.НайтиЗначение("Счет на оплату") <> Неопределено Тогда
  ЭтоСчет = Истина;
КонецЕсли;

Если ЭтоСчет Тогда
   // Если у нас счет, то порядок формирования имени вложения, темы и тела - особый.
   ИмяФайла = "Счет на оплату покупателя".... // тут приписать номер и дату
   Тема = "Счет на оплату...";
   Тело = "Уважаемый клиент! 
|Направляем вам счет на оплату за "+НРег(ОбъектПечати.ДоговорКонтрагента.ВидВзаиморасчетов);

//...

(Это очень грубое решение экспромтом, представлено как пример, и к тому же содержит уместные для ситуации костыли, поэтому прошу не воспринимать слишком близко к сердцу, и полагать, что я всегда пишу код именно так)

Либо, необходимо разрабатывать свою внешнюю печатную форму, которая будет содержать в себе полноценный шаблон письма, непосредственно вызывать более гибкую функцию обработки в_ВЭП_Брокер "ОтправитьПисьмо()", передав ей тему, текст сообщения, отправителей, вложения и др.

4.4 Формат промежуточных файлов

Промежуточные файлы, содержащие почтовое сообщение, формируются в формате XML, описание диалекта которого представлено далее. XML-файл должен обязательно иметь кодировку UTF-8. Файл может начинаться с трехбайтовой мигнатуры BOM, или без нее. Все имена элементов и атрибутов регистрозависимы.

В одном файле должно находиться только одно сообщение.

Корневым элементом должен быть <message>. Внутри корневого элемента могут находиться следующие элементы:

  • <subject>тема сообщения</subject>, причем такой элемент может быть только один, или не быть вообще.
  • <recipient>получатель</recipient>, причем таких элементов может быть один, несколько, или не быть вообще. Содержимое должно быть оформлено в формате, принятым для поля "Кому" почтовых клиентов, т.е. либо содержать только электронный адрес, либо имя получателя, и его электронный адрес, взятый в треугольные скобки, например "Иванов Иван <ivanov@gdeto.ru>". Разумеется, треугольные скобки в реальном XML должны быть заменены на escape-последовательности &gt; и &lt;
  • <copyto>получатель копии</copyto>, аналогично recipient.
  • <body>тело сообщения</body>, причем такой элемент может быть только один, или не быть вообще. Тело сообщения должно находиться в конструкции CDATA.
  • <attachment filename="имя файла без пути">содержимое</attachment>, причем таких элементов может быть один, несколько, или не быть вообще (для каждого вложения). Содержимое представляет собой неупакованные байты файла, закодированные в формате BASE64 и взятые в конструкцию CDATA. Имя файла должно быть оформлено по правилам, принятым для ОС Windows, т.е. файл с таким именем должно быть возможно создать.

Пример файла представлен ниже.

<?xml version="1.0" encoding="UTF-8"?>
<message>
	<subject>Счет на оплату покупателю № 2468 от 31 августа 2018</subject>
	<recipient>Иван Иванов &lt;ivanov@potrooo.ru&gt;</recipient>
	<recipient>ООО &quot;Потребитель&quot; &lt;info@potrooo.ru&gt;</recipient>
	<body>
		<![CDATA[Здравствуйте!
Направляем Вам очередной счет на оплату за услуги. Просим соблюдать сроки.
Заранее спасибо.
--
С уважением,
ООО "Услуги"
]]></body>
	<attachment filename="Счет на оплату покупателю от 31.08.2018 №2468.pdf">
		<![CDATA[JVBERi0xLjcKJeLjz9MKMSAwIG9iago8PAovRmlsdGVyIC9GbGF0ZURlY29kZQov
TGVuZ3RoIDIgMCBSCi9MZW5ndGgxIDI5NzYwCi9MZW5ndGgyIDAKL0xlbmd0aDMg
MAo+PgpzdHJlYW0KeJztvXlcVEe2OF5Vd7+93V5outn6tg0N2iIIKKBELoKoISqu
... контент пропущен ...
YzUxYjY3ZDA1ZTRmZjk3YTA5Zj4gPDMxOWQ1ODVmODQyMjRjNTFiNjdkMDVlNGZm
OTdhMDlmPiBdCj4+CnN0YXJ0eHJlZgo4NjY0NwolJUVPRgo=]]></attachment>
</message>

В указанном примере задана тема и тело сообщения, имеется два получателя, для которых указаны имена и адреса почты, а также одно вложение.

Если какой-либо элемент не указан, соответствующая часть конечного сообщения не будет заполнена. В минимальном же варианте, в файле может содержаться только закрытый корневой элемент <message/>: из такого файла брокер создаст пустое письмо.

Файлы указанного формата могут создаваться, разумеется, не только 1С предприятием, но и любыми другими программами. Развернутый брокер будет обрабатывать любые файлы, имя которых соответствует настроенной маске.

Заключение

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

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

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

Отвечу на возможные вопросы в комментариях данной публикации.

Скачать файлы

Наименование Файл Версия Размер
Почтовый брокер
.zip 737,97Kb
20.09.18
6
.zip 1.0 737,97Kb 6 Скачать
Мини-конфигурация для тестирования и доработки типовых конфигураций
.zip 13,92Kb
20.09.18
7
.zip 13,92Kb 7 Скачать

Специальные предложения

Оставьте свое сообщение

См. также

[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо

Универсальные функции Инструментарий разработчика Учет ТМЦ Учет ТМЦ v8 1cv8.cf Россия БУ Абонемент ($m)

Расширение позволяет без изменений конфигурации проверять остатки по регистру бухгалтерии при проведении каждого документа и запрещает проведение при появлении отрицательных остатков после проведения.

1 стартмани

17.08.2015    44256    155    ekaruk    31    

Полезные процедуры и функции для программиста

Практика программирования Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

07.10.2019    24961    13    HostHost    40    

Использование подсистемы БСП "Заполнение объектов"

Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем) v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

23.11.2018    22523    12    ids79    23    

Размеры управляемой формы

Практика программирования Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Как рассчитать ширину и высоту управляемой формы или отдельного элемента, чтобы адаптировать интерфейс программно при их изменении.

1 стартмани

08.10.2017    24722    69    json    9    

Шаблон внешней обработки регламентного задания с формой настройки параметров выполнения

Инструментарий разработчика Универсальные функции v8 v8::УФ 1cv8.cf Абонемент ($m)

Шаблон внешней обработки призван упростить программисту процесс реализации внешнего регламентного задания. Пригоден к использованию во всех конфигурациях на управляемых формах, в которых присутствует подсистема "Дополнительные отчеты и обработки" из состава библиотеки стандартных подсистем (БСП) версии 2.1 и выше.

1 стартмани

28.05.2017    22943    165    Bassgood    10    

Отладка/доработка модуля менеджера "на лету"

Инструментарий разработчика Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

Данный прием позволяет отлаживать и дорабатывать модуль менеджера во внешней обработке без необходимости пересохранять конфигурацию и перезапускать базу

1 стартмани

23.10.2016    27659    18    json    22    

Использование общих модулей "Длительные операции" из состава БСП или асинхронное выполнение серверных процедур без блокировки пользовательского интерфейса

Практика программирования Производительность и оптимизация (HighLoad) Универсальные функции БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

В статье кратко описан способ использования процедур общих модулей "Длительные операции" из состава библиотеки стандартных подсистем (БСП). Статья будет полезна программистам и администраторам, работающих с объемными клиент-серверными базами, конфигурации которых включают в себя БСП. К длительным операциям можно отнести, например, такие процедуры как групповое проведение документов, формирование объемистых отчетов, работа с внешними источниками данных.

1 стартмани

17.03.2015    64025    139    Bassgood    16    

Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов Промо

Практика программирования Математика и алгоритмы Универсальные функции Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Абонемент ($m)

Восстановление партий, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

26.05.2017    46162    15    DarkAn    86    

Библиотека универсальных функций и процедур (v 1.3)

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

17.12.2014    15420    7    alex271    27    

Универсальная функция получения таблицы дат за период. С любым интервалом (день, неделя, месяц, квартал и т.д.)

Универсальные функции Практика программирования v8 1cv8.cf Абонемент ($m)

Небольшая функция, возвращающая таблицу значений со всеми датами за период. Интервал дат можно задать любой: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год.

1 стартмани

14.06.2014    36449    16    mtv:)    6    

Сравнение строк с выводом различий

Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка созданная с целью представить реализованный мной алгоритм сравнения строк. Реализована на 1С 8.1, однако будет работать и на более поздних версиях.

1 стартмани

15.05.2014    21364    21    bahbah    16    

Лучшие методы сравнения таблиц значений Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

02.02.2015    101224    37    ildarovich    59    

Включаем звук в 1С. Доступно и всерьез.

Математика и алгоритмы Универсальные функции v8 1cv8.cf Абонемент ($m)

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

1 стартмани

30.12.2013    78400    144    sikuda    27    

Показать, повернуть и увеличить картинку в 1С

Инструментарий разработчика Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

Не нашел универсального средства для тонкого и web-клиента для просмотра изображений c увеличением и поворотом. Сделал. В хозяйстве нужная вещь.

1 стартмани

20.12.2013    29703    52    sikuda    19    

Внеконтекстный вызов методов объекта обработки (отчета) в управляемой форме

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

16.12.2013    43835    9    yuraos    34    

Конфигурация для партнеров "Инфостарт" для ведения публикаций, рассылки обновлений Промо

Email Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Управление взаимоотношениями с клиентами (СRM) v8 1cv8.cf УУ Абонемент ($m)

Для упрощения жизни своей я разработал конфигурацию «База клиентов и публикаций», которая практически решает мои «проблемы» с рассылкой обновлений и учетом продаж на сайте «Инфостарт», с возможностью загрузки данных с сайта (авторского раздела) . Обновление от 18.06.2019, версия 1.5!

5 стартмани

28.09.2014    29915    29    hakerxp    20    

Отчет "Дни рождения сотрудников" со специальной возможностью отправки результата на электронную почту

Управление персоналом (HRM) Управленческие Email Управление персоналом (HRM) v8 1cv8.cf Абонемент ($m)

Отчет уникален, потому что содержит решение задачи два в одном. Просто меняй выводимую информацию (отчет об остатках ТМЦ, кассовый отчет, прочий финансовый или бухгалтерский отчет), а код для отправки данного отчета по почте уже написан за тебя. Директор, главный бухгалтер и прочие должностные лица, принимающие решения, будут довольны. Придя утром на работу они получат по почте самую свежую и необходимую информацию. В результате данного отчета в качестве примера выводится информация о днях рождениях сотрудников на ближайшую неделю. Отчет опробован в крупной организации и активно используется, каждую пятницу отчет автоматически запускается на сервере, и рассылает на указанные адреса сообщения о предстоящих днях рождения.

1 стартмани

04.02.2013    16628    11    inter1980    1    

Модуль проверки обновлений для собственной конфигурации

Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

Если у вас есть конфигурация/подсистема собственной разработки, или просто некоторая очень хорошая обработка, и вы хотите сообщать пользователям о выходе новых версий, можете воспользоваться данным модулем.

1 стартмани

23.11.2012    10628    4    Mogidin    1    

Генератор Штрих-кода EAN 13 на основе шрифта EanGnivc.ttf

Ценники Универсальные функции Розничная торговля Учет ТМЦ Розничная торговля Учет ТМЦ v8 1cv8.cf Абонемент ($m)

Печать Штрих-кодов на основе Шрифта. Дает преимущества: 1) Быстрая печать - особенно заметно на принтерах штрих-кодов. 2) Идеально пропечатанный штрих-код - в отличие от печати картинок, дающих различные искажения (гребенка и т.д....). Единственный минус - регистрация шрифта))

2 стартмани

06.11.2012    46234    81    sanfoto    25    

Мастер рассылки e-mail 2.2 для управляемых форм Промо

Практика программирования Email v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    35017    19    milkers    4    

Прогресс бар 8.2 (УТ 11 без изменения конфигурации, для SQL)

Работа с интерфейсом Универсальные функции v8 УТ10 Абонемент ($m)

Данный приём позволяет показать текущее состояние выполнения серверного кода пользователю (без внесения изменений в конфигурацию). Идея взята от сюда http://infostart.ru/public/157706/

1 стартмани

06.11.2012    61083    129    pbazeliuk    16    

Ускорение для Клиент-Банка

Банковские операции Обмен с банком Универсальные функции Банковские операции v8 1cv8.cf Абонемент ($m)

У вас много платежей и клиент-банк долго их читает? Есть проверенная практикой идея, как это ускорить.

1 стартмани

08.10.2012    23354    3    Yashazz    15    

Быстрый поиск телефонов

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Как двадцати операторам, не подвешивая друг друга, быстро находить телефонный номер по первым продиктованным цифрам, когда база номеров - от 50 тыс...

1 стартмани

02.09.2012    18548    0    O-Planet    14    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    25942    3    Serginio    1    

Дополнительные каталоги номенклатуры

Практика программирования Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Эта разработка позволяет иметь несколько вариантов структуры справочника номенклатуры для разных категорий пользователей, различных задач или для выгрузки на различные сайты. БЕСПЛАТНО!

1 стартмани

13.08.2012    18839    4    O-Planet    10    

Универсальный фильтр для таблицы значений

Практика программирования Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Универсальный фильтр по любой табличной части с типом Таблица значений. Не зависит от количества колонок.

1 стартмани

05.07.2012    10849    6    gvido    13    

1С:JSON

Внешние источники данных Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

JSON парсер и сериализатор c полной поддержкой стандарта, широким набором сериализуемых типов и продвинутым синтаксический анализатором.

1 стартмани

05.03.2012    68030    362    legionWFZ    48    

Автоматическая подстановка уничтожений временных таблиц в текст запроса Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция, которая сама подставляет в текст запроса "УНИЧТОЖИТЬ" в местах последнего использования ВТ.

1 стартмани

14.11.2015    18712    0    SeiOkami    3    

Обработка на сервере с индикатором (упр. приложение)

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка на сервере с отображением процесса загрузки и возможностью прерывания

1 стартмани

30.09.2010    60112    166    acsent    16    

Форма редактирования списка значений

Универсальные функции v8 1cv8.cf Абонемент ($m)

Форма предлагается в качестве замены стандартному диалогу "Редактирование списка": максимально полно повторяет его интерфейс и функционал, а также обладает дополнительными возможностями и преимуществами.

1 стартмани

24.06.2010    29155    80    Spartan    19    

Выгружаем в EXCEL с помощью ADO

Загрузка и выгрузка в Excel Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

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

2 стартмани

02.02.2010    35888    7    ll13    30    

Библиотека математических функций 1.1 Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

18.12.2014    24209    11    alex271    67    

Расчетные листки организации с рассылкой по почте. Вариант 2

Зарплата Бухгалтерские Email Зарплата v8 ЗУП2.5 УПП1 Россия БУ Абонемент ($m)

Расчетные листки организации с рассылкой по почте. Вызывается стандартный отчет и анализируется для формирования рассылки расчетных листков в формате xls на почтовые ящики сотрудников.

1 стартмани

01.11.2009    19792    61    Alltruist    41    

Индикатор процесса в строке состояния ... ?...!

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Я очень люблю програссБар – по-русски индикатор процесса … куда бы его поместить ...?

1 стартмани

27.10.2009    31514    5    Шёпот теней    59    

Печатаем штрих-код EAN-13 средствами 1С...

Практика программирования Ценники Универсальные функции v8 1cv8.cf Абонемент ($m)

Печатаем штрих-код EAN-13 средствами 1С без внешних компонент.

1 стартмани

17.10.2009    30679    46    Larkin    49    

Полезные функции БСП Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Список часто востребованных, по моему мнению, функций из состава Библиотеки стандартных подсистем 2.2.

1 стартмани

01.02.2015    58092    24    spec8s    31    

Всякие полезности 2 (теперь в chm)

Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

17.04.2009    10149    21    Minotavrik    1    

Склонение ФИО

Универсальные функции v8 1cv8.cf 1cv7.md Россия Абонемент ($m)

Склонение ФИО в виде небольшой процедуры. Писалось студентом-программистом и студентом-лингвистом.

01.10.2008    66865    9    e.kogan    90    

PowerSheet

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Электронная таблица

1 стартмани

19.06.2008    15439    12    PowerBoy    27    

Регулярные выражения без COM объектов и внешних компонент Промо

Универсальные функции Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

09.02.2015    22903    8    boogie    38    

V7NDS: Сервис поддержки склонений ФИО для 1С

Разработка внешних компонент Универсальные функции v8 1cv8.cf 1cv7.md Украина Россия Абонемент ($m)

Внешняя компонента для использования функций склонения по правилам, определенным в подключаемой библиотеке языковой поддержки. Пока таких библиотек две: для русского и украинского языков, количество функций в украинской сборке ограничено. Во всех случаях доступно склонение фамилии, имени и отчества (ФИО), заданных в именительном падеже в форму любого другого падежа (кроме звательного в украинском варианте). Независимо от версии библиотеки, компонента поддерживает тип данных "Справочник" (на вход функциям можно передавать элементы справочников).

27.02.2007    33157    18    NDeclin    87    

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

14.02.2015    99479    96    daMaster    88    

Рассылка счетов, актов и счетов-фактур для БП 3.0 Промо

Email Оптовая торговля Производство готовой продукции (работ, услуг) Оптовая торговля Производство готовой продукции (работ, услуг) v8 БП3.0 БУ Абонемент ($m)

Еще одна рассылка, теперь для Бухгалтерии 3.0. Использует встроенные учетные записи и почтовые механизмы. Файлы для отправки формируются только из заданных внешних печатных форм, перед отправкой документы сохраняются в PDF.

1 стартмани

16.02.2014    27367    185    @Sonya    36