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 || 'á'; ELSIF(WCARACTER='Á') THEN WRETORNO := WRETORNO || 'Á'; ELSIF(WCARACTER='ç') THEN WRETORNO := WRETORNO || 'ç'; ELSIF(WCARACTER='ã') THEN WRETORNO := WRETORNO || 'ã'; ELSIF(WCARACTER='é') THEN WRETORNO := WRETORNO || 'é'; ELSIF(WCARACTER='ê') THEN WRETORNO := WRETORNO || 'ê'; ELSIF(WCARACTER='í') THEN WRETORNO := WRETORNO || 'í'; ELSIF(WCARACTER='ó') THEN WRETORNO := WRETORNO || 'ó'; ELSIF(WCARACTER='ô') THEN WRETORNO := WRETORNO || 'ô'; ELSIF(WCARACTER='õ') THEN WRETORNO := WRETORNO || 'õ'; ELSIF(WCARACTER='ú') THEN WRETORNO := WRETORNO || 'ú'; ELSIF(WCARACTER='à') THEN WRETORNO := WRETORNO || 'à'; ELSIF(WCARACTER='â') THEN WRETORNO := WRETORNO || 'â'; ELSIF(WCARACTER='Ã') THEN WRETORNO := WRETORNO || 'Ã'; ELSIF(WCARACTER='Ç') THEN WRETORNO := WRETORNO || 'Ç'; ELSIF(WCARACTER='Õ') THEN WRETORNO := WRETORNO || 'Õ'; ELSIF(WCARACTER='É') THEN WRETORNO := WRETORNO || 'É'; ELSIF(WCARACTER='Ê') THEN WRETORNO := WRETORNO || 'Ê'; ELSIF(WCARACTER='Í') THEN WRETORNO := WRETORNO || 'Í'; ELSIF(WCARACTER='À') THEN WRETORNO := WRETORNO || 'À'; ELSIF(WCARACTER='Â') THEN WRETORNO := WRETORNO || 'Â'; ELSIF(WCARACTER='Ó') THEN WRETORNO := WRETORNO || 'Ó'; ELSIF(WCARACTER='Ô') THEN WRETORNO := WRETORNO || 'Ô'; ELSIF(WCARACTER='Ú') THEN WRETORNO := WRETORNO || 'Ú'; ELSIF(WCARACTER='°') THEN WRETORNO := WRETORNO || 'ª'; ELSIF(WCARACTER='ª') THEN WRETORNO := WRETORNO || 'º'; ELSIF(WCARACTER='?') THEN WRETORNO := WRETORNO || '¶'; 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]