CarlosN 0 Denunciar post Postado Outubro 9, 2012 Bom dia Estou com problemas na função de email do oracle a linha UTL_SMTP.close_data() está muito lenta. Alguem tem idéia do que possa ser, se é do oracle ou talvez problema com o server exchange da minha empresa? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 9, 2012 Como você mediu a lentidão só neste ponto ?! Este envio é autenticado ? O problema pode estar no Serviço/Servidor de email ou no trafego da rede. Compartilhar este post Link para o post Compartilhar em outros sites
CarlosN 0 Denunciar post Postado Outubro 9, 2012 Como você mediu a lentidão só neste ponto ?! Este envio é autenticado ? O problema pode estar no Serviço/Servidor de email ou no trafego da rede. Debugando percebí a lentidão nesta linha. Cerca de 25 seg. a mais para concluir. O envio é autenticado, porém não há problema na autenticação.. o email é enviado corretamente e com apenas 3 segundos após iniciada a procedure. Fiz algumas verificações no servidor de email e não encontrei problemas. Vou tentar rever novamente. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 9, 2012 Segue function que usamos aqui, não lembro a fonte, tem um UTL_SMTP.CLOSE_DATA(CONEXAO); create or replace PROCEDURE envia_email (ds_email_origem_w varchar2, ds_email_destino_p varchar2, ds_assunto varchar2, ds_mensagem_p varchar2) is ds_smtp_w varchar2(20) := '<ip>'; ds_user_id_w varchar2(50) := '<user>'; ds_senha_smtp_w varchar2(50) := '<password>'; /* Abre conex?o SMTP e HTTP */ CONEXAO UTL_SMTP.CONNECTION; BEGIN /* Abre conex?o com um Servidor SMTP(Simple Mail Transfer Protocol), porta padr?o SMTP e 25 */ CONEXAO := utl_smtp.open_connection (ds_smtp_w,25); UTL_SMTP.HELO (CONEXAO, ds_smtp_w); /* Endereco do servidor de SMTP */ utl_smtp.command (CONEXAO, 'AUTH LOGIN'); utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_user_id_w))))); utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_senha_smtp_w))))); UTL_SMTP.MAIL (CONEXAO, ('<' || ds_email_origem_w || '>')); /* E-mail de quem esta mandando */ UTL_SMTP.RCPT (CONEXAO, ('<' || ds_email_destino_p || '>')); /* Para quem vou mandar */ UTL_SMTP.OPEN_DATA(CONEXAO); UTL_SMTP.WRITE_DATA(CONEXAO,'Subject'|| ': ' || ds_assunto || utl_tcp.CRLF); UTL_SMTP.WRITE_DATA(CONEXAO, utl_tcp.CRLF || ds_mensagem_p); UTL_SMTP.CLOSE_DATA(CONEXAO); UTL_SMTP.QUIT (CONEXAO); Exception WHEN OTHERS THEN utl_smtp.quit (conexao); raise_application_error(-20011,'N?o foi possivel enviar o e-mail devido ao seguinte erro: ' || sqlerrm); END ENVIA_EMAIL; Compartilhar este post Link para o post Compartilhar em outros sites
CarlosN 0 Denunciar post Postado Outubro 10, 2012 Segue function que usamos aqui, não lembro a fonte, tem um UTL_SMTP.CLOSE_DATA(CONEXAO); create or replace PROCEDURE envia_email (ds_email_origem_w varchar2, ds_email_destino_p varchar2, ds_assunto varchar2, ds_mensagem_p varchar2) is ds_smtp_w varchar2(20) := '<ip>'; ds_user_id_w varchar2(50) := '<user>'; ds_senha_smtp_w varchar2(50) := '<password>'; /* Abre conex?o SMTP e HTTP */ CONEXAO UTL_SMTP.CONNECTION; BEGIN /* Abre conex?o com um Servidor SMTP(Simple Mail Transfer Protocol), porta padr?o SMTP e 25 */ CONEXAO := utl_smtp.open_connection (ds_smtp_w,25); UTL_SMTP.HELO (CONEXAO, ds_smtp_w); /* Endereco do servidor de SMTP */ utl_smtp.command (CONEXAO, 'AUTH LOGIN'); utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_user_id_w))))); utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_senha_smtp_w))))); UTL_SMTP.MAIL (CONEXAO, ('<' || ds_email_origem_w || '>')); /* E-mail de quem esta mandando */ UTL_SMTP.RCPT (CONEXAO, ('<' || ds_email_destino_p || '>')); /* Para quem vou mandar */ UTL_SMTP.OPEN_DATA(CONEXAO); UTL_SMTP.WRITE_DATA(CONEXAO,'Subject'|| ': ' || ds_assunto || utl_tcp.CRLF); UTL_SMTP.WRITE_DATA(CONEXAO, utl_tcp.CRLF || ds_mensagem_p); UTL_SMTP.CLOSE_DATA(CONEXAO); UTL_SMTP.QUIT (CONEXAO); Exception WHEN OTHERS THEN utl_smtp.quit (conexao); raise_application_error(-20011,'N?o foi possivel enviar o e-mail devido ao seguinte erro: ' || sqlerrm); END ENVIA_EMAIL; Agradeço a atenção Motta. Porém mesmo utilizando o seu scipt, não houve diferença. No total são 30-33 seg. até concluir toda procedure. Só não sei se é normal esse tempo. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 10, 2012 Nunca medi aqui, mas esta SP não manda emails de forma massiva, apenas alguns pontuais em geral controle de processamentos. Vocês tem alguma aplicação fora Oracle que mande email assim ? Poderia fazer um teste "fora Oracle". Fiz este aqui teste depois : BEGIN DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'hh24:mi:ss')); ENVIA_EMAIL('envio@xpto.com.br', 'destino@xpto.com.br', 'Tempo de envio do email', 'Durante duas semanas, o Rio de Janeiro será a ...'); DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'hh24:mi:ss')); end; /* 12:01:28 12:01:29 */ Compartilhar este post Link para o post Compartilhar em outros sites