Руководство администратора

  1. Главная
  2. Документы
  3. Руководство администратора
  4. Администрирование конфигурации
  5. Почтовый сервер

Почтовый сервер

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

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

Почта — предоставляет доступ к почте через встроенный почтовый клиент, работает по технологии 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 2010 система безопасности срабатывает не только при попытке получить адрес отправителя письма, но даже при попытке получить его текст. В действительности защита выражается в показываемом пользователю окне системы безопасности при обращении к некоторым объектам и свойствам объектов 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»).

Был ли данный материал полезен вам? Да Нет