Для использования электронной почты в обмене данными нужно в настройках узлов выбрать «Обмен по электронной почте». Для двух узлов, участвующих в обмене, публичный адрес обмена должен быть одинаков. В качестве иллюстрации использования электронной почты был выбран план обмена УдаленныеСклады.
При выгрузке данных формируется файл с именем, в котором указывается отправляющий и принимающий узлы, а также порядковый номер сообщения обмена. Это имя также указывается в теме электронного письма с префиксом «СООБЩЕНИЕ_ОБМЕНА».
// Формируем сообщение обмена Сообщение = Новый ИнтернетПочтовоеСообщение; Сообщение.Тема = "СООБЩЕНИЕ_ОБМЕНА: " + ИмяФайлаСообщения;
Сформированный файл прикрепляется к письму и отправляется на указанный в поле «Адрес обмена» адрес.
ФайлСообщения = Новый Файл(ИмяФайлаСообщения); // Создаем вложение с файлом обмена Сообщение.Вложения.Добавить(ИмяФайла, ФайлСообщения.Имя); Почта = Новый ИнтернетПочта; Попытка Почта.Подключиться(Профиль); // Отправляем сообщение с файлом обмена Почта.Послать(Сообщение); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Почта.Отключиться();
Для приема сообщений обмена из почтового ящика выбираются все письма без удаления их с сервера.
// Получаем все сообщения из почтового ящика МассивСообщений = Почта.Выбрать(Ложь); // Ложь = без удаления сообщений с сервера
Далее, по теме письма ищутся письма с префиксом «СООБЩЕНИЕ_ОБМЕНА», которые проверяются на принадлежность этого сообщения участвующих в обмене узлов. Все эти сообщения копируются в отдельный массив (МассивСообщенийОбмена) для последующего удаления их с сервера. Данный метод гарантирует сохранность личных писем, а также сообщений обмена относящихся к другим узлам, что позволяет использовать один и тот же почтовый ящик, как для личной переписки, так и для обмена данными с разными узлами.
Поскольку сообщений обмена для двух узлов может быть больше одного, сразу же ищется сообщение с максимальным порядковым номером. Затем файл обмена сохраняется из вложения во временный файл, откуда и происходит загрузка данных. Делается допущение, что в сообщении обмена одно вложение.
// Записываем файл обмена во временный файл МассивСообщений[ИндексСообщения].Вложения[0].Данные.Записать(ИмяФайла); // Удаляем все сообщения обмена с сервера для узлов, участвующих в обмене Почта.УдалитьСообщения(МассивСообщенийОбмена); Почта.Отключиться();
Перед загрузкой данных происходит выборочное удаление отобранных писем с сервера.