1. sommid 09.08.18 17:55 Сейчас в теме

Долго отправляется почтовое сообщение из 1С

Может кто сталкивался..
На мой взгляд очень долго отправляется письмо из 1С - около 20 секунд выполняется метод "Послать()" объекта "ИнтернетПочта".
Тестовое письмо содержит всего лишь одного адресата и текст "тест", т.е. на объем письма грешить не надо.
Используется свой внутренний почтовый сервер MS Exchange, отправка на внутренний же адрес.

Вряд ли это важно, но используется конфа УТ 11.1.3.

А вот платформа вроде как влияет.
Перешли на 8.3.10.2561 и начали жаловаться пользователи.
Изначально использовали 8.3.5.1146 (но замеры делал уже после перехода), при отправке с этой версии платформы отправка около 10 секунд (что на мой взгляд тоже слишком долго)
Поставил рядом 8.3.12.1567 - те же 20 секунд.
Все проверялось на одном виртуальном сервере. Получается что-то в платформе.. может какие доп. настройки нужно использовать?

Админы ковыряли настройки MS Exchange (коннекторы смотрели, настройки профиля, с которого почта отправляется) - из результатов только замедление отправки до 38секунд. Как я понял по логам MS Exchange задержек не видно и все время "сидит" между 1С и MS Exchange.

Может подскажете как это ускорить?
А так же было бы интересно узнать сколько времени у вас занимает метод "Послать()" (без хамства :)) и с каким почтовым сервером.
Вознаграждение за ответ
Показать полностью
Ответы
Избранное Подписка Сортировка: Древо
2. Doreng 10 09.08.18 18:56 Сейчас в теме
(1)
сколько времени у вас занимает метод "Послать()"

делал массовую рассылку актов сверки - 1-3 секунды на письмо, отправитель yandex
думаю дело в Вашем почтовом сервере, если не затруднит, покажите настройки подключения для учетной записи с которой идет отправка
8. sommid 10.08.18 10:19 Сейчас в теме
(2) - прикрепил настройки почтового профиля из 1С.
(4) ,(6) - отправка идет с помощью функций общих модулей БСП, сам код формирования письма мне не нужен.
(3) - ок, спасибо, попробую явно указывать свойство ИспользоватьSSLSMTP
(5) - так не хотелось бы.. оставим на самый крайний случай
Прикрепленные файлы:
26. Fox-trot 91 15.08.18 23:20 Сейчас в теме
(8)попробуй уменьшить время ожидания сервера, и тогда по идее в логах можно будет прочитать об ошибке
хотя канешна по хорошему я б начал с самих настроек. к примеру адрес указан как имя днс или ийпи?
27. sommid 17.08.18 11:41 Сейчас в теме
(26) лично я могу только настройки в 1С крутить, к почтовику ни знаний ни доступа нет ), поэтому желательно уточнить, про что именно речь, чтобы админам мог сказать ).
настройки чего?
адрес чего и указан где?
4. Doreng 10 09.08.18 19:08 Сейчас в теме
(1)Попробуйте так
Письмо = Новый ПочтовоеСообщение;
Письмо.текст = "ТестовоеПисьмо"
Письмо.Отправитель = "ВашОтправитель";
Письмо.Получатель = "ВашПолучатель";
Профиль = НовыйИнтернетПочтовыйПрофиль(УчетнаяЗапись);
Соединение = Новый ИнтернетПочта;
Соединение.Подключиться(Профиль); // в этом месте нужно смотреть отладчиком
Соединение.Послать(Письмо); // в этом месте нужно смотреть отладчиком


Функция НовыйИнтернетПочтовыйПрофиль(УчетнаяЗапись)
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК АдресСервераSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьSSLSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверИсходящейПочты КАК ТолькоЗащищеннаяАутентификацияSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут
	|ИЗ
	|	Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
	|ГДЕ
	|	УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка");
	Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись);
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	Если Не Выборка.Следующий() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Результат = Новый ИнтернетПочтовыйПрофиль;
	ЗаполнитьЗначенияСвойств(Результат, Выборка);
	УстановитьПривилегированныйРежим(Истина);
	Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Пароль,ПарольSMTP");
	УстановитьПривилегированныйРежим(Ложь);
	Результат.ПарольIMAP = Пароли.Пароль;
	Результат.ПарольSMTP = Пароли.ПарольSMTP;
	
	Возврат Результат;
	
КонецФункции
Показать
5. Doreng 10 09.08.18 19:24 Сейчас в теме
(1)Есть еще вариант организовать отправку средствами outlook, почитать можно тут
https://1c-programmer-blog.ru/programmirovanie/rabota-s-outlook-v-1s.html
16. Xershi 402 10.08.18 18:18 Сейчас в теме
(1) было такое, админов толкать нужно. Что конкретно поменяли не скажу, но пошаманив скорость увеличилась.
3. user652236_dima_-_- 09.08.18 19:05 Сейчас в теме
полная поддержка шифрования появилась в 8.3.9
возможно на вашей новой платформе надо явно выключать шифрование протоколов письма, если оно не использовалось ранее.
10. sommid 10.08.18 11:28 Сейчас в теме
(3) явно установил новые свойства ИспользоватьSSL и ТолькоЗащищеннаяАутентификация в Ложь - все тоже самое
11. user652236_dima_-_- 10.08.18 16:29 Сейчас в теме
(10) при отправке письма блокируется интерфейс? временный выход-фоновое задание или регламентное (создать рс очередь писем).
13. sommid 10.08.18 17:47 Сейчас в теме
(11) да, интерфейс висит, поэтому и пожаловались, когда делают рассылку по 25 писем )
Да думал уже об этом, но просто ведь работали уже пару лет и было приемлемо (субъективно по памяти говорят, что эти же 25 писем отправлялись 2-3 минуты, а теперь 12 минут).
Пока еще попробую повыяснять и админов понапрягать, потом уже можно если никак, то фоново отправлять. Спасибо.
6. Aitbay 10.08.18 07:10 Сейчас в теме
Функция ОтправитьНаЭлектроннуюПочту(Получатели, Тема, Текст, ДополнительныеПараметры = Неопределено, ИмяОтправителя = "1с-Зарплата и Управление Персоналом") Экспорт 
	
	Если ДополнительныеПараметры = Неопределено Тогда
		ДополнительныеПараметры = Новый Структура;
	КонецЕсли;
	
	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации;
	Профиль.АдресСервераSMTP   = "адрес";
	Профиль.ПортSMTP           = 25;
	Профиль.Пользователь       = "Пользователь";
	Профиль.ПользовательSMTP   = "Пользователь";
	
	ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
	ПочтовоеСообщение.Тема                        = Тема;
	ПочтовоеСообщение.Отправитель.Адрес           = "Пользователь";
	ПочтовоеСообщение.Отправитель.ОтображаемоеИмя = ИмяОтправителя;
	ПочтовоеСообщение.ИмяОтправителя              = ИмяОтправителя;
	
	ПолучателиТип = ТипЗнч(Получатели);
	Если ТипЗнч(Получатели) = Тип("Массив") Тогда
		Для Каждого Адрес Из Получатели Цикл
			ПочтовоеСообщение.Получатели.Добавить(СокрЛП(Адрес));
		КонецЦикла;
	ИначеЕсли ПолучателиТип = Тип("Строка") Тогда 
		ПочтовоеСообщение.Получатели.Добавить(СокрЛП(Получатели));
	Иначе 
		Возврат Ложь;
	КонецЕсли;
	//
	//
	Если ДополнительныеПараметры.Свойство("Вложения") Тогда
		НомерФайла = 1;
		Для Каждого Файл из ДополнительныеПараметры.Вложения Цикл
			Если ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
				ПочтовоеСообщение.Вложения.Добавить(Файл, УниверсальныеМеханизмы.ПолучитьИмяФайлаИзПолногоПути(Файл)); //Файл, Наименование
			ИначеЕсли ТипЗнч(Файл) = Тип("Строка") Тогда
				ПочтовоеСообщение.Вложения.Добавить(Новый ДвоичныеДанные(Файл), УниверсальныеМеханизмы.ПолучитьИмяФайлаИзПолногоПути(Файл)); //Файл, Наименование
			Иначе 
				Вложение = ПочтовоеСообщение.Вложения.Добавить(Файл.ДвоичныеДанные, ?(Файл.Свойство("НаименованиеВложения"), Файл.НаименованиеВложения, Неопределено));
				Файл.Свойство("CID"           , Вложение.Идентификатор);
				Файл.Свойство("ТипСодержимого", Вложение.ТипСодержимого);
			КонецЕсли;
			НомерФайла = НомерФайла + 1;
		КонецЦикла;
	КонецЕсли;
	
	ПочтовоеСообщение.Тексты.Добавить(Текст, ?(Найти(Текст, "html") > 0, ТипТекстаПочтовогоСообщения.HTML, ТипТекстаПочтовогоСообщения.ПростойТекст));
	ПочтовоеСообщение.ОбработатьТексты();
	
	Попытка
		Почта = Новый ИнтернетПочта;
		Почта.Подключиться(Профиль);
		Почта.Послать(ПочтовоеСообщение);
		Почта.Отключиться();
		Возврат Истина;
	Исключение
		Комментарий = "Ошибка при отправке сообщения на электронную почту:" + Символы.ПС + ОписаниеОшибки();
		ЗаписьЖурналаРегистрации("Ошибка выполнения", УровеньЖурналаРегистрации.Ошибка, , , Комментарий);
		ОбщегоНазначения.СообщитьОбОшибке(Комментарий);
	КонецПопытки;
	
	Возврат Ложь;
	
КонецФункции
Показать
7. timeforlive 9 10.08.18 07:27 Сейчас в теме
Попробуйте посмотреть тут:
http://downloads.v8.1c.ru/content/Platform/8_3_10_2650/V8Update.htm

Через поиск "Послать()", найдете раздел "Работа с интрнетом", там есть ссылки на документацию. Может быть поможет информация в решении вашей проблемы.
9. sommid 10.08.18 11:19 Сейчас в теме
(7) - не то.. ошибки у меня нет, письмо отправляется, просто долго.
12. registration123 1 10.08.18 16:30 Сейчас в теме
А под временем
А так же было бы интересно узнать сколько времени у вас занимает метод "Послать()"
понимается чистое время именно этого метода? Или инициализацию то же считаете?

Если несколько раз письмо отсылаете в цикле то среднее время получается меньше?

У меня где-то по секунде-две уходит.
14. sommid 10.08.18 17:50 Сейчас в теме
(12) чисто метод Послать(). В том-то и дело, что отладчиком "глубже" не могу посмотреть.
Пакетную отправку не проверял, но судя по показаниям пользователей время отправки последующих писем не уменьшается.

1-2 секунды - это с какого почтового сервера?
15. registration123 1 10.08.18 18:05 Сейчас в теме
(14) exchange

Важно проверить именно метод. Может на инициализацию много времени уходит.

Тогда разнести инициализацию (в начало сеанса, например) и непосредственно отправку.

Типа было в цикле:
инициализация
отправка письма
иницализация
отправка письма

А должно стать:
инициализация
отправка письма
отправка письма
отправка письма
17. registration123 1 10.08.18 18:38 Сейчас в теме
ё моё. щас тайминг сделал 20 сек Послать()
Меня спасает то, что это админская рассылка...
Извините за неверные данные. Раньше было не мгновенно, но явно не так медленно как сейчас.

ВнешняяОбработка.....Форма.Форма 236 Почта.Послать(Сообщение); 1 20,252842 99,74
19. sommid 13.08.18 14:49 Сейчас в теме
20. wbazil 122 13.08.18 16:06 Сейчас в теме
можно проверить отправку через CDO для теста писем 10, если отправка пойдёт быстро значит проблема на стороне 1с, если так же медленно то смотреть настройки Exchange

Функция ОтправитьПисьмо()
	
	ИмяФайла = "C:Test.xml";	
	Сервер = "smtp.mail.ru";
	Порт = "465";
	Получатель = "@";
	Отправитель = "@";
	Пароль = "";	
		
	Попытка
		CDO = Новый COMОбъект("CDO.Message");  
	Исключение
		Сообщить("Ошибка: объект CDO.Message не создан");
		Возврат Ложь;
	КонецПопытки;
		
	CDO.From = Отправитель;
	CDO.To = Получатель;
	CDO.Subject = "ТемаПисьма";
	CDO.textbody = "Текстовое письмо";
	CDO.BodyPart.Charset = "windows-1251";
	CDO.HTMLBody = "HTML-письмо"; 
	CDO.HTMLBodyPart.Charset = "windows-1251";
	CDO.AddAttachment(ИмяФайла);
	
	//По умолчанию 1-использовать каталог Pickup
	Item = "http://schemas.microsoft.com/cdo/configuration/sendusing";
	CDO.Configuration.Fields.Item(Item).Value = 2;
	
	//Адрес SMTP сервера
	Item = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
	CDO.Configuration.Fields.Item(Item).Value = Сервер;
	
	//0-без утентификации
	//1-базовая аутентификация
	//2-аутентификация NTLM 	
	Item = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";
	CDO.Configuration.Fields.Item(Item).Value = 1;
	
	//Использовать SSL
	Item = "http://schemas.microsoft.com/cdo/configuration/smtpusessl";	
	CDO.Configuration.Fields.Item(Item).Value = 1;
	
	//Имя пользователя SMTP сервера
	Item = "http://schemas.microsoft.com/cdo/configuration/sendusername";	
	CDO.Configuration.Fields.Item(Item).Value = Отправитель;
	
	//Пароль пользователя SMTP сервера
	Item = "http://schemas.microsoft.com/cdo/configuration/sendpassword";	
	CDO.Configuration.Fields.Item(Item).Value = Пароль;
	
	//Порт сервера
	Item = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";	
	CDO.Configuration.Fields.Item(Item).Value = Порт;
	
	//Таймаут
	Item = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout";
	CDO.Configuration.Fields.Item(Item).Value = 60;	
	
	//Обновление настроек	
	CDO.Configuration.Fields.Update();
	
	Попытка
 		CDO.Send();
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
		
КонецФункции 
Показать
21. sommid 14.08.18 11:30 Сейчас в теме
Проверил штатно через внешний почтовый сервер mail.ru - отправка 0.5 секунды (я так понимаю это тоже самое, что предложили в (20)), плюс при тестировании отправки через Exchange на внешнюю почту увидел, что ошибку про "Почтовый ящик не доступен (SMTP error code 550 550 5.7.1 Unable to relay)" выдает очень быстро, т.е. инфу от 1С получает быстро.
Из чего делаю вывод и надеюсь, что все-таки дело в настройках Exchange. Осталось как-то узнать в каких именно )
24. Xershi 402 14.08.18 13:10 Сейчас в теме
(21) скажи чтобы настроки смтп проверяли или доступ сторонних приложений. Скорее всего какая то там настройка безопасности всю воду мутит.
22. sommid 14.08.18 11:42 Сейчас в теме
(20) попробовал отправить через CDO через Exchange - тоже в пределах секунды.. правда SSL = 0 делал, т.к. с 1 не отправляет
Да ладно.. неужели это настройками Exchange не подружить нормально с 1С? и на последнем релизе все то же самое, неужели никто бы не пожаловался..
23. wbazil 122 14.08.18 12:10 Сейчас в теме
(22)
попробовал отправить через CDO через Exchange - тоже в пределах секунды.

если некому/некогда разбираться то оставите рассылку через CDO
25. Infector 124 15.08.18 22:45 Сейчас в теме
В свое время намучался с интернет-почтой из встроенного языка. CDO задачу выполняет без лишних заморочек и заскоков, а главное админам из Европы не нужно ничего втирать почему что-то нужно подшаманить, когда у них все работает и про капризы загадочной русской платформы.
28. Fox-trot 91 17.08.18 11:49 Сейчас в теме
настроки соединения канешна
29. sommid 17.08.18 13:46 Сейчас в теме
(28) показал настройки в посте 8
30. Fox-trot 91 17.08.18 14:02 Сейчас в теме
(29)ну что за манеры %)
не видать там ничерта = поля не заполнены
сам не можешь сказать чтоли? имя указано или айпи адрес
31. sommid 17.08.18 16:23 Сейчас в теме
(30) точно, сори ) айпишник прописан
32. Fox-trot 91 17.08.18 17:08 Сейчас в теме
попробуй время ожидания ответа сервера уменьшить, потом будешь анализировать код ошибки
хотя по хорошему проще логи сервера почитать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день