Vou tentar com um arquivo do servidor.

--- Em qua, 16/9/09, jlchiappa <jlchia...@yahoo.com.br> escreveu:


De: jlchiappa <jlchia...@yahoo.com.br>
Assunto: Re: RES: RES: [oracle_br] Informação e-mail com anexo PL/SQL - ORACLE
Para: oracle_br@yahoogrupos.com.br
Data: Quarta-feira, 16 de Setembro de 2009, 12:56


  



pmfji, mas ** talvez ** a questão seja outra : a colega disse "que tenho que 
gerar uma procedure que irá enviar um e-mail com anexo", mas disse também "O 
anexo eu terei que localizar em uma pasta do meu computador" - ORA, se esse 
computador dela não é o servidor aonde roda o banco Oracle, nós sabemos que por 
sí só o utl_file só consegue abrir arquivos disponíveis ** LOCALMENTE ** , ie, 
que estejam na MESMA máquina do servidor Oracle.... SE o tal arquivo não está 
na mesma máquina que o servidor, as únicas soluções são : OU transferir o tal 
arquivo pro servidor (via ftp ou o que for), OU ter um programinha- cliente na 
máquina cliente que seja capaz de ler o arquivo e o transferir e/ou o gravar no 
banco (sql*loader talvez, ou escrever algo em Java, Forms, ou qquer linguagem 
que domine e seja capaz), OU se instala e configura um software capaz de 
permitir o servidor acessar a máquina-cliente (pode ser Samba, NFS, ou 
outros)...

[]s

Chiappa

--- Em oracle...@yahoogrup os.com.br, Sérgio Luiz Rodrigues Chaves 
<sergio.chaves@ ...> escreveu
>
> 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...@yahoogrup os.com.br em nome de Michely Carneiro Carneiro
> Enviada: qua 16/9/2009 10:26
> Para: oracle...@yahoogrup os.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.chaves@ ... 
> <mailto:sergio. chaves%40elumini .com.br> > escreveu:
> 
> De: Sérgio Luiz Rodrigues Chaves <sergio.chaves@ ... <mailto:sergio. 
> chaves%40elumini .com.br> >
> Assunto: RES: [oracle_br] Informação e-mail com anexo PL/SQL - ORACLE
> Para: oracle...@yahoogrup os.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.maisbusca dos.yahoo. com <http://br.maisbusca dos.yahoo. com> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> 
> 
> 
> [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

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

Responder a