Michely, O texto que lhe enviei, é apenas um exemplo para que você pudesse verificar a aderência da solução ao seu problema, não tinha Imagino que o erro que você se refere é na linha: v_file_handle := utl_file.fopen( p_direct, p_file, 'r' ,32767); O diretório é obrigatório na função Utl_file.Fopen, logo o seu problema para o erro no diretório, tem relação direta com o parameter UTL_FILE_DIR no INIT.ORA. Todos os diretórios, tanto de leitura ou gravação, devem ser informados neste parameter. Espero que resolva seu problema. Sérgio Chaves.
________________________________ De: oracle_br@yahoogrupos.com.br em nome de Michely Carneiro Carneiro Enviada: qua 16/9/2009 10:26 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Informação e-mail com anexo PL/SQL - ORACLE Sérgio, Quando tento executar dá erro: INVALID DIRECTORY PACTH. Tenho certeza que não errei no caminho. Obrigada, Michely --- Em ter, 15/9/09, Sérgio Luiz Rodrigues Chaves <sergio.cha...@elumini.com.br <mailto:sergio.chaves%40elumini.com.br> > escreveu: De: Sérgio Luiz Rodrigues Chaves <sergio.cha...@elumini.com.br <mailto:sergio.chaves%40elumini.com.br> > Assunto: RES: [oracle_br] Informação e-mail com anexo PL/SQL - ORACLE Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> Data: Terça-feira, 15 de Setembro de 2009, 14:49 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-Disposit ion: 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-Dispositio n: 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-Dispositio n: 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 TROCAACENTOPORCODIG OHTML( 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 TROCAACENTOPORCODIG OHTML; --ENVIA O HEADER MYME PROCEDURE SEND_HEADER( NAME IN VARCHAR2, HEADER IN VARCHAR2) AS BEGIN UTL_SMTP.WRITE_ DATA(l_connectio n, NAME || ': ' || HEADER || UTL_TCP.CRLF) ; END; Abs. Sérgio Chaves. ____________ _________ _________ __ De: oracle...@yahoogrup os.com.br em nome de michelycarneiro Enviada: ter 15/9/2009 10:01 Para: oracle...@yahoogrup os.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] __________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com <http://br.maisbuscados.yahoo.com> [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]