Pular para o conteúdo

Fóruns Banco de dados Oracle Procedimento de Envio de E-mails usando CLOBS Procedimento de Envio de E-mails usando CLOBS

#74833
Anônimo

    [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_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_ctrl;
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    -- assinatura text/html
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    -- fim assinatura text/html
    v_mensagem := v_mensagem || '

    ' || v_ctrl;
    v_mensagem := v_mensagem || '

    ' || p_assunto || '

    ' || p_mensagem || '

    ' || v_ctrl;
    v_mensagem := v_mensagem || '


    ' || v_ctrl;
    v_mensagem := v_mensagem || ' ' || v_nome_remetente || '
    ' || v_ctrl;
    v_mensagem := v_mensagem || ' Site do Host

    ' || 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_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]