Michely,
 
Verifique se o código abaixo lhe ajuda:
 
Procedure envia_arquivo(
    p_to            in Varchar2,
    p_from          in Varchar2,
    p_subject       in Varchar2,
    p_text          in Varchar2 default null, 
    p_direct        in Varchar2 default null,
    p_file          in Varchar2 default null)  is
    Mensagem           Varchar2(32767);
    v_file_handle      Utl_file.file_type;
    v_line             Varchar2(32767); 
    wlinha_parm_relat  Varchar2(1000); 
    w_num_seq          Number(09);
    wgrava       Number(9);
    wi         Number(09):=0;
    wsize        Number(9);
    listafile          Varchar2(50);
    
    Cursor Notes is
       Select 25 port, p.end_ip END_IP, p.nom_ccmail Servidor
         from ONDE_TEM_IP_DO_SERVIDOR_DE_EMAIL p;
    r_notes notes%rowtype;     
    c utl_smtp.connection;
    PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
     BEGIN
       utl_smtp.write_data(c, name || ': ' || header || utl_tcp.CRLF);
    END;
    BEGIN  
     open notes;
     fetch notes into r_notes;
     close notes;
                                
     c := utl_smtp.open_connection(r_notes.END_IP,r_notes.port);
     utl_smtp.helo(c, R_Notes.Servidor);
     utl_smtp.mail(c,  p_from);
     utl_smtp.rcpt(c,  p_to);    
     utl_smtp.open_data(c);
     send_header('From',    p_from);
     send_header('To',      p_to); 
     send_header('Subject', p_subject);
     mensagem:='Mime-Version: 1.0' || utl_tcp.CRLF ||'Content-Type: 
multipart/mixed; boundary="DMW.Boundary.605592468"' || utl_tcp.CRLF ||'' || 
utl_tcp.CRLF ;
     utl_smtp.write_data ( c, mensagem  );
     mensagem :=null;
     mensagem := mensagem || '--DMW.Boundary.605592468' || utl_tcp.CRLF 
||'Content-Type: text/plain; name="message.txt"; charset=US-ASCII' || 
utl_tcp.CRLF ||'Content-Disposition: inline; filename="message.txt"' || 
utl_tcp.CRLF ||'Content-Transfer-Encoding: 7bit' || utl_tcp.CRLF ||'' || 
utl_tcp.CRLF; 
     mensagem := mensagem || p_text || utl_tcp.CRLF ;
     utl_smtp.write_raw_data(c, utl_raw.cast_to_raw(mensagem));
     v_file_handle := utl_file.fopen(p_direct, p_file, 'r' ,32767);
     mensagem  := utl_tcp.CRLF || '--DMW.Boundary.605592468' || utl_tcp.CRLF ||
             'Content-Type: application/octet-stream; name="' || p_file || '"' 
|| utl_tcp.CRLF ||
             'Content-Disposition: attachment; filename="' || p_file || '"' || 
utl_tcp.CRLF ||
             'Content-Transfer-Encoding: 7bit' || utl_tcp.CRLF || utl_tcp.CRLF ;
     utl_smtp.write_data ( c, mensagem  );
     begin
       loop
           utl_file.get_line(v_file_handle, v_line);
           mensagem := v_line || utl_tcp.CRLF ;
           utl_smtp.write_data ( c, mensagem );
       end loop;
       mensagem := utl_tcp.CRLF; 
       utl_smtp.write_data ( c, mensagem );
       utl_file.fclose(v_file_handle);
       exception
             when utl_file.invalid_path then
                    dbms_output.put_line('Error in opening attachment ');
             when others then
                 if utl_file.is_open(v_file_handle) Then
                    utl_file.fclose(v_file_handle);
                 end if;       
    end;
    mensagem := utl_tcp.CRLF || '--DMW.Boundary.605592468' || utl_tcp.CRLF ||'' 
|| utl_tcp.CRLF; 
    utl_smtp.write_data ( c, mensagem  );
    v_sql:=NULL;
   /**  monta uma query para gerar planilha dinamicamente **/
/*    X:=1;
      While X < 6000 Loop
             Pos:=Instr(V_SQL,chr(13),X,1);
             If Pos=0 Then
                Dbms_Output.Put_Line(Substr(V_SQL,X));
                X:=10000;
             Else
                Dbms_Output.Put_Line(Substr(V_SQL,X,(Pos-X)+1));
                X:=Pos+1;
             End If;
      End Loop;*/
                          
 /***** GRAVA PARAMETROS PARA GERAÇÂO DE PLANILHAS**/
  
   mensagem  := utl_tcp.CRLF || '--DMW.Boundary.605592468' || utl_tcp.CRLF ||
            'Content-Type: application/octet-stream; name="' || LISTAFILE || 
'"' || utl_tcp.CRLF ||
            'Content-Disposition: attachment; filename="' || LISTAFILE || '"' 
|| utl_tcp.CRLF ||
            'Content-Transfer-Encoding: 7bit' || utl_tcp.CRLF || utl_tcp.CRLF ;
   utl_smtp.write_raw_data(c, utl_raw.cast_to_raw(mensagem));
 
   BEGIN
/** PROCEDIMENTO PARA GERAÇÃO DE PLANILHAS ***/
   v_file_handle := utl_file.fopen(p_direct, LISTAFILE, 'r' );
    begin
       loop
           utl_file.get_line(v_file_handle, v_line);
           mensagem := v_line || utl_tcp.CRLF ;
           utl_smtp.write_data ( c, mensagem );
       end loop;
       mensagem := utl_tcp.CRLF; 
       utl_smtp.write_data ( c, mensagem );
       utl_file.fclose(v_file_handle);
       exception
             when utl_file.invalid_path then
                    dbms_output.put_line('Error in opening attachment ');
             when others then
                 if utl_file.is_open(v_file_handle) Then
                    utl_file.fclose(v_file_handle);
                 end if;       
    end;
     exception
      when OTHERS then
           NULL;
    END;
    end if;
    mensagem := mensagem || '--DMW.Boundary.605592468' || utl_tcp.CRLF ||'' || 
utl_tcp.CRLF; 
    utl_smtp.write_data ( c, mensagem  );       
     utl_smtp.close_data(c);
     utl_smtp.quit(c);
   EXCEPTION
     WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
       utl_smtp.quit(c);
       raise_application_error(-20000,
         'Failed to send mail due to the following error: ' || sqlerrm);
   END; 
   FUNCTION TROCAACENTOPORCODIGOHTML(
                                  WTEXTO VARCHAR2) RETURN VARCHAR2 IS
-- LOCAL VARIABLES HERE
  WI        NUMBER;
  WSIZE     NUMBER;
  WRETORNO  VARCHAR2(32767);
  WCARACTER  CHAR;
  BEGIN
    WI:=0;
    WSIZE:=LENGTH(WTEXTO);
    IF WSIZE!=0 THEN
      WCARACTER:='';
      FOR WI IN 1..WSIZE LOOP
        WCARACTER := SUBSTR(WTEXTO,WI,1);
        IF (WCARACTER='á') THEN
           WRETORNO := WRETORNO ||  '&aacute;';
        ELSIF(WCARACTER='Á') THEN
             WRETORNO := WRETORNO ||  '&Aacute;';
        ELSIF(WCARACTER='ç') THEN
             WRETORNO := WRETORNO ||  '&ccedil;';
        ELSIF(WCARACTER='ã') THEN
             WRETORNO := WRETORNO ||  '&atilde;';
        ELSIF(WCARACTER='é') THEN
             WRETORNO := WRETORNO ||  '&eacute;';
        ELSIF(WCARACTER='ê') THEN
             WRETORNO := WRETORNO ||  '&ecirc;';
        ELSIF(WCARACTER='í') THEN
             WRETORNO := WRETORNO ||  '&iacute;';
        ELSIF(WCARACTER='ó') THEN
             WRETORNO := WRETORNO ||  '&oacute;';
        ELSIF(WCARACTER='ô') THEN
             WRETORNO := WRETORNO ||  '&ocirc;';
        ELSIF(WCARACTER='õ') THEN
             WRETORNO := WRETORNO ||  '&otilde;';
        ELSIF(WCARACTER='ú') THEN
             WRETORNO := WRETORNO ||  '&uacute;';
        ELSIF(WCARACTER='à') THEN
             WRETORNO := WRETORNO ||  '&agrave;';
        ELSIF(WCARACTER='â') THEN
             WRETORNO := WRETORNO ||  '&acirc;';
        ELSIF(WCARACTER='Ã') THEN
             WRETORNO := WRETORNO ||  '&Atilde;';
        ELSIF(WCARACTER='Ç') THEN
             WRETORNO := WRETORNO ||  '&Ccedil;';
        ELSIF(WCARACTER='Õ') THEN
             WRETORNO := WRETORNO ||  '&Otilde;';
        ELSIF(WCARACTER='É') THEN
             WRETORNO := WRETORNO ||  '&Eacute;';
        ELSIF(WCARACTER='Ê') THEN
             WRETORNO := WRETORNO ||  '&Ecirc;';
        ELSIF(WCARACTER='Í') THEN
             WRETORNO := WRETORNO ||  '&Iacute;';
        ELSIF(WCARACTER='À') THEN
             WRETORNO := WRETORNO ||  '&Agrave;';
        ELSIF(WCARACTER='Â') THEN
             WRETORNO := WRETORNO ||  '&Acirc;';
        ELSIF(WCARACTER='Ó') THEN
             WRETORNO := WRETORNO ||  '&Oacute;';
        ELSIF(WCARACTER='Ô') THEN
             WRETORNO := WRETORNO ||  '&Ocirc;';
        ELSIF(WCARACTER='Ú') THEN
             WRETORNO := WRETORNO ||  '&Uacute;';
        ELSIF(WCARACTER='°') THEN
             WRETORNO := WRETORNO ||  '&ordf;';
        ELSIF(WCARACTER='ª') THEN
             WRETORNO := WRETORNO ||  '&ordm;';
        ELSIF(WCARACTER='?') THEN
             WRETORNO := WRETORNO ||  '&para;';
        ELSE
             WRETORNO := WRETORNO || WCARACTER;
        END IF;
      END LOOP;
      RETURN (WRETORNO);
    ELSE
      RETURN (WTEXTO);
    END IF;
  END TROCAACENTOPORCODIGOHTML;
--ENVIA O HEADER MYME
PROCEDURE SEND_HEADER(
                      NAME IN VARCHAR2,
                      HEADER IN VARCHAR2) AS
  BEGIN
    UTL_SMTP.WRITE_DATA(l_connection, NAME || ': ' || HEADER || UTL_TCP.CRLF);
END;    

 
 
Abs.
 
Sérgio Chaves.
 
 

________________________________

De: oracle_br@yahoogrupos.com.br em nome de michelycarneiro
Enviada: ter 15/9/2009 10:01
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Informação e-mail com anexo PL/SQL - ORACLE


  

Boa dia a todos!


Será que alguém pode me ajudar com um probleminha?

É que tenho que gerar uma procedure que irá enviar um e-mail com anexo.

O anexo eu terei que localizar em uma pasta do meu computador.

Alguém tem idéia de como fazer isso? 

Eu consigo enviar um e-mail via banco, mas não consigo anexar um arquivo do meu 
computador.

Obrigada,

Michely Carneiro






[As partes desta mensagem que não continham texto foram removidas]

Responder a