Использование электронной почты для обмена данными

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

При выгрузке данных формируется файл с именем, в котором указывается отправляющий и принимающий узлы, а также порядковый номер сообщения обмена. Это имя также указывается в теме электронного письма с префиксом "СООБЩЕНИЕ_ОБМЕНА".

Копировать в буфер обмена
// Формируем сообщение обмена
Сообщение = Новый ИнтернетПочтовоеСообщение; 
Сообщение.Тема = "СООБЩЕНИЕ_ОБМЕНА: " + ИмяФайлаСообщения;

Сформированный файл прикрепляется к письму и отправляется на указанный в поле "Адрес обмена" адрес.

Копировать в буфер обмена
ФайлСообщения = Новый Файл(ИмяФайлаСообщения);

// Создаем вложение с файлом обмена
Сообщение.Вложения.Добавить(ИмяФайла, ФайлСообщения.Имя);

Почта = Новый ИнтернетПочта;

Попытка

	Почта.Подключиться(Профиль);
	// Отправляем сообщение с файлом обмена
	Почта.Послать(Сообщение);

Исключение

	Сообщить(ОписаниеОшибки());

КонецПопытки;

Почта.Отключиться();

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

Копировать в буфер обмена
// Получаем все сообщения из почтового ящика
МассивСообщений = Почта.Выбрать(Ложь); // Ложь = без удаления сообщений с сервера

Далее, по теме письма ищутся письма с префиксом "СООБЩЕНИЕ_ОБМЕНА", которые проверяются на принадлежность этого сообщения участвующих в обмене узлов. Все эти сообщения копируются в отдельный массив (МассивСообщенийОбмена) для последующего удаления их с сервера. Данный метод гарантирует сохранность личных писем, а также сообщений обмена относящихся к другим узлам, что позволяет использовать один и тот же почтовый ящик, как для личной переписки, так и для обмена данными с разными узлами.

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

Копировать в буфер обмена
// Записываем файл обмена во временный файл
МассивСообщений[ИндексСообщения].Вложения[0].Данные.Записать(ИмяФайла);

// Удаляем все сообщения обмена с сервера для узлов, участвующих в обмене
Почта.УдалитьСообщения(МассивСообщенийОбмена);
Почта.Отключиться();

Перед загрузкой данных происходит выборочное удаление отобранных писем с сервера.

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