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 || 'á'; > 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.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]