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

1. sommid 09.08.18 17:55 Сейчас в теме
Может кто сталкивался..
На мой взгляд очень долго отправляется письмо из 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.

Может подскажете как это ускорить?
А так же было бы интересно узнать сколько времени у вас занимает метод "Послать()" (без хамства :)) и с каким почтовым сервером.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
37. sommid 15.10.19 10:23 Сейчас в теме +3 $m
(33) да.

1. сделали отдельный коннектор для отправки из 1С (у нас управляемые формы, клиент-сервер и вся отправка от 1С идет с сервера 1С) - указали ip сервера 1С, на нем убрали ожидание подтверждение о доставке и задержку для защиты от спама (MaxAcknowledgementDelay = 0, TarpitInterval = 0)

2. сервер 1С и сервер exchange в облаке, но скорее всего не в этом дело, а в том, что 1С отправляет как неавторизованный пользователь для exchange, поэтому толи срабатывала антиспам защита, толи авторизация из-за этого долго происходила. В конфигурации сервера exchange для транспортного сервера в список разрешенных адресов добавили ip сервера 1С и наконец-то теперь отправка меньше секунды.

1-е было сделано давно и не помогало, а вот 2-е на днях нарыли и сразу заработало как надо.
lyanale@mail.ru; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Doreng 27 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 156 15.08.18 23:20 Сейчас в теме
(8)попробуй уменьшить время ожидания сервера, и тогда по идее в логах можно будет прочитать об ошибке
хотя канешна по хорошему я б начал с самих настроек. к примеру адрес указан как имя днс или ийпи?
27. sommid 17.08.18 11:41 Сейчас в теме
(26) лично я могу только настройки в 1С крутить, к почтовику ни знаний ни доступа нет ), поэтому желательно уточнить, про что именно речь, чтобы админам мог сказать ).
настройки чего?
адрес чего и указан где?
4. Doreng 27 09.08.18 19:08 Сейчас в теме
(1)Попробуйте так
Письмо = Новый ПочтовоеСообщение;
Письмо.текст = "ТестовоеПисьмо"
Письмо.Отправитель = "ВашОтправитель";
Письмо.Получатель = "ВашПолучатель";
Профиль = НовыйИнтернетПочтовыйПрофиль(УчетнаяЗапись);
Соединение = Новый ИнтернетПочта;
Соединение.Подключиться(Профиль); // в этом месте нужно смотреть отладчиком
Соединение.Послать(Письмо); // в этом месте нужно смотреть отладчиком


Функция НовыйИнтернетПочтовыйПрофиль(УчетнаяЗапись)
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК АдресСервераIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК ПортIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляВходящейПочты КАК ИспользоватьSSLIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверВходящейПочты КАК ТолькоЗащищеннаяАутентификацияIMAP,
	|	УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты КАК АдресСервераSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты КАК ПортSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты КАК ИспользоватьSSLSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP КАК ПользовательSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ИспользоватьБезопасныйВходНаСерверИсходящейПочты КАК ТолькоЗащищеннаяАутентификацияSMTP,
	|	УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут
	|ИЗ
	|	Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
	|ГДЕ
	|	УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка");
	Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись);
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	Если Не Выборка.Следующий() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Результат = Новый ИнтернетПочтовыйПрофиль;
	ЗаполнитьЗначенияСвойств(Результат, Выборка);
	УстановитьПривилегированныйРежим(Истина);
	Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Пароль,ПарольSMTP");
	УстановитьПривилегированныйРежим(Ложь);
	Результат.ПарольIMAP = Пароли.Пароль;
	Результат.ПарольSMTP = Пароли.ПарольSMTP;
	
	Возврат Результат;
	
КонецФункции
Показать
5. Doreng 27 09.08.18 19:24 Сейчас в теме
(1)Есть еще вариант организовать отправку средствами outlook, почитать можно тут
https://1c-programmer-blog.ru/programmirovanie/rabota-s-outlook-v-1s.html
16. Xershi 1474 10.08.18 18:18 Сейчас в теме
(1) было такое, админов толкать нужно. Что конкретно поменяли не скажу, но пошаманив скорость увеличилась.
33. Bud78 8 13.10.19 16:29 Сейчас в теме
(1) Удалось ли победить проблему?
34. Xershi 1474 13.10.19 19:48 Сейчас в теме
(33)писали же. Админов пинать надо. Не достучались?
37. sommid 15.10.19 10:23 Сейчас в теме +3 $m
(33) да.

1. сделали отдельный коннектор для отправки из 1С (у нас управляемые формы, клиент-сервер и вся отправка от 1С идет с сервера 1С) - указали ip сервера 1С, на нем убрали ожидание подтверждение о доставке и задержку для защиты от спама (MaxAcknowledgementDelay = 0, TarpitInterval = 0)

2. сервер 1С и сервер exchange в облаке, но скорее всего не в этом дело, а в том, что 1С отправляет как неавторизованный пользователь для exchange, поэтому толи срабатывала антиспам защита, толи авторизация из-за этого долго происходила. В конфигурации сервера exchange для транспортного сервера в список разрешенных адресов добавили ip сервера 1С и наконец-то теперь отправка меньше секунды.

1-е было сделано давно и не помогало, а вот 2-е на днях нарыли и сразу заработало как надо.
lyanale@mail.ru; +1 Ответить
36. AlexandrSmith 68 14.10.19 22:33 Сейчас в теме
(1) Исправляли следующим образом:

1) Игрались с шифрованием. Не помогло.
2) Пользователей отправки меняли. Не помогло.
3) Серверы выходили по разному в инет, перенастраивали. Не помогло.
4) Программы отправки меняли. Не помогло.
5) Позвонили в компанию, обеспечивающую почтовый сервис. Они сказали, что на их стороне пакеты не принимает файрвол подолгу, В пакете заголовка почты, было какое-то дополнение, которое мешало отправке и было подозрительным для файрвола.

Вот такие чудеса!
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 15 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 2 10.08.18 16:30 Сейчас в теме
А под временем
А так же было бы интересно узнать сколько времени у вас занимает метод "Послать()"
понимается чистое время именно этого метода? Или инициализацию то же считаете?

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

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

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

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

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

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

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

ВнешняяОбработка.....Форма.Форма 236 Почта.Послать(Сообщение); 1 20,252842 99,74
19. sommid 13.08.18 14:49 Сейчас в теме
18. пользователь 11.08.18 15:29
Сообщение было скрыто модератором.
...
20. wbazil 138 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();
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
		
КонецФункции 
Показать
maximus_2712; sommid; +2 Ответить
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 1474 14.08.18 13:10 Сейчас в теме
(21) скажи чтобы настроки смтп проверяли или доступ сторонних приложений. Скорее всего какая то там настройка безопасности всю воду мутит.
22. sommid 14.08.18 11:42 Сейчас в теме
(20) попробовал отправить через CDO через Exchange - тоже в пределах секунды.. правда SSL = 0 делал, т.к. с 1 не отправляет
Да ладно.. неужели это настройками Exchange не подружить нормально с 1С? и на последнем релизе все то же самое, неужели никто бы не пожаловался..
23. wbazil 138 14.08.18 12:10 Сейчас в теме
(22)
попробовал отправить через CDO через Exchange - тоже в пределах секунды.

если некому/некогда разбираться то оставите рассылку через CDO
25. Infector 199 15.08.18 22:45 Сейчас в теме
В свое время намучался с интернет-почтой из встроенного языка. CDO задачу выполняет без лишних заморочек и заскоков, а главное админам из Европы не нужно ничего втирать почему что-то нужно подшаманить, когда у них все работает и про капризы загадочной русской платформы.
28. Fox-trot 156 17.08.18 11:49 Сейчас в теме
настроки соединения канешна
29. sommid 17.08.18 13:46 Сейчас в теме
(28) показал настройки в посте 8
30. Fox-trot 156 17.08.18 14:02 Сейчас в теме
(29)ну что за манеры %)
не видать там ничерта = поля не заполнены
сам не можешь сказать чтоли? имя указано или айпи адрес
31. sommid 17.08.18 16:23 Сейчас в теме
(30) точно, сори ) айпишник прописан
32. Fox-trot 156 17.08.18 17:08 Сейчас в теме
попробуй время ожидания ответа сервера уменьшить, потом будешь анализировать код ошибки
хотя по хорошему проще логи сервера почитать
35. wertep 23 14.10.19 15:56 Сейчас в теме
Львиная доля времени в этом уходит именно на аутоитентификацию на сервере, копайте в этом направлении. Т.е. время именно загрузка письма на сервер в вашем случае занимает очень мало времени, даже при любой нагрузке в сети.
38. romankoav 4 08.02.23 18:51 Сейчас в теме
у нас та же проблема - отправка 10 секунд, админы никак побороть ее не могут. через CDO отправляется за 1 сек.
СпособSMTPАутентификации перепробовал все - всегда 10 секунд.
Для серверов 1с разрешен open relay. Авторизации не требуется для SMTP протокола.
антиспам защита отключена
файервола между сервером 1с и почтовым - нет
Куда копать что еще может быть???
39. Люпин 10 12.05.23 12:54 Сейчас в теме
(38) Столкнулась с такой же проблемой при отправке писем из 1С
Решение, которое мне помогло:
очистить в настройках учетной записи параметры IMAP (поля обязательные для заполнения, поэтому делала это через обработку "Редактирование реквизитов" в флагом "ОбменДанными = Истина"
Теперь почта летает
40. suxo 21.11.23 10:36 Сейчас в теме
Можно просто в сервер входящей почты поставить localhost
Вроде как помогло. ДО этого отправка было по 20 секунд. Теперь сразу.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)