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;