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, (''));
utl_smtp.rcpt (v_conn, (''));
utl_smtp.rcpt (v_conn, (''));
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;

Deixe um comentário