1с как отправить письмо программно

Обновлено: 06.07.2024

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

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

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

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

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

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

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

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

//Выбираем все письма, со всеми вложениями.
Код 1C v 8.х

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

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

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

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

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

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


Если УдалитьСоединение <> Неопределено Тогда
ПараметрыОтправки . Вставить ( "Соединение" , УдалитьСоединение );
КонецЕсли;

Если Не ПустаяСтрока ( УдалитьПротоколПочты ) Тогда
ПараметрыОтправки . Вставить ( "ПротоколПочты" , УдалитьПротоколПочты );
КонецЕсли;

Если ТипЗнч ( УчетнаяЗапись ) <> Тип ( "СправочникСсылка.УчетныеЗаписиЭлектроннойПочты" )
Или НЕ ЗначениеЗаполнено ( УчетнаяЗапись ) Тогда
ВызватьИсключение НСтр ( "ru = 'Учетная запись не заполнена или заполнена неправильно.'" );
КонецЕсли;

Если ПараметрыОтправки = Неопределено Тогда
ВызватьИсключение НСтр ( "ru = 'Не заданы параметры отправки.'" );
КонецЕсли;

ТипЗнчКому = ?( ПараметрыОтправки . Свойство ( "Кому" ), ТипЗнч ( ПараметрыОтправки . Кому ), Неопределено);
ТипЗнчКопии = ?( ПараметрыОтправки . Свойство ( "Копии" ), ТипЗнч ( ПараметрыОтправки . Копии ), Неопределено);
СкрытыеКопии = ОбщегоНазначенияКлиентСервер . СвойствоСтруктуры ( ПараметрыОтправки , "СкрытыеКопии" );

Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И СкрытыеКопии = Неопределено Тогда
ВызватьИсключение НСтр ( "ru = 'Не указано ни одного получателя.'" );
КонецЕсли;

Если ТипЗнчКому = Тип ( "Строка" ) Тогда
ПараметрыОтправки . Кому = ОбщегоНазначенияКлиентСервер . РазобратьСтрокуСПочтовымиАдресами ( ПараметрыОтправки . Кому );
ИначеЕсли ТипЗнчКому <> Тип ( "Массив" ) Тогда
ПараметрыОтправки . Вставить ( "Кому" , Новый Массив );
КонецЕсли;

Если ТипЗнчКопии = Тип ( "Строка" ) Тогда
ПараметрыОтправки . Копии = ОбщегоНазначенияКлиентСервер . РазобратьСтрокуСПочтовымиАдресами ( ПараметрыОтправки . Копии );
ИначеЕсли ТипЗнчКопии <> Тип ( "Массив" ) Тогда
ПараметрыОтправки . Вставить ( "Копии" , Новый Массив );
КонецЕсли;

Если ТипЗнч ( СкрытыеКопии ) = Тип ( "Строка" ) Тогда
ПараметрыОтправки . СкрытыеКопии = ОбщегоНазначенияКлиентСервер . РазобратьСтрокуСПочтовымиАдресами ( СкрытыеКопии );
ИначеЕсли ТипЗнч ( СкрытыеКопии ) <> Тип ( "Массив" ) Тогда
ПараметрыОтправки . Вставить ( "СкрытыеКопии" , Новый Массив );
КонецЕсли;

Если ПараметрыОтправки . Свойство ( "АдресОтвета" ) И ТипЗнч ( ПараметрыОтправки . АдресОтвета ) = Тип ( "Строка" ) Тогда
ПараметрыОтправки . АдресОтвета = ОбщегоНазначенияКлиентСервер . РазобратьСтрокуСПочтовымиАдресами ( ПараметрыОтправки . АдресОтвета );
КонецЕсли;

Если ПараметрыОтправки . ОшибочныеПолучатели . Количество () > 0 Тогда
ТекстОшибки = НСтр ( "ru = 'Следующие почтовые адреса не были приняты почтовым сервером:'" );
Для Каждого ОшибочныйПолучатель Из ПараметрыОтправки . ОшибочныеПолучатели Цикл
ТекстОшибки = ТекстОшибки + Символы . ПС + СтроковыеФункцииКлиентСервер . ПодставитьПараметрыВСтроку ( "%1: %2" ,
ОшибочныйПолучатель . Ключ , ОшибочныйПолучатель . Значение );
КонецЦикла;
ВызватьИсключение ТекстОшибки ;
КонецЕсли;

Читайте также: