[ОТВЕТИТЬ]
25.04.2016 13:48
wolfio
 
добрый день.

переключили продакшн базу на новый почтовый сервер.
в результате, частично перестали работать почтовые рассылки, которые отправляют вложения (логи, например).

взялся дебагать либу [runtime].[email]. скопировал функцию send со всеми связями, и вызываю отправку.
если v_multipart не заполнен (нет вложений), письмо приходит, и все красиво.
если же заполнен, то в самом конце функции send библиотеки email происходит зависание на выполнении этого кода ровно на 300 сек(видимо дефолтный таймаут):
Код:
v_smtp_reply := utl_smtp.close_data(v_smtp_conn);
при этом, прождав таймаут, в v_smtp_reply.code+v_smtp_reply.text выдается:
Цитата:
v_smtp_reply: 451 4.7.0 Timeout waiting for client input
v_smtp_reply: 421 Service not available
что не нравится системе? перенес эту же свою операцию на тест. настройки SMTP% все те же. Отрабатывает без таймаутов и письмо сразу же приходит:

Цитата:
v_smtp_reply: 250 2.6.0 <35132022-9d72-4520-9eb5-37db6ffd63b4@нашдомен.ru> [InternalId=26528403] Queued mail for delivery
v_smtp_reply: 221 2.0.0 Service closing transmission channel

может кто сталкивался?
25.04.2016 13:57
wolfio
 
upd:забыл добавить, что на бою возникает эта ситуация именно под ibs. если я выполняю отправку от своего имени (админа), скриптом, то отправка проходит на ура.
25.04.2016 14:23
wolfio
 
Цитата:
не похоже, т.к. отправка без вложения работает, а так же работает и от НЕ владельца схемы
25.04.2016 15:02
OlegON
 
Вот только отправка без вложения и сбивает с толку, предположил, что это больше ошибка тестирования. Что работает от НЕвладельца больше наводит на мысль, что в ACL включен невладелец.
Гадать можно достаточно долго, но я бы попросил журнал почтового сервера. Там можно много что интересного встретить из ограничений, которые так вот по фотографии и в голову не придут.
25.04.2016 15:15
wolfio
 
дело в том, что, как говорят админы, в журнале вообще не отображается никакой инфы. Т.е. как будто бы никакой отправки не было вовсе.

возможно проблема в каких-то системных параметрах, на уровне базы (доступ исключаю, т.к. рассылка работает частично через отправку smtp без вложений и через События.Отложенные действия). могут быть какие-то отдельные настройки для utl_smtp?
25.04.2016 16:02
OlegON
 
а без вложений точно такая же процедура работает? может, там просто текстовичок какому-то внешнему обработчику передается?
если честно, не припомню ничего такого отдельного, что могло бы давать такой эффект... только ACL, отсутствие попыток подключения опять же за него говорит...
25.04.2016 16:14
wolfio
 
Цитата:
OlegON а без вложений точно такая же процедура работает?
не такая же, а эта же)

вот отправка с файлом:
SQL код:
begin
    ibs
.Z$RUNTIME_SMTP_MAIL.SENDMAIL(
                                        
'dmitry.m@domenru'
                                        
,'Журнал IBS времени работы операций при закрытии 21/04/2016 ОД.'
                                        
,'Во вложении отчет о времени работы операций ЗОД, со сравнением временем работы операций днём ранее.'
                                        
,'TEST_JOB2@domenru'
                                        
,'./tmp'
                                        
,'EOD_REPORT_WITH_COMPARE.html'
                                        
,true);
end
а вот без него
SQL код:
begin
    ibs
.Z$RUNTIME_SMTP_MAIL.SENDMAIL(
                                        
'dmitry.m@domenru'
                                        
,'Журнал IBS времени работы операций при закрытии 21/04/2016 ОД.'
                                        
,'Во вложении отчет о времени работы операций ЗОД, со сравнением временем работы операций днём ранее.'
                                        
,'TEST_JOB2@domenru'
                                        
,null--'./tmp'
                                        
,null--'EOD_REPORT_WITH_COMPARE.html'
                                        
,true);
end
25.04.2016 16:43
OlegON
 
Думаю, тут вариант только расковыривать SENDMAIL :( Увы, у меня пока базы под рукой нет...
25.04.2016 17:08
KirillHome
 
Возможно, скажу глупость - но что с правами у отправителя (на './tmp' и на 'EOD_REPORT_WITH_COMPARE.html')?
25.04.2016 17:14
wolfio
 
с правами все в норме. у обоих есть права на чтение/удаление/изменение.
ковыряю runtime.email.send

если закоментить выделенное --!!-- - письмо пролетает, но вложение не открывается, типа битый файл.

что делается в этом конкретном месте я пытаюсь осознать посредством гугла

Код:
			if p_attachments(i).bdata is not null then
				--!!!!------
				for k in 1..ceil(dbms_lob.getlength(p_attachments(i).bdata)/v_chunk) loop
					utl_smtp.write_raw_data(v_smtp_conn, utl_encode.base64_encode(dbms_lob.substr(p_attachments(i).bdata,v_chunk,v_chunk*(k-1)+1)));
				end loop;
				--!!!!------
			elsif p_attachments(i).cdata is not null then
				for k in 1..ceil(dbms_lob.getlength(p_attachments(i).cdata)/v_chunk) loop
					utl_smtp.write_raw_data(v_smtp_conn, utl_encode.base64_encode(utl_raw.cast_to_raw(convert(dbms_lob.substr(p_attachments(i).cdata,v_chunk,v_chunk*(k-1)+1),v_charset_db))));
				end loop;
			end if;
25.04.2016 17:25
OlegON
 
Что-то гигантское? попробовать другой аттач? какой-нибудь мааленький текстовичок?
25.04.2016 18:00
wolfio
 
блин, запихнул файлик на 200байт - пролез
но мой тоже небольшой, 93кб всего

если честно, я все ровно не понимаю в чем тут проблема. Ну пилит он файлик на части, что с того-то?)

v_chunk constant pls_integer := 10368; -- 48bytes binary convert to 128bytes of base64. (32767/2 max for raw convert)
я вот этот расчет вообще непонимаю. что тут во что конвертят?

при файлике, у которого длина в байтах больше 10368 - он зависнет на стадии utl_smtp.close_data(v_smtp_conn);
25.04.2016 20:13
OlegON
 
Может, бага какая-то? Небось, пришлось перейти на 12? ЦФТ без этого на поддержку не брала у нас, а с ней, с 12й, еще отношения не очень...
Что еще из мыслей - проверить значение параметра nls_length_semantics (сравнить с тестовой базой, где работает).
Надо понимать, что при этом много что может поехать боком в базе, например, размер создаваемых колонок таблиц будет различаться при разных значениях этого параметра и кодировке БД UTF8 (кодировку, кстати, тоже можно сравнить).
Если предположить, что с длиной напутали, то размер чанка можно сильно уменьшить.
26.04.2016 14:03
wolfio
 
как выяснилось, у нас 2 сервера под одним DNS (типа виртуального). И один из них как-то криво отвечает пакету utl_smtp.
Прописали жестко адрес второго сервера - работает. в чем была причина, так и непонятно.
Опции темы


Часовой пояс GMT +3, время: 05:53.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.