Встроенный почтовый клиент + отчет о доставке
По теме из базы знаний
- 1С:Управление металлургическим комбинатом 2. Модуль для 1С:ERP
- 1С:Хлебобулочное и кондитерское производство. Модуль для 1С:ERP и 1С:КА
- 1С:Управление строительной организацией. 1С:ERP Управление строительной организацией 2
- Автоматизация предприятий с проектным позаказным производством на 1С:ERP
- Использование типовых возможностей 1С и их расширение. Часть 2
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) SinglCOOLer,
Общий модуль УправлениеЭлектроннойПочтой
Процедура ПолучениеОтправкаПисем(****) Экспорт
Перед отправкой добавить:
ПочтовоеСообщение.УведомитьОДоставке = Истина;
ПочтовоеСообщение.УведомитьОПрочтении = Истина;
Это если примитивно, для всех писем, при условии что на стороне получателя данный функционал поддерживается и включён.
понять бы а какую сторону копать
Общий модуль УправлениеЭлектроннойПочтой
Процедура ПолучениеОтправкаПисем(****) Экспорт
Перед отправкой добавить:
ПочтовоеСообщение.УведомитьОДоставке = Истина;
ПочтовоеСообщение.УведомитьОПрочтении = Истина;
Это если примитивно, для всех писем, при условии что на стороне получателя данный функционал поддерживается и включён.
(8) SinglCOOLer,
у меня в почтовом клиенте (не 1с) есть настройка:
популярные почтовые сервера майл и яндекс принудительно отключают уведомление о доставке, чтобы спамеры не проверяли доступные адреса.
при условии что на стороне получателя данный функционал поддерживается и включён.
у меня в почтовом клиенте (не 1с) есть настройка:
Подтверждение прочтения: Никогда не отправлять подтверждение прочтения
популярные почтовые сервера майл и яндекс принудительно отключают уведомление о доставке, чтобы спамеры не проверяли доступные адреса.
(8) SinglCOOLer,
Добавил перед попыткой
на внутреннем почтовом сервере подтверждение о прочтении приходит (Если его включить в почтовом клиенте (не 1с))
Добавил перед попыткой
*************************
ПочтовоеСообщение.УведомитьОДоставке = Истина;
ПочтовоеСообщение.УведомитьОПрочтении = Истина;
ПочтовоеСообщение.АдресаУведомленияОДоставке.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
ПочтовоеСообщение.АдресаУведомленияОПрочтении.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
Попытка
ИнтернетПочта.Послать(ПочтовоеСообщение);
Если (Письма <> Неопределено) И (Письма.Получить(Письмо) <> Неопределено) Тогда
**********************
Показатьна внутреннем почтовом сервере подтверждение о прочтении приходит (Если его включить в почтовом клиенте (не 1с))
Прикрепленные файлы:
(16) подробности не помню. Но добавил на форму электронного письма 2 галки.
И расширил типовую процедуру:
Походу самое главное это вот это:
И расширил типовую процедуру:
// Процедура осуществляет транспорт писем
//
// Параметры
// СоответствиеТекстовЭлектронныхПисем - Соответствие, текстов писем и ДокументСсылка.ЭлектронноеПисьмо
// ТекущийПользователь - СправочникСсылка.Пользователи, Текущий пользователь системы
// МассивУчетныхЗаписей - Массив, учетные записи по которым необходимо осуществить транспорт
// МассивПисем - Массив, документы ЭлектронноеПисьмо, которые необходимо отправить
// Отправить - Булево, действие "отправить письма"
// Получить - Булево, действие "получить письма"
// ПоказыватьОкноВыполнения - Булево, показывать окно выполнения получения/отправки писем
// УведомитьОДоставке - Булево, почтовый сервер получателя при получении письма может ответить письмом о доставке (Важно! Работает не везде)
// УведомитьОПрочтении - Булево, получатель может оповестить отправителя о прочтении письма (Важно! Работает не везде)
//
// Возвращаемое значение:
// НЕТ
//
Процедура ПолучениеОтправкаПисем(СоответствиеТекстовЭлектронныхПисем, ТекущийПользователь, МассивУчетныхЗаписей = Неопределено,
Письма = Неопределено, Отправить = Ложь, Получить = Ложь, ПоказыватьОкноВыполнения = Истина, ТекстОшибок = "",
УведомитьОДоставке = Ложь, УведомитьОПрочтении = Ложь) Экспорт
Перем мРазделительАдресов;
Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
Сообщить("В настройках учета не установлено использование встроенного почтового клиента. Действие отправка/получение писем не выполнено.");
Отказ = Истина;
Возврат;
КонецЕсли;
мРазделительАдресов = ",";
СписокДоступныхУчетныхЗаписей = ПолучитьДоступныеУчетныеЗаписи(ТекущийПользователь).Запись;
ТекстОшибок = "";
Если ТипЗнч(Письма) = Тип("Соответствие") Тогда
МассивПисем = Новый Массив;
Для каждого ЭлементСоотсетствия Из Письма Цикл
МассивПисем.Добавить(ЭлементСоотсетствия.Ключ);
КонецЦикла;
КонецЕсли;
// Получим сответствие всех учетных записей, по которым надо производить действия отправки и получения
СоответствиеУчетныхЗаписейВсего = Новый Соответствие;
Если Отправить Тогда
Запрос = Новый Запрос;
// Дерево на отправку
Если Письма = Неопределено И МассивУчетныхЗаписей = Неопределено Тогда
Запрос.УстановитьПараметр("Исходящее", Перечисления.СтатусыПисем.Исходящее);
Запрос.УстановитьПараметр("СписокВладельцев", СписокДоступныхУчетныхЗаписей);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЭлектронноеПисьмо.УчетнаяЗапись КАК УчетнаяЗапись,
| ЭлектронноеПисьмо.Ссылка КАК Письмо
|ИЗ
| Документ.ЭлектронноеПисьмо КАК ЭлектронноеПисьмо
|ГДЕ
| ЭлектронноеПисьмо.СтатусПисьма = &Исходящее
| И ЭлектронноеПисьмо.УчетнаяЗапись В(&СписокВладельцев)
| И Не ЭлектронноеПисьмо.ПометкаУдаления
|ИТОГИ ПО
| УчетнаяЗапись";
ДеревоУчетныхЗаписейИПисем = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ИначеЕсли ТипЗнч(МассивПисем) = Тип("Массив") И МассивУчетныхЗаписей = Неопределено Тогда
Запрос.УстановитьПараметр("Исходящее" , Перечисления.СтатусыПисем.Исходящее);
Запрос.УстановитьПараметр("СписокВладельцев", СписокДоступныхУчетныхЗаписей);
Запрос.УстановитьПараметр("СписокПисем" , МассивПисем);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЭлектронноеПисьмо.УчетнаяЗапись КАК УчетнаяЗапись,
| ЭлектронноеПисьмо.Ссылка КАК Письмо
|ИЗ
| Документ.ЭлектронноеПисьмо КАК ЭлектронноеПисьмо
|ГДЕ
| ЭлектронноеПисьмо.СтатусПисьма = &Исходящее
| И ЭлектронноеПисьмо.Ссылка В(&СписокПисем)
| И ЭлектронноеПисьмо.УчетнаяЗапись В(&СписокВладельцев)
|ИТОГИ ПО
| УчетнаяЗапись";
ДеревоУчетныхЗаписейИПисем = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ИначеЕсли МассивПисем = Неопределено И ТипЗнч(МассивУчетныхЗаписей) = Тип("Массив") Тогда
Запрос.УстановитьПараметр("Исходящее", Перечисления.СтатусыПисем.Исходящее);
Запрос.УстановитьПараметр("СписокВладельцев", СписокДоступныхУчетныхЗаписей);
Запрос.УстановитьПараметр("СписокВладельцевМассив", МассивУчетныхЗаписей);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЭлектронноеПисьмо.УчетнаяЗапись КАК УчетнаяЗапись,
| ЭлектронноеПисьмо.Ссылка КАК Письмо
|ИЗ
| Документ.ЭлектронноеПисьмо КАК ЭлектронноеПисьмо
|ГДЕ
| ЭлектронноеПисьмо.СтатусПисьма = &Исходящее
| И ЭлектронноеПисьмо.УчетнаяЗапись В(&СписокВладельцевМассив)
| И ЭлектронноеПисьмо.УчетнаяЗапись В(&СписокВладельцев)
| И Не ЭлектронноеПисьмо.ПометкаУдаления
|ИТОГИ ПО
| УчетнаяЗапись";
ДеревоУчетныхЗаписейИПисем = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ИначеЕсли ТипЗнч(МассивПисем) = Тип("Массив") И ТипЗнч(МассивУчетныхЗаписей) = Тип("Массив") Тогда
Запрос.УстановитьПараметр("Исходящее" , Перечисления.СтатусыПисем.Исходящее);
Запрос.УстановитьПараметр("СписокПисем" , МассивПисем);
Запрос.УстановитьПараметр("СписокВладельцев" , СписокДоступныхУчетныхЗаписей);
Запрос.УстановитьПараметр("СписокВладельцевМассив", МассивУчетныхЗаписей);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЭлектронноеПисьмо.УчетнаяЗапись КАК УчетнаяЗапись,
| ЭлектронноеПисьмо.Ссылка КАК Письмо
|ИЗ
| Документ.ЭлектронноеПисьмо КАК ЭлектронноеПисьмо
|ГДЕ
| ЭлектронноеПисьмо.СтатусПисьма = &Исходящее
| И ЭлектронноеПисьмо.Ссылка В(&СписокПисем)
| И ЭлектронноеПисьмо.УчетнаяЗапись В(&СписокВладельцевМассив)
| И ЭлектронноеПисьмо.УчетнаяЗапись В(&СписокВладельцев)
|ИТОГИ ПО
| УчетнаяЗапись";
ДеревоУчетныхЗаписейИПисем = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Иначе
Возврат;
КонецЕсли;
МассивУчетныхЗаписейОтправка = ДеревоУчетныхЗаписейИПисем.Строки.ВыгрузитьКолонку("УчетнаяЗапись");
Для каждого ЭлементМассива Из МассивУчетныхЗаписейОтправка Цикл
СоответствиеУчетныхЗаписейВсего.Вставить(ЭлементМассива, ЭлементМассива);
КонецЦикла;
КонецЕсли;
Если Получить Тогда
// Заполним массив учетных записей на получение писем
Если ТипЗнч(МассивУчетныхЗаписей) = Тип("Массив") Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокВладельцев", СписокДоступныхУчетныхЗаписей);
Запрос.УстановитьПараметр("СписокВладельцевМассив", МассивУчетныхЗаписей);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
| УчетныеЗаписиЭлектроннойПочты.Ссылка В(&СписокВладельцевМассив)
| И УчетныеЗаписиЭлектроннойПочты.Ссылка В(&СписокВладельцев)";
МассивУчетныхЗаписейПолучение = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("УчетнаяЗапись");
ИначеЕсли МассивУчетныхЗаписей = Неопределено Тогда
МассивУчетныхЗаписейПолучение = СписокДоступныхУчетныхЗаписей.ВыгрузитьЗначения();
Иначе
Возврат;
КонецЕсли;
Для каждого ЭлементМассива Из МассивУчетныхЗаписейПолучение Цикл
СоответствиеУчетныхЗаписейВсего.Вставить(ЭлементМассива, ЭлементМассива);
КонецЦикла;
КонецЕсли;
// Определим те учетные записи, которые были заявлены во входящих параметрах
// и проверим их на возможность отправки, что бы пользователю было понятно
// почему некоторые письма не отправились
СоответствиеЗаявленныхУчетныхЗаписей = Новый Соответствие;
Если ТипЗнч(МассивПисем) = Тип("Массив") Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Исходящее" , Перечисления.СтатусыПисем.Исходящее);
Запрос.УстановитьПараметр("СписокПисем" , МассивПисем);
Запрос.УстановитьПараметр("СписокВладельцев" , СписокДоступныхУчетныхЗаписей);
Запрос.УстановитьПараметр("СписокВладельцевМассив", МассивУчетныхЗаписей);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ЭлектронноеПисьмо.УчетнаяЗапись КАК УчетнаяЗапись
|ИЗ
| Документ.ЭлектронноеПисьмо КАК ЭлектронноеПисьмо
|ГДЕ
| ЭлектронноеПисьмо.Ссылка В(&СписокПисем)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СоответствиеЗаявленныхУчетныхЗаписей.Вставить(Выборка.УчетнаяЗапись, Выборка.УчетнаяЗапись);
КонецЦикла;
КонецЕсли;
Если ТипЗнч(МассивУчетныхЗаписей) = Тип("Массив") Тогда
Для каждого ЭлементМассива Из МассивУчетныхЗаписей Цикл
СоответствиеЗаявленныхУчетныхЗаписей.Вставить(ЭлементМассива, ЭлементМассива);
КонецЦикла;
КонецЕсли;
#Если Клиент Тогда
// Пора показывать форму состояния отпарвки/получения
ФормаПрогрессора = ПолучитьОбщуюФорму("ФормаИндикацииПроцессаПолученияОтправкиПисемЭлектроннойПочт ы",,"УникальнаяФорма");
ФормаПрогрессора.Задачи.Индексы.Добавить("Объект");
ФормаПрогрессора.Задачи.Очистить();
Если ПоказыватьОкноВыполнения Тогда
// Выведем те учетные записи, которые не прошли по заявленным
Для каждого ЭлементСоответствия Из СоответствиеЗаявленныхУчетныхЗаписей Цикл
Если СписокДоступныхУчетныхЗаписей.НайтиПоЗначению(ЭлементСоответствия.Ключ) = Неопределено Тогда
ТекстОшибок = Символы.ПС + ТекстОшибок + ("Заявлена " + ЭлементСоответствия.Значение.Наименование + " <" + ЭлементСоответствия.Значение.АдресЭлектроннойПочты + ">" + " - нет прав доступа для записи электронных писем.");
НоваяЗадача = ФормаПрогрессора.Задачи.Добавить();
НоваяЗадача.Объект = ЭлементСоответствия.Ключ;
НоваяЗадача.Состояние = Перечисления.СостоянияСобытий.Отменено;
Если Отправить И Получить Тогда
НоваяЗадача.Задача = "Отправка и получение";
ИначеЕсли Отправить Тогда
НоваяЗадача.Задача = "Отправка";
ИначеЕсли Получить Тогда
НоваяЗадача.Задача = "Получение";
КонецЕсли;
Продолжить;
КонецЕсли;
Если СоответствиеУчетныхЗаписейВсего.Получить(ЭлементСоответствия.Ключ) = Неопределено Тогда
НоваяЗадача = ФормаПрогрессора.Задачи.Добавить();
НоваяЗадача.Объект = ЭлементСоответствия.Ключ;
НоваяЗадача.Состояние = Перечисления.СостоянияСобытий.Завершено;
Если Отправить И Получить Тогда
НоваяЗадача.Задача = "Отправка и получение";
ИначеЕсли Отправить Тогда
НоваяЗадача.Задача = "Отправка";
ИначеЕсли Получить Тогда
НоваяЗадача.Задача = "Получение";
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Покажем в таблице значений учетные записи, по которым нет писем, но они должны обрабатываться, как обработанные
Если МассивУчетныхЗаписей = Неопределено Тогда
Для каждого ЭлементСписка Из СписокДоступныхУчетныхЗаписей Цикл
Если СоответствиеУчетныхЗаписейВсего.Получить(ЭлементСписка.Значение) = Неопределено И ФормаПрогрессора.Задачи.Найти(ЭлементСписка.Значение, "Объект") = Неопределено Тогда
НоваяЗадача = ФормаПрогрессора.Задачи.Добавить();
НоваяЗадача.Объект = ЭлементСписка.Значение;
НоваяЗадача.Состояние = Перечисления.СостоянияСобытий.Завершено;
Если Отправить И Получить Тогда
НоваяЗадача.Задача = "Отправка и получение";
ИначеЕсли Отправить Тогда
НоваяЗадача.Задача = "Отправка";
ИначеЕсли Получить Тогда
НоваяЗадача.Задача = "Получение";
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ФормаПрогрессора.Ошибки = "";
ФормаПрогрессора.КомментарийОбработкиДанных = "Получение и отправка писем электронной почты";
#КонецЕсли
Если СоответствиеУчетныхЗаписейВсего.Количество() > 0 Тогда
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
Для каждого ЭлементСоответствия Из СоответствиеУчетныхЗаписейВсего Цикл
НоваяЗадача = ФормаПрогрессора.Задачи.Добавить();
НоваяЗадача.Объект = ЭлементСоответствия.Ключ;
НоваяЗадача.Состояние = Перечисления.СостоянияСобытий.Запланировано;
Если Отправить И Получить Тогда
НоваяЗадача.Задача = "Отправка и получение";
ИначеЕсли Отправить Тогда
НоваяЗадача.Задача = "Отправка";
ИначеЕсли Получить Тогда
НоваяЗадача.Задача = "Получение";
КонецЕсли;
КонецЦикла;
ФормаПрогрессора.Открыть();
КонецЕсли;
#КонецЕсли
Для каждого ЭлементСоответствия Из СоответствиеУчетныхЗаписейВсего Цикл
УчетнаяЗапись = ЭлементСоответствия.Значение;
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
СтрокаТаблицыСостояния = ФормаПрогрессора.Задачи.Найти(УчетнаяЗапись, "Объект");
КонецЕсли;
ФормаПрогрессора.Значение = 0;
ФормаПрогрессора.КомментарийЗначения = "Подключение к " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
#КонецЕсли
// Пробуем подключиться
Профиль = ПолучитьИнтернетПочтовыйПрофиль(УчетнаяЗапись);
ИнтернетПочта = Новый ИнтернетПочта;
Попытка
ИнтернетПочта.Подключиться(Профиль);
Исключение
ТекстОшибок = Символы.ПС + ТекстОшибок + (Строка(УчетнаяЗапись) + ". " + ОписаниеОшибки());
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
СтрокаТаблицыСостояния.Состояние = Перечисления.СостоянияСобытий.Отменено;
КонецЕсли;
#КонецЕсли
Продолжить;
КонецПопытки;
// Сначала проверим отправку
Если Отправить Тогда
#Если Клиент Тогда
ФормаПрогрессора.КомментарийЗначения = "Отправка сообщений " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
#КонецЕсли
Если ТипЗнч(ДеревоУчетныхЗаписейИПисем) = Тип("ДеревоЗначений") Тогда
СтрокаДереваУчетнойЗаписи = ДеревоУчетныхЗаписейИПисем.Строки.Найти(УчетнаяЗапись, "УчетнаяЗапись");
Если СтрокаДереваУчетнойЗаписи <> Неопределено Тогда
#Если Клиент Тогда
ФормаПрогрессора.МаксимальноеЗначение = СтрокаДереваУчетнойЗаписи.Строки.Количество();
ФормаПрогрессора.Значение = 0;
#КонецЕсли
Для каждого СтрокаПисьма Из СтрокаДереваУчетнойЗаписи.Строки Цикл
#Если Клиент Тогда
ФормаПрогрессора.Значение = СтрокаДереваУчетнойЗаписи.Строки.Индекс(СтрокаПисьма) + 1;
Если ЗначениеЗаполнено(СтрокаПисьма.Письмо.ИмяФайлаРедактированияХТМЛТекста) Тогда
Сообщить("У письма " + СокрЛП(СтрокаПисьма.Письмо) + " не закончено редактирование текста внешним HTML редактором. Письмо не отправлено.");
Продолжить;
КонецЕсли;
#КонецЕсли
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
Письмо = СтрокаПисьма.Письмо;
Если ЗначениеЗаполнено(Письмо.КодировкаПисьма) Тогда
КодировкаСообщения = Письмо.КодировкаПисьма;
Иначе
КодировкаСообщения = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекущийПользователь, "КодировкаПисьмаЭлектроннойПочтыПоУмолчанию");
Если Не ЗначениеЗаполнено(КодировкаСообщения) Тогда
КодировкаСообщения = "utf-8";
КонецЕсли;
КонецЕсли;
ПочтовоеСообщение.Кодировка = КодировкаСообщения;
// Вложения
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВыбОбъект", Письмо);
Запрос.УстановитьПараметр("ПустаяСтрока", "");
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВложенияЭлектронныхПисем.Ссылка КАК Ссылка,
| ВложенияЭлектронныхПисем.Наименование КАК Наименование,
| ВложенияЭлектронныхПисем.ИмяФайла КАК ИмяФайла,
| ВложенияЭлектронныхПисем.Хранилище КАК ХранилищеЗначения
|ИЗ
| Справочник.ВложенияЭлектронныхПисем КАК ВложенияЭлектронныхПисем
|ГДЕ
| ВложенияЭлектронныхПисем.Объект = &ВыбОбъект
| И ВложенияЭлектронныхПисем.ИДФайлаПочтовогоПисьма = &ПустаяСтрока";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИмяФайла = "";
Если НЕ ПустаяСтрока(Выборка.ИмяФайла) Тогда
ИмяФайла = Выборка.ИмяФайла;
ИначеЕсли НЕ ПустаяСтрока(Выборка.Наименование) Тогда
ИмяФайла = Выборка.Наименование;
КонецЕсли;
ДвоичныеДанные = Выборка.ХранилищеЗначения.Получить();
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
ПочтовоеСообщение.Вложения.Добавить(Выборка.ХранилищеЗначения.Получить(), ИмяФайла);
КонецЕсли;
КонецЦикла;
// Общие свойства письма
ПочтовоеСообщение.ИмяОтправителя = Письмо.ОтправительИмя;
ПочтовоеСообщение.Отправитель = Письмо.ОтправительАдресЭлектроннойПочты;
ПочтовоеСообщение.Тема = Письмо.Тема;
Для каждого СтрокаТЧ Из Письмо.КомуТЧ Цикл
Получатель = ПочтовоеСообщение.Получатели.Добавить();
Получатель.Адрес = СтрокаТЧ.АдресЭлектроннойПочты;
Получатель.ОтображаемоеИмя = СтрокаТЧ.Представление;
Получатель.Кодировка = КодировкаСообщения;
КонецЦикла;
Для каждого СтрокаТЧ Из Письмо.КопииТЧ Цикл
Копия = ПочтовоеСообщение.Копии.Добавить();
Копия.Адрес = СтрокаТЧ.АдресЭлектроннойПочты;
Копия.ОтображаемоеИмя = СтрокаТЧ.Представление;
Копия.Кодировка = КодировкаСообщения;
КонецЦикла;
Для каждого СтрокаТЧ Из Письмо.СкрытыеКопииТЧ Цикл
СлепаяКопия = ПочтовоеСообщение.СлепыеКопии.Добавить(СтрокаТЧ.АдресЭлектроннойПочты);
СлепаяКопия.Адрес = СтрокаТЧ.АдресЭлектроннойПочты;
СлепаяКопия.ОтображаемоеИмя = СтрокаТЧ.Представление;
СлепаяКопия.Кодировка = КодировкаСообщения;
КонецЦикла;
ТекстПисьмаИД = Письмо.ТекстПисьма;
ТекстСообщения = ПочтовоеСообщение.Тексты.Добавить();
ТекстСообщения.Кодировка = КодировкаСообщения;
Если Письмо.ВидТекстаПисьма = Перечисления.ВидыТекстовЭлектронныхПисем.HTMLСКартинками Тогда
ТекстСообщения.Текст = ПропарситьHTMLИДВ_ТекстКартинки(СоответствиеТекстовЭлектронныхПисем, ТекущийПользователь, Письмо, ТекстПисьмаИД);
ТекстСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
ИначеЕсли Письмо.ВидТекстаПисьма = Перечисления.ВидыТекстовЭлектронныхПисем.HTML Тогда
ТекстСообщения.Текст = ТекстПисьмаИД;
ТекстСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
Иначе
ТекстСообщения.Текст = ТекстПисьмаИД;
ТекстСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
КонецЕсли;
ПочтовоеСообщение.УведомитьОДоставке = УведомитьОДоставке;
ПочтовоеСообщение.УведомитьОПрочтении = УведомитьОПрочтении;
ПочтовоеСообщение.АдресаУведомленияОДоставке.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
ПочтовоеСообщение.АдресаУведомленияОПрочтении.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
Попытка
ИнтернетПочта.Послать(ПочтовоеСообщение);
Если (Письма <> Неопределено) И (Письма.Получить(Письмо) <> Неопределено) Тогда
Письма[Письмо].СтатусПисьма = Перечисления.СтатусыПисем.Отправленное;
Письма[Письмо].ДатаТранспорта = ТекущаяДата();
Письма[Письмо].ДатаОтправления = ТекущаяДата();
Письма[Письмо].ИдентификаторПисьма = ПочтовоеСообщение.ИдентификаторСообщения;
ОчиститьПисьмо(ПочтовоеСообщение);
Письма[Письмо].ПочтовоеСообщение = Новый ХранилищеЗначения(ПочтовоеСообщение, Новый СжатиеДанных());
Попытка
Письма[Письмо].Записать();
Исключение
КонецПопытки;
Иначе
ОбъектПисьмо = Письмо.ПолучитьОбъект();
ОбъектПисьмо.СтатусПисьма = Перечисления.СтатусыПисем.Отправленное;
ОбъектПисьмо.ДатаТранспорта = ТекущаяДата();
ОбъектПисьмо.ДатаОтправления = ТекущаяДата();
ОбъектПисьмо.ИдентификаторПисьма = ПочтовоеСообщение.ИдентификаторСообщения;
ОчиститьПисьмо(ПочтовоеСообщение);
ОбъектПисьмо.ПочтовоеСообщение = Новый ХранилищеЗначения(ПочтовоеСообщение, Новый СжатиеДанных());
Попытка
ОбъектПисьмо.Записать();
Исключение
КонецПопытки;
КонецЕсли;
Исключение
ТекстОшибок = Символы.ПС + ТекстОшибок + (Строка(УчетнаяЗапись) + ". " + ОписаниеОшибки());
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
СтрокаТаблицыСостояния.Состояние = Перечисления.СостоянияСобытий.Отменено;
КонецЕсли;
#КонецЕсли
Продолжить;
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КоличествоНовыхПисем = 0;
// Теперь проверим получение
Если Получить Тогда
МассивПисемДляУдаления = Новый Массив;
#Если Клиент Тогда
ФормаПрогрессора.КомментарийЗначения = "Получение сообщений с сервера " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
ФормаПрогрессора.Значение = 0;
#КонецЕсли
ОшибкаИсключенияТранзакции = "";
Попытка
МассивЗаголовковПисем = ИнтернетПочта.ПолучитьЗаголовки();
Исключение
МассивЗаголовковПисем = Новый Массив;
ТекстОшибок = Символы.ПС + ТекстОшибок + (Строка(УчетнаяЗапись) + ". " + ОписаниеОшибки());
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
СтрокаТаблицыСостояния.Состояние = Перечисления.СостоянияСобытий.Отменено;
КонецЕсли;
#КонецЕсли
КонецПопытки;
#Если Клиент Тогда
ФормаПрогрессора.КомментарийЗначения = "Выборка заголовков сообщений " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
ФормаПрогрессора.МаксимальноеЗначение = МассивЗаголовковПисем.Количество();
ФормаПрогрессора.Значение = 0;
#КонецЕсли
МассивЗаголовковПисем = ПолучитьСписокПисемКПолучению(УчетнаяЗапись, МассивЗаголовковПисем, МассивПисемДляУдаления);
Если МассивЗаголовковПисем.Количество() > 0 Тогда
МассивПисем = ИнтернетПочта.Выбрать(НЕ УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере, МассивЗаголовковПисем);
#Если Клиент Тогда
ФормаПрогрессора.КомментарийЗначения = "Регистрация сообщений " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
ФормаПрогрессора.МаксимальноеЗначение = МассивПисем.Количество();
ФормаПрогрессора.Значение = 0;
#КонецЕсли
ЭлементМассива = 0;
Для каждого ИнтернетПисьмо Из МассивПисем Цикл
Если НЕ НадоПриниматьПисьмо(УчетнаяЗапись, ИнтернетПисьмо, МассивПисемДляУдаления) Тогда
Продолжить;
КонецЕсли;
КоличествоНовыхПисем = КоличествоНовыхПисем + 1;
ИсключениеТранзакции = Ложь;
НачатьТранзакцию();
#Если Клиент Тогда
ФормаПрогрессора.Значение = ФормаПрогрессора.Значение + 1;
#КонецЕсли
Письмо = ПолучитьДокументОбъектИзИнтернетПочтовогоСообщения(ИнтернетПисьмо, УчетнаяЗапись, мРазделительАдресов, ИсключениеТранзакции);
Если ТипЗнч(Письмо) <> Тип("ДокументОбъект.ЭлектронноеПисьмо") Тогда
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
ПрименитьФильтрыКПисьму(Письмо, ТекущийПользователь);
Если (Письмо.УчетнаяЗапись.ЗаполнятьПустойПредметДляНовыхПисемИзТемыПисьма
ИЛИ Письмо.УчетнаяЗапись.ДляВходящихОтветовИПереадресацийИскатьПисьмаОснованияИЗаполн ятьПредмет
ИЛИ Письмо.УчетнаяЗапись.ДляВходящихОтветовИПереадресацийИскатьПисьмаОснованияИЗаполн ятьОснованиеНовогоПисьма
ИЛИ Письмо.УчетнаяЗапись.ДляВходящихОтветовИПереадресацийИскатьПисьмаОснованияИЗаполн ятьГруппуПисемНовогоПисьма)
И НЕ ПустаяСтрока(Письмо.Тема) Тогда
НайтиИПроставитьОснованиеПисьма(Письмо);
КонецЕсли;
Попытка
Письмо.Записать(РежимЗаписиДокумента.Запись);
Исключение
ИсключениеТранзакции = Истина;
ОшибкаИсключенияТранзакции = ОписаниеОшибки();
ОтменитьТранзакцию();
Продолжить;
КонецПопытки;
// Вложения
Если ИнтернетПисьмо.Вложения.Количество() > 0 И НЕ ИсключениеТранзакции Тогда
Для каждого Вложение Из ИнтернетПисьмо.Вложения Цикл
Если Вложение.Данные = Неопределено Тогда
Продолжить;
КонецЕсли;
НовоеВложение = Справочники.ВложенияЭлектронныхПисем.СоздатьЭлемент();
Если НЕ ПустаяСтрока(Вложение.Идентификатор) Тогда
Письмо.ВидТекстаПисьма = Перечисления.ВидыТекстовЭлектронныхПисем.HTMLСКартинками;
КонецЕсли;
НовоеВложение.ИДФайлаПочтовогоПисьма = Вложение.Идентификатор;
Если ТипЗнч(Вложение.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда
НовоеВложение.ИмяФайла = ?(ПустаяСтрока(Вложение.Имя), (ИнтернетПисьмо.ИдентификаторСообщения), Вложение.Имя) + ".msg";
Иначе
НовоеВложение.ИмяФайла = Вложение.Имя;
КонецЕсли;
НовоеВложение.Объект = Письмо.Ссылка;
НовоеВложение.Хранилище = Новый ХранилищеЗначения(Вложение.Данные, Новый СжатиеДанных());
Если ТипЗнч(Письмо.ПредметКонтакта) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
НовоеВложение.Предмет = Письмо.ПредметКонтакта;
Иначе
НовоеВложение.Предмет = Справочники.ФизическиеЛица.ПустаяСсылка();
КонецЕсли;
Попытка
НовоеВложение.Записать();
Исключение
ИсключениеТранзакции = Истина;
ОшибкаИсключенияТранзакции = ОписаниеОшибки();
Прервать;
КонецПопытки;
КонецЦикла;
Если НЕ ИсключениеТранзакции Тогда
ОчиститьПисьмо(ИнтернетПисьмо);
Письмо.ПочтовоеСообщение = Новый ХранилищеЗначения(ИнтернетПисьмо, Новый СжатиеДанных());
Попытка
Письмо.Записать();
Исключение
ИсключениеТранзакции = Истина;
ОшибкаИсключенияТранзакции = ОписаниеОшибки();
ОтменитьТранзакцию();
Прервать;
КонецПопытки;
Иначе
ОтменитьТранзакцию();
Прервать;
КонецЕсли;
КонецЕсли;
Если ИсключениеТранзакции Тогда
ТекстОшибок = Символы.ПС + ТекстОшибок + (Строка(УчетнаяЗапись) + ". " + ОшибкаИсключенияТранзакции);
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
СтрокаТаблицыСостояния.Состояние = Перечисления.СостоянияСобытий.Отменено;
КонецЕсли;
#КонецЕсли
ОтменитьТранзакцию();
Продолжить;
Иначе
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если МассивПисемДляУдаления.Количество() > 0 Тогда
#Если Клиент Тогда
ФормаПрогрессора.КомментарийЗначения = "Удаление сообщений с сервера " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
#КонецЕсли
Попытка
ИнтернетПочта.УдалитьСообщения(МассивПисемДляУдаления);
Исключение
ТекстОшибок = Символы.ПС + ТекстОшибок + (Строка(УчетнаяЗапись) + ". " + ОшибкаИсключенияТранзакции);
КонецПопытки;
КонецЕсли;
КонецЕсли;
ИнтернетПочта.Отключиться();
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
Если СтрокаТаблицыСостояния.Состояние <> Перечисления.СостоянияСобытий.Отменено Тогда
СтрокаТаблицыСостояния.Состояние = Перечисления.СостоянияСобытий.Завершено;
КонецЕсли;
КонецЕсли;
#КонецЕсли
КонецЦикла;
КонецЕсли;
#Если Клиент Тогда
Если ПоказыватьОкноВыполнения Тогда
ФормаПрогрессора.Ошибки = СокрЛП(ТекстОшибок);
Если НЕ ФормаПрогрессора.Открыта() Тогда
ФормаПрогрессора.Открыть();
КонецЕсли;
Если ПустаяСтрока(ФормаПрогрессора.Ошибки) Тогда
ФормаПрогрессора.Закрыть();
Иначе
ФормаПрогрессора.КомментарийЗначения = "Задачи завершены с ошибками";
ФормаПрогрессора.ЭлементыФормы.ПанельЗадач.Страницы.Ошибки.Заголовок = "Ошибки(!)";
ФормаПрогрессора.ЭлементыФормы.ПанельЗадач.ТекущаяСтраница = ФормаПрогрессора.ЭлементыФормы.ПанельЗадач.Страницы.Ошибки;
КонецЕсли;
КонецЕсли;
#КонецЕсли
КонецПроцедуры
ПоказатьПоходу самое главное это вот это:
ПочтовоеСообщение.УведомитьОДоставке = УведомитьОДоставке;
ПочтовоеСообщение.УведомитьОПрочтении = УведомитьОПрочтении;
ПочтовоеСообщение.АдресаУведомленияОДоставке.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
ПочтовоеСообщение.АдресаУведомленияОПрочтении.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот