› Fóruns › Banco de dados Oracle › Procedimento de Envio de E-mails usando CLOBS › Procedimento de Envio de E-mails usando CLOBS
[quote=”Anonymous”:2jnba0pc]Ol? Pessoal,
? a primeira vez que estou postando aqui nesse f?rum, e vou direto ao ponto de interesse ( o motivo pelo qual me registrei no grupo )
Estou h? pouco tempo desenvolvendo algumas rotinas em pl/sql e estou tendo dificuldade de fazer com que esse procedimento funcione corretamente.
A Id?ia desse procedimento consiste em enviar mensagens cujo o conte?do seja um CLOB, pelo fato de armazenar c?digos HTML e muitas vezes criarem relat?rios mais elaborados.
todas as vezes que executo esse procedimento ele aparece uma mensagem de erro no package sys.utl_smtp. aos quais n?o tenho como verificar o bloco de c?digo que est? sendo executado ou est? gerando o erro. ( /* Source is wrapped */ ), impedindo que eu possa verificar em qual parte do c?digo eu possa estar cometendo erros.
a imagem da mensagem de erro ? a seguinte
e o C?digo do Procedimento ? o seguinte :
procedure prc_envia_email
( p_remetente in varchar2
, p_destinatario in varchar2
, p_assunto in varchar2
, p_mensagem in varchar2
, p_media_type in varchar2
) as
v_fim number;
v_count number;
v_mensagem clob;
v_temp varchar2( 32767 );
v_limite varchar2( 32767 );
v_nome_remetente varchar2( 70 ) := 'Nome do Remetente';;
v_smtp varchar2( 50 ) := 'smtp.host.com.br';
v_ctrl varchar2( 2 ) := chr( 10 );
v_conn utl_smtp.connection;
begin
v_conn := utl_smtp.open_connection( v_smtp , 25 );
utl_smtp.helo( v_conn , v_smtp );
utl_smtp.mail( v_conn , p_remetente );
utl_smtp.rcpt( v_conn , p_destinatario );
-- cabecalho em text/html
v_temp := v_temp || 'MIME-Version: 1.0' || v_ctrl;
v_temp := v_temp || 'To: ' || p_destinatario || v_ctrl;
v_temp := v_temp || 'From: ' || p_remetente || v_ctrl;
v_temp := v_temp || 'Subject: ' || p_assunto || v_ctrl;
v_temp := v_temp || 'Reply-To: ' || p_remetente || v_ctrl;
v_temp := v_temp || 'Content-Type: text/html; boundary=' || chr(34) || v_limite || chr(34) || v_ctrl;
-- grava cabecalho em text/html
dbms_lob.createtemporary( v_mensagem, false, 10 );
dbms_lob.write( v_mensagem , length( v_temp ) , 1 , v_temp );
-- mensagem em text/html
v_mensagem := v_mensagem || '' || v_ctrl;
v_mensagem := v_mensagem || ' ' || v_ctrl;
v_mensagem := v_mensagem || ' ' || v_ctrl;
v_mensagem := v_mensagem || ' ' || v_ctrl;
v_mensagem := v_mensagem || ' ' || v_ctrl;
v_mensagem := v_mensagem || '' || v_ctrl;
v_mensagem := v_mensagem || '
v_mensagem := v_mensagem || '
v_mensagem := v_mensagem || '
' || v_ctrl;
v_mensagem := v_mensagem || '
' || v_ctrl;
v_mensagem := v_mensagem || '
' || v_ctrl;
v_mensagem := v_mensagem || '' || v_ctrl;
v_mensagem := v_mensagem || '' || v_ctrl;
-- grava conteudo da mensagem
v_temp := v_ctrl || v_ctrl || v_limite || v_ctrl;
v_fim := dbms_lob.getLength( v_mensagem ) + 1;
dbms_lob.write( v_mensagem , length( v_temp ) , v_fim , v_temp );
v_fim := 1;
v_count := 10000;
utl_smtp.open_data( v_conn );
while v_fim < dbms_lob.getLength( v_mensagem ) loop
utl_smtp.write_data( v_conn, dbms_lob.substr( v_mensagem , v_count , v_fim ) );
v_fim := v_fim + v_count ;
v_count := least( 10000 , dbms_lob.getlength( v_mensagem ) - v_count );
end loop;
utl_smtp.close_data( v_conn );
utl_smtp.quit( v_conn );
dbms_lob.freetemporary( v_mensagem );
end prc_envia_email;
Estou usando :
Sistema Operacional : Slackware 10
Oracle 10g :
PS – 1 : No oracle 9I esse mesmo procedimento funcionava perfeitamente. O que me leva a imaginar que possa ser um problema de permiss?o.
PS – 2 : O sistema operacional antigo era o ( Red Hat )
PS – 3 : Foi criado um sistema de anti-spam, adicionando autentica??o de SMTP ( que eu tamb?m n?o consegui fazer funcionar nesse mesmo
procedimento )
PS – 4 : Outros exemplos de procedimentos de e-mail usando with RAW and VARCHAR2 como tipos de dados continuam funcionando, por?m n?o tem utilidade para os e-mails que tenho que tem um a quantidade de caracteres ( kb ) superior a que o tipo varchar2 possa suportar.
Obrigado a todos,
Jefferson Petilo
Desenvolvedor ColdFusion[/quote]
