Множество примеров работы с почтой и в конце теоретические основы.

{codecitation style="brush: xml;"}
Почта = Новый Почта;
Почта.Подключиться();
Письмо = Новый ПочтовоеСообщение;
Письмо.Получатели.Добавить("хххх@хххх.хх");
Письмо.Тема = "Автоматическое";
Письмо.Текст = "АААА";
Письмо.Вложения.Добавить("C:\test1.txt");
Почта.Послать(Письмо);
Почта.Отключиться();
{/codecitation}

{codecitation style="brush: xml;"}

Функция ПроверитьПочту()Экспорт
// Формирование почтового профиля.
// При получении нет необходимости указывать настройки, связанные с SMTP сервером.
СостояниеПриема = "Подключение к серверу";
ИПП = Новый ИнтернетПочтовыйПрофиль;
ИПП.АдресСервераPOP3 = "";
ИПП.ВремяОжидания = 60;
ИПП.Пароль = "";
ИПП.Пользователь = "";
ИПП.ПортPOP3 = 110;
Позиция=0;
Соединение = Новый ИнтернетПочта;
Попытка
Соединение.Подключиться(ИПП);
Исключение
Сообщить("Ошибка подключения к почте",СтатусСообщения.Важное);
Возврат(0);
КонецПопытки;
СостояниеПриема = "Получение выборки писем";
Выборка = Соединение.Выбрать(Константы.ЗабиратьССервера.Получить());
СостояниеПриема = "Создание документов - писем";
КоличествоВВыборке = Выборка.Количество();
Индекс = 1;
Для Каждого Письмо Из Выборка Цикл
Сообщить("Отправитель - "+Письмо.ИмяОтправителя);
Сообщить("Тема - "+Письмо.Тема);
Сообщить("Дата отправления - "+Письмо.ДатаОтправления);
Сообщить("Дата получения - "+Письмо.ДатаПолучения);
Для Каждого Вложение Из Письмо.Вложения Цикл
Вложение.Данные.Записать(Константы.ВременныйКаталог.Получить()+Вложение.Имя);
Сообщить("Записан файл - "+Вложение.Имя+" "+ТекущаяДата());
КонецЦикла;
КонецЦикла;
Если КоличествоВВыборке=0 тогда
Сообщить("Почтовый ящик пуст");
КонецЕсли;
Соединение.Отключиться();
КонецФункции

{/codecitation}

{codecitation style="brush: xml;"}
Функция ОтправитьПочту(Файл,ТипПодтверждения) Экспорт
// Сформировать почтовый профиль.
// При отправке нет необходимости указывать настройки, связанные с POP сервером.
Состояние("Подключение к почте...");
ИПП = Новый ИнтернетПочтовыйПрофиль;
ИПП.АдресСервераSMTP = "";
ИПП.ВремяОжидания = 60;
ИПП.Пароль = "";
ИПП.ПарольSMTP = "";
ИПП.Пользователь = "";
ИПП.ПользовательSMTP = "";
ИПП.ПортSMTP = 25;
//// Создать сообщение.
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("*****@mail.ru");
Сообщение.Отправитель.Адрес = "*****@mail.ru";
Сообщение.Тема = "Подтверждение "+ТипПодтверждения;
Сообщение.Тексты.Добавить("Подтверждение "+ТипПодтверждения);
Вложение = Новый ДвоичныеДанные(Файл);
Сообщение.Вложения.Добавить(Вложение,Файл.Имя);
// Подключиться и отправить.
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(ИПП);
Исключение
Сообщить("Ошибка подключения к почте",СтатусСообщения.Важное);
Возврат(0);
КонецПопытки;
Состояние("Отправка...");
Почта.Послать(Сообщение);
Почта.Отключиться();
КонецФункции
{/codecitation}

{codecitation style="brush: xml;"}
Попытка
ОтправитьПоПочте2(ТекСтрока); // работает с Батом
Исключение
Попытка
ОтправитьПоПочте1(ТекСтрока); // работает с Аутлуком, но переспрашивает при отправке
Исключение
Сообщить_и_записать("Ошибка при отправке почты - "+ОписаниеОшибки(),СтатусСообщения.Важное);
КонецПопытки;
КонецПопытки;

Процедура ОтправитьПоПочте1(ТекСтрока)
Почта = Новый Почта;
Сообщение = Новый ПочтовоеСообщение;
//Работает с Аутглуком, но переспрашивает при отправке
//не работает с Батом 3.60
Почта.Подключиться("Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.","password");

Сообщение.Вложения.Добавить(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
Сообщение.Получатели.Добавить(ТекСтрока.филиал.email);
Сообщение.Тема ="Проигнорированные документы в офисе. Письмо сгенерированно роботом";
Сообщение.Текст="Проверьте, будь ласка эти документы ПОСЛЕ получения обновления из офиса. Ваши изменения в этих документах не попали в базу. Откройте прикрепленный файл";
Почта.Послать(Сообщение);
Почта.Отключиться();
УдалитьФайлы(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
КонецПроцедуры           

Процедура ОтправитьПоПочте2(ТекСтрока)
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераPOP3   = "pop3.mysite.dp.ua";
ПочтовыйПрофиль.АдресСервераSMTP   = "smtp.mysite.dp.ua";
ПочтовыйПрофиль.ПортSMTP           = 25;
ПочтовыйПрофиль.ПортPOP3           = 110;
ПочтовыйПрофиль.Пользователь       = "name";
ПочтовыйПрофиль.Пароль             = "password";
ПочтовыйПрофиль.ВремяОжидания      = 60;

Сообщение = Новый ИнтернетПочтовоеСообщение ;
Сообщение.Вложения.Добавить(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
Сообщение.Получатели.Добавить(ТекСтрока.филиал.email);
Сообщение.Тема ="Проигнорированные документы в офисе. Письмо сгенерированно роботом";
Сообщение.ИмяОтправителя="Обмен";
Сообщение.Отправитель="Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.";

Текст = Сообщение.Тексты.Добавить("Проверьте, будь ласка эти документы ПОСЛЕ получения обновления из офиса. Ваши изменения в этих документах не попали в базу. Откройте прикрепленный файл");
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;

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

{/codecitation}

{codecitation style="brush: xml;"}

Процедура КнопкаВыполнитьНажатие(Кнопка)
Почта = Новый ИнтернетПочта;

Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераPOP3 = "192.168.0.2";

Профиль.Пользователь = "romix";
Профиль.Пароль = "ТутНапишитеПароль";

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

МассивПисем = Почта.Выбрать(Ложь);

Для Каждого Письмо из МассивПисем Цикл
Сообщить("Получено письмо с заголовоком: "+Письмо.Тема);
Для Каждого Вложение из Письмо.Вложения Цикл
Сообщить("Вложение: "+Вложение.ИмяФайла);
Вложение.Данные.Записать("c:\tempdata\"+Вложение.ИмяФайла);
КонецЦикла;    
Для Каждого Текст из Письмо.Тексты Цикл
Сообщить("Текст: "+Текст.Текст);
Текст.Данные.Записать("c:\tempdata\ТекстСообщения.txt");
КонецЦикла;    
КонецЦикла;

КонецПроцедуры

{/codecitation}

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

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

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

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

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

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

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

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

//Выбираем все письма, со всеми вложениями.

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


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

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

Для каждого Сообщение Из Сообщения Цикл

//Добавляем строку в табличную часть

СтрокаТП = ТабличноеПоле1.Добавить();



// Перебираем коллекцию получателей сообщения

Для каждого Получатель Из Письмо.Получатели Цикл

Получатели = Получатели + Получатель.Пользователь + " <" + Получатель.Адрес + "> ";

КонецЦикла;



СтрокаТП.Кому = Получатели;

Попытка

СтрокаТП.ОтКого= Сообщение.Отправитель.Адрес;

Исключение

СтрокаТП.ОтКого= Сообщение.Отправитель;

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



СтрокаТП.Тема = Сообщение.Тема;

СтрокаТП.Текст = Сообщение.Текст;

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



// Перебираем вложения письма

Для каждого Вложение Из Сообщение.Вложения Цикл

Вложение.Данные.Записать(Вложение.Наименование);

//Запоминаем имена вложение прикрепленных к данному письму, и сохраним в ТабличноеПоле1

Влож=Влож+Вложение.Наименование+",";

КонецЦикла;



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

КонецЦикла;



//отключение

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

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

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

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

Сообщение = Новый ПочтовоеСообщение;

Сообщение.Текст = "текст сообщения";

Сообщение.Отправитель = "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.";

Сообщение.Тема ="Тема сообщения";

Сообщение.Получатели.Добавить("Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.");

Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("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");



Сообщение.Отправитель = "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.";

Сообщение.ИмяОтправителя = "Вася";

ПочтовыеАдреса = Сообщение.Получатели;

ПочтовыйАдрес = ПочтовыеАдреса.Добавить();

ПочтовыйАдрес.Адрес = "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.";

Сообщение.Тема ="Тема сообщения";



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

ИнтернетТекстПочтовогоСообщения.Текст = "Текст сообщения";

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



Попытка

// Пытаемся послать письмо

Почта.Послать(Сообщение);

Исключение

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

Возврат;

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

// отключение

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

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

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

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

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

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