У разработчиков на платформе 1С иногда возникает задача по взаимодействию системы 1С: Предприятие с различными почтовыми программами и протоколами.
1С Предприятие 8.0 имеет довольно удобные средства для отправки сообщений, импорта писем из почтового клиента в справочник или другой объект конфигурации,
работы с MAPI, SMTP или POP3.

При работе с почтой разделяют два способа доступа к почтовому ящику, почтовому клиенту:

объект "Почта" и объект "Интернет почта", каждый из объектов имеет свои достоинства.

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

Интернет почта - объект открывает возможности по доступу непосредственно к почтовым ящикам и учетным записям находящимися на почтовом сервере,
использование и работа данного объекта не зависит от установленных в системе почтовых клиентов, даже если почтовый клиент установлен в системе "ИнтернетПочта" будет работать параллельно с ним, объект использует интернет-протоколы SMTP, POP3.

1.Получение сообщений объектом "Почта".

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

Для подключения к почтовому клиенту у объекта есть метод "Подключиться".

Почта = Новый Почта;
Почта.Подключиться(,);

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

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

Второй параметр отвечает за пароль к учетной записи.

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

//Выбираем все письма, со всеми вложениями.
Сообщения = Почта.Выбрать(Ложь,Ложь);

(иногда при взаимодействии с Outlook 2003 возникает проблема, при которой 1С 8 просто аварийно завершает работу с ошибкой, именно на данной строке кода, 
это лечится установкой пакета обновления SP2 для MS
Office 2003).

Далее после выборки сообщений необходимо перебрать их в цикле и сохранить, на форме необходимо добавить ТабличноеПоле1 куда будут сохраняться входящие письма.

Для каждого Сообщение Из Сообщения Цикл
//
Добавляем строку в табличную часть
СтрокаТП = ТабличноеПоле1.Добавить();

// Перебираем коллекцию получателей сообщения
Для каждого Получатель Из Письмо.Получатели Цикл
Получатели = Получатели + Получатель.Пользователь + " <" + Получатель.Адрес + "> ";
КонецЦикла; 

СтрокаТП.Кому = Получатели;
Попытка
СтрокаТП.ОтКого= Сообщение.Отправитель.Адрес;
Исключение
СтрокаТП.ОтКого= Сообщение.Отправитель;
КонецПопытки;

СтрокаТП.Тема = Сообщение.Тема;
СтрокаТП.Текст = Сообщение.Текст;
СтрокаТП.Дата = Сообщение.ДатаПолучения;

// Перебираем вложения письма
Для каждого Вложение Из Сообщение.Вложения Цикл
Вложение.Данные.Записать(Вложение.Наименование); 
//
Запоминаем имена вложение прикрепленных к данному письму, и сохраним в ТабличноеПоле1
Влож=Влож+Вложение.Наименование+",";
КонецЦикла;

СтрокаТП.ПутьВложения=Влож;
КонецЦикла; 

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

Все реквизиты входящих писем сохраняются в соответствующие поля
табличного поля, вложения сохраняются в каталог временных файлов, а имена вложений в реквизит табличного поля.
Для более удобного хранения вложений писем, 1С 8 имеет тип "Хранилище значения", который позволяет хранить двоичные данные, далее при получении сообщений объектом ИнтернетПочта рассмотрим возможность хранения в "Хранилище значения".

2.Отправка сообщений объектом "Почта"

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

Сообщение = Новый ПочтовоеСообщение;
Сообщение.Текст = "текст сообщения";
Сообщение.Отправитель = "petya@pupkin.com";
Сообщение.Тема ="Тема сообщения";
Сообщение.Получатели.Добавить("vasya@pupkin.com");
Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("C:\file.jpg"),"file.jpg");

Почта = Новый Почта;

//подключаемся без параметров, к клиенту установленному по умолчанию в системе
Почта.Подключиться(,);

Попытка
//
Пытаемся послать письмо
Почта.Послать(Сообщение,Истина);
Исключение
Сообщить(ОписаниеОшибки()); 
Возврат;
КонецПопытки; 

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

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

В MS Outlook встроена защита от несанкционированного доступа к адресной книге и базе почтовых сообщений, и защита от несанкционированной отправки электронных писем через службы
Outlook. В Outlook 2003 система безопасности срабатывает не только при попытке получить адрес отправителя письма, но даже при попытке получить его текст.
В действительности защита выражается в показываемом пользователю окне системы безопасности при обращении к некоторым объектам и свойствам объектов Outlook и предлагает открыть доступ на определенное время: 

следует разрешить доступ.

3.Получение сообщений объектом "ИнтернетПочта".

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

Функция ПолучитьПрофиль()

Профиль = Новый ИнтернетПочтовыйПрофиль;

// SMTP сервер
Профиль.АдресСервераSMTP = "smtp.pupkin.com";

// Порт SMTP сервера
Профиль.ПортSMTP = 25;

// POP3 сервер
Профиль.АдресСервераPOP3 = "pop.pupkin.com";

// Порт POP3 сервера
Профиль.ПортPOP3 = 110;

// Пароль к почтовому ящику
Профиль.Пароль = "pass";

// Пароль пользователя для SMTP сервера
Профиль.ПарольSMTP = "pass";

// Логин пользователя
Профиль.Пользователь = "vasya";

// Логин пользователя для SMTP сервера
Профиль.ПользовательSMTP = "vasya";

// Время ожидания выполнения операции в секундах

Профиль.ВремяОжидания = 50; 
Возврат Профиль;

КонецФункции

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

Попытка
Почта.Подключиться(ПолучитьПрофиль());
Исключение
Сообщить(ОписаниеОшибки()); 
Возврат;
КонецПопытки;

Заголовки=Почта.ПолучитьЗаголовки()
Если Заголовки.Количество()=0 Тогда
Предупреждение("В почтовом ящике нет входящих сообщений!", ,"Нет сообщений");
КонецЕсли;

// Загрузка сообщений в массив
Сообщения = Почта.Выбрать(Истина,Заголовки);

Для каждого Сообщение Из Сообщения Цикл
СтрокаТП = ТабличноеПолеИнтернетПочта.Добавить();
СтрокаТП.Дата = Сообщение.ДатаОтправления;
СтрокаТП.ОтКого = Сообщение.Отправитель.Пользователь + " <" + Сообщение.Отправитель.Адрес + "> ";
СтрокаТП.Тема = Сообщение.Тема;

// Перебираем получателей сообщения
Для каждого Получатель Из Сообщение.Получатели Цикл
КомуВходящие = КомуВходящие + Получатель.Пользователь + " <" + Получатель.Адрес + "> ";
КонецЦикла; 
СтрокаТП.Кому = КомуВходящие;

// Перебираем тексты сообщения
Для каждого ТекстСообщения Из Сообщение.Тексты Цикл
ТекстВходящие = ТекстВходящие + ТекстСообщения.Текст;
КонецЦикла; 
СтрокаТП.Текст = ТекстВходящие;

// Перебираем вложения письма
Для каждого Вложение Из Сообщение.Вложения Цикл
Вложение.Данные.Записать(Вложение.Name);
СправочникВложения.РеквизитВложение = новый ХранилищеЗначения(Новый ДвоичныеДанные(Вложение.Name));
СправочникВложения.ИмяВложения=Вложение.Name;
КонецЦикла;
КонецЦикла; 

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

Метод Почта.Выбрать(Истина,Заголовки); имеет два параметра, первый отвечает за удаление писем с сервера (при Истина-удалять),
второй параметр отвечает за массив сообщений для выборки (т.е. закачки на компьютер клиента с сервера), если параметр пуст, то выбираются все сообщения находящиеся на сервере.

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

4.Отправка сообщений объектом "ИнтернетПочта".

При отправке сообщения используется Функция ПолучитьПрофиль().

Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(ПолучитьПрофиль());
Исключение
Сообщить(ОписаниеОшибки()); 
Возврат;
КонецПопытки;
Сообщение = Новый ИнтернетПочтовоеСообщение;

Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("C:\file.jpg"),"file.jpg");

Сообщение.Отправитель = "vasya@pupkin.com";
Сообщение.ИмяОтправителя = "Вася";
ПочтовыеАдреса = Сообщение.Получатели;
ПочтовыйАдрес = ПочтовыеАдреса.Добавить();
ПочтовыйАдрес.Адрес = "petya@pupkin.com";
Сообщение.Тема ="Тема сообщения"; 

ИнтернетТекстПочтовогоСообщения = Сообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.Текст = "Текст сообщения";
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;

Попытка
//
Пытаемся послать письмо
Почта.Послать(Сообщение);
Исключение
Сообщить(ОписаниеОшибки()); 
Возврат;
КонецПопытки;
//
отключение
Почта.Отключиться();

Удобно подключить автополучение/автоотправку почты командой "ПодключитьОбработчикОжидания(,)".
Первый параметр в команде отвечает за наименование вызываемой процедуры, и второй, период ожидания процедуры в секундах,
обычно обработчик ожидания вставляется в глобальный модуль системы (например, в процедуру ПриНачалеРаботыСистемы()) и указывает на процедуру с пометкой Экспорт.

Например, можно создать процедуру ПроверитьПочту, в которую вставить загрузку писем из почтового ящика и вставить ее в следующую строку:

ПодключитьОбработчикОжидания("ПроверитьПочту",60)

Также для обработки и просмотра сообщений в формате
HTML удобно пользоваться компонентом "Поле HTML документа",
для загрузки HTML текста в компонент используется метод ПолеHTMLдокумента.УстановитьТекст(Html), где Html-это документа полученный из 
текста сообщения. Есть вариант загрузки HTML с диска (если это вложение), ПолеHTMLдокумента.Перейти("file:\\C:\File.html").

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

Желаю успехов в освоении и использовании.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии