Встроенный почтовый клиент + отчет о доставке

1. SinglCOOLer 217 02.07.13 19:19 Сейчас в теме
Собственно используется встроенный почтовый клиент, но есть необходимость понимать получил человек письмо или нет, как это можно сделать?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
12. KroVladS 34 02.07.13 21:59 Сейчас в теме
только сейчас заметил весёлый ответ о прочтении по умолчанию:
"Сообщение, отправленное *********, было открыто. Это не означает, что сообщение было прочитано или понято."
Crazy Man; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. KroVladS 34 02.07.13 19:28 Сейчас в теме
(1) SinglCOOLer,

какая конфа?
я почтовых клиентов на 1с штук 5 разных видел.
10. echo77 1881 02.07.13 21:31 Сейчас в теме
(1) ИМХО, бесполезная штука - очень много зависит от клиента(почтовой программы) и пользователя.
Я вот никогда не отправляю подтверждение о доставке
3. SinglCOOLer 217 02.07.13 19:32 Сейчас в теме
4. KroVladS 34 02.07.13 20:18 Сейчас в теме
(3) SinglCOOLer,
Поиск по свойству УведомитьОДоставке в УТ 10.3.21.1 ничего не дал,
следовательно данный функционал в УТ 10.3 отсутствует.
Только дорабатывать.
5. SinglCOOLer 217 02.07.13 20:23 Сейчас в теме
Да можно и доработать, понять бы а какую сторону копать, интересно как в 11 УТ сделано
6. KroVladS 34 02.07.13 20:34 Сейчас в теме
(5) SinglCOOLer,
понять бы а какую сторону копать


Общий модуль УправлениеЭлектроннойПочтой
Процедура ПолучениеОтправкаПисем(****) Экспорт

Перед отправкой добавить:
ПочтовоеСообщение.УведомитьОДоставке = Истина;
ПочтовоеСообщение.УведомитьОПрочтении = Истина;

Это если примитивно, для всех писем, при условии что на стороне получателя данный функционал поддерживается и включён.
7. SinglCOOLer 217 02.07.13 20:48 Сейчас в теме
(6) KroVladS, сделал так, ничего не приходит, пробовал разные ящики, читал почту с веб клиента яндекса и меила, уведомления не приходили, пичаль.

п.с.

адрес получателя уведомления добавлял
8. SinglCOOLer 217 02.07.13 20:52 Сейчас в теме
(6) KroVladS, но опять же странность, отправил с маила на яндекс с галкой уведомление о прочтении и никакого уведомления на меил не вернулось
9. KroVladS 34 02.07.13 20:57 Сейчас в теме
(8) SinglCOOLer,
при условии что на стороне получателя данный функционал поддерживается и включён.

у меня в почтовом клиенте (не 1с) есть настройка:
Подтверждение прочтения: Никогда не отправлять подтверждение прочтения


популярные почтовые сервера майл и яндекс принудительно отключают уведомление о доставке, чтобы спамеры не проверяли доступные адреса.
11. KroVladS 34 02.07.13 21:48 Сейчас в теме
(8) SinglCOOLer,

Добавил перед попыткой

*************************
ПочтовоеСообщение.УведомитьОДоставке = Истина; 
ПочтовоеСообщение.УведомитьОПрочтении = Истина; 
			
ПочтовоеСообщение.АдресаУведомленияОДоставке.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
ПочтовоеСообщение.АдресаУведомленияОПрочтении.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
							
Попытка
								
	ИнтернетПочта.Послать(ПочтовоеСообщение);
	Если (Письма <> Неопределено) И (Письма.Получить(Письмо) <> Неопределено) Тогда
**********************
Показать


на внутреннем почтовом сервере подтверждение о прочтении приходит (Если его включить в почтовом клиенте (не 1с))
Прикрепленные файлы:
13. SinglCOOLer 217 03.07.13 07:04 Сейчас в теме
(11) KroVladS, спасибо, сделал так, заказчик хочет именно так, чтобы отчет был )
14. akR00b 22 26.11.14 11:09 Сейчас в теме
(13) SinglCOOLer, KroVladS, а можно пример обработки или кода ?! как получить отчет как на картинке подтверждение ?!
15. Xershi 1483 17.02.16 09:02 Сейчас в теме
(14) kare, тут скорее всего речь идет о том что получено обратное сообщение, что письмо дошло и его открыли. Вот и обратное письмо и есть отчет. Кстати спасибо автору. Сегодня юзеры захотели точно такую же фишку.
16. wmonref1 07.11.16 22:48 Сейчас в теме
(15) Xershi, можете поделиться кодом который использовали для этой задачи?

Спасибо!
17. Xershi 1483 08.11.16 09:23 Сейчас в теме
(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 Тогда
					
	#Если Клиент Тогда
					ФормаПрогрессора.КомментарийЗначения = "Удаление сообщений с сервера " + УчетнаяЗапись.Наименование + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + "> ...";
	#КонецЕсли
				
					Попытка
						ИнтернетПочта.УдалитьСообщения(МассивПисемДляУдаления);
					Исключение
						ТекстОшибок = Символы.ПС + ТекстОшибок + (Строка(УчетнаяЗапись) + ". " + ОшибкаИсключенияТранзакции);
					КонецПопытки;
					
				КонецЕсли;
				
			КонецЕсли; 
			
			ИнтернетПочта.Отключиться();
			
			#Если Клиент Тогда
			Если ПоказыватьОкноВыполнения Тогда
				Если СтрокаТаблицыСостояния.Состояние <> Перечисления.СостоянияСобытий.Отменено Тогда
					СтрокаТаблицыСостояния.Состояние = Перечисления.СостоянияСобытий.Завершено;
				КонецЕсли; 
			КонецЕсли; 
			#КонецЕсли
			
		КонецЦикла; 
		
	КонецЕсли;
	
	#Если Клиент Тогда
	Если ПоказыватьОкноВыполнения Тогда
		
		ФормаПрогрессора.Ошибки = СокрЛП(ТекстОшибок);
		
		Если НЕ ФормаПрогрессора.Открыта() Тогда
			ФормаПрогрессора.Открыть();
		КонецЕсли;
		
		Если ПустаяСтрока(ФормаПрогрессора.Ошибки) Тогда
			ФормаПрогрессора.Закрыть();
		Иначе
			ФормаПрогрессора.КомментарийЗначения = "Задачи завершены с ошибками";
			ФормаПрогрессора.ЭлементыФормы.ПанельЗадач.Страницы.Ошибки.Заголовок = "Ошибки(!)";
			ФормаПрогрессора.ЭлементыФормы.ПанельЗадач.ТекущаяСтраница = ФормаПрогрессора.ЭлементыФормы.ПанельЗадач.Страницы.Ошибки;
		КонецЕсли;
		
	КонецЕсли;
	#КонецЕсли
	
КонецПроцедуры
Показать


Походу самое главное это вот это:
ПочтовоеСообщение.УведомитьОДоставке = УведомитьОДоставке; 
ПочтовоеСообщение.УведомитьОПрочтении = УведомитьОПрочтении; 
							
ПочтовоеСообщение.АдресаУведомленияОДоставке.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
ПочтовоеСообщение.АдресаУведомленияОПрочтении.Добавить(ПочтовоеСообщение.Отправитель.Адрес);
ivan453; wmonref1; +2 Ответить
12. KroVladS 34 02.07.13 21:59 Сейчас в теме
только сейчас заметил весёлый ответ о прочтении по умолчанию:
"Сообщение, отправленное *********, было открыто. Это не означает, что сообщение было прочитано или понято."
Crazy Man; +1 Ответить
18. recrut 21.04.22 18:15 Сейчас в теме
Письмо.АдресаУведомленияОПрочтении.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты);

Плюс почту получателя можно добавить.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот