Ir para o conteúdo
ou

Software livre Brasil

 Voltar a SAVEPOINT
Tela cheia

Enviando e-mail autenticado pelo Oracle

28 de Maio de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 1243 vezes

Enviar e-mail utilizando PL/SQL dentro do Oracle é realmente uma tarefa razoavelmente simples com o UTL_SMTP ou mesmo com o UTL_TCP. O que não aparece de forma simples na documentação é como mandar um e-mail com usuário e senha autenticados.

Bom, não é algo do outro mundo, mas segue aqui um pequeno script que mostra como fazer isso. Você só precisa editar os parâmetros iniciais e só chamando ele, já temos um teste. Depois é só passar o assunto e mensagem como parâmetro na procedure e você já pode enviar seus alertas para todo mundo.

Segue abaixo o script:

 
CREATE OR REPLACE PROCEDURE envia_email(
  p_assunto          VARCHAR2      := 'Teste de envio',
  p_mensagem         CLOB          := 'Teste'
) IS
  v_remetente        VARCHAR2(50)  :='fabio.telles@midstorm.org';  -- Remetente
  v_destinatario     VARCHAR2(50)  :='cliente@midstorm.org';       -- Destinatário
  v_destinatario_cc  VARCHAR2(50)  :='dba@savepoint.org';          -- Com cópia
  v_smtp             VARCHAR2(20)  := '192.168.0.1';               -- Endereco IP do SMTP
  v_smtp_user        VARCHAR2(50)  := 'dba@midstorm.org';          -- Usuário autenticado no SMTP
  v_smtp_user_pass   VARCHAR2(50)  := 'sua_senha';                 -- Senha do usuário SMTP
  v_conn             utl_smtp.connection;                          -- Abre conexão SMTP e HTTP
BEGIN
  -- Abre conexão com um Servidor SMTP, porta padrão é 25
  v_conn := utl_smtp.open_connection (v_smtp,25);
  utl_smtp.helo (v_conn, v_smtp);
  utl_smtp.command (v_conn, 'AUTH LOGIN');
  utl_smtp.command (v_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(
    utl_raw.cast_to_raw((v_smtp_user)))));
  utl_smtp.command (v_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(
    utl_raw.cast_to_raw((v_smtp_user_pass)))));
  utl_smtp.mail (v_conn, ('<' || v_remetente || '>'));
  utl_smtp.rcpt (v_conn, ('<' || v_destinatario || '>'));
  utl_smtp.rcpt (v_conn, ('<' || v_destinatario_cc || '>'));
 
  utl_smtp.open_data(v_conn);
  utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw('From:'    || v_remetente  
    || utl_tcp.crlf));
  utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw('To:'      || v_destinatario 
    || utl_tcp.crlf));
  utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw('Cc:'      || v_destinatario_cc 
    || utl_tcp.crlf));
  utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw('Subject:' || p_assunto 		
    || utl_tcp.crlf)); 
  utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(' '        || utl_tcp.crlf));
  utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(utl_tcp.crlf || p_mensagem)); 
 
  utl_smtp.CLOSE_DATA(v_conn);
  utl_smtp.QUIT (v_conn);
 
EXCEPTION
  WHEN OTHERS THEN
    utl_smtp.quit (v_conn);
    RAISE_APPLICATION_ERROR(-20011,'Não foi possível enviar o e-mail devido ao seguinte erro: ' 
      || sqlerrm);
END ENVIA_EMAIL;

Fonte: http://feedproxy.google.com/~r/midstorm/~3/Cw5hIfOmJRo/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.