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

Responder a