- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 12 anos, 8 meses atrás por airoosp.
-
AutorPosts
-
14 de março de 2012 às 12:32 am #103059airoospParticipante
Boa tarde,
Criei uma procedure para envio de e-mail pelo banco 9i usando o utl_smtp. Fiz alguns testes e gostaria de saber como capturar mensagens de erro.
Ou melhor, mensagem enviada mas o endereço de e-mail estava errado. Consequentemente a mesma não foi entregue. É possível capturar o erro e salvar em uma tabela?Obrigado.
Airton
14 de março de 2012 às 3:38 am #103060Victor ArmbrustMestreTenta usar EXCEPTION:
Exemplo:
(...)
mesg:= 'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || crlf ||
'From: ' || crlf ||
'Subject: '||subject || crlf ||
'To: '||recipient || crlf ||
message;
utl_smtp.helo(mail_coNn, mailhost);
utl_smtp.mail(mail_conn, sender);
utl_smtp.rcpt(mail_conn, recipient);
utl_smtp.data(mail_conn, mesg);
utl_smtp.quit(mail_conn);Exception
WHEN OTHERS THEN
raise_application_error(-20002,'unable to send the mail.'||SQLERRM);(...)
14 de março de 2012 às 4:49 pm #103063airoospParticipanteMesmo usando o exception não foi possível capturar o erro.
Segue abaixo a procedure.
PROCEDURE ENVIAR_EMAIL
(
p_mailhost IN VARCHAR2,
p_sender IN VARCHAR2,
p_recipient IN VARCHAR2,
p_subject IN VARCHAR2,
p_message IN VARCHAR2,
p_oracle_directory IN VARCHAR2,
p_arquivo IN VARCHAR2,
r_codigo OUT VARCHAR2,
r_texto OUT VARCHAR2
)is
mail_conn UTL_SMTP.CONNECTION;
v_directory_name varchar2(100);
v_file_name varchar2(100);
v_line varchar2(1000);
crlf varchar2(2):= chr(13) || chr(10);
mesg varchar2(32767);
v_slash_pos number;
v_file_handle utl_file.file_type;
invalid_path exception;
mesg_length_exceeded boolean := false;
v_reply utl_smtp.reply;BEGIN
begin
mail_conn := UTL_SMTP.OPEN_CONNECTION( p_mailhost, 25 );
utl_smtp.helo( mail_conn, p_mailhost );
utl_smtp.mail( mail_conn, p_sender );
utl_smtp.rcpt( mail_conn, p_recipient );
utl_smtp.open_data ( mail_conn );mesg:='Date: '|| TO_CHAR (SYSDATE-1/24, 'DD/MM/RR HH:MI AM')|| ' '|| DBTIMEZONE|| ' '|| '(GMT'|| DBTIMEZONE|| ')'|| crlf || 'From: ' || crlf || 'Subject: ' || p_subject || crlf || 'To: ' || p_recipient || crlf || 'Reply-To: ' || p_sender || crlf || 'Content-Transfer-Encoding: 7bit' || crlf || 'Content-Type: multipart/mixed; boundary="DMW.Boundary.605592468"' || crlf || 'Mime-Version: 1.0' || crlf || '--DMW.Boundary.605592468' || crlf || 'Content-Transfer-Encoding: binary'||crlf|| 'Content-Type: text/html' ||crlf || crlf || p_message || crlf ; utl_smtp.write_raw_data ( mail_conn, utl_raw.cast_to_raw(mesg) ); v_reply:=UTL_SMTP.close_data( mail_conn ); Exception WHEN OTHERS THEN raise_application_error(-20002,'unable to send the mail.'||SQLERRM); UTL_SMTP.QUIT( mail_conn );
end;
r_codigo:=v_reply.code;
r_texto:=v_reply.text;END;
No teste foi passado um endereço de destinário errado e mesmo assim não passou pelo exception.
O que eu fiz foi usar o UTL_SMTP.REPLY e o retorno foi:
v_reply.code = 25
v_reply.text = 2.6.0 Queued mail for deliverySe alguém tiver mais algum ideia, agradeço.
Obrigado.
Airton
-
AutorPosts
- Você deve fazer login para responder a este tópico.