O objetivo deste é explicar como enviar um e-mail simples usando o PL/SQL. Neste podemos enviar status do banco de dados, estatísticas entre outras. Vamos criar uma função para retornar o estado do banco de dados. Vou criar uma função para a realização do teste para testarmos que podemos usar Functions em Procedimentos, mas antes vamos dar permissão para o usuário tomiasi nas views v$instance e v$database.
SQL> grant all on v_$instance to tomiasi; Grant succeeded. SQL> grant all on v_$database to tomiasi; Grant succeeded. SQL>
Agora vamos criar a função.
create or replace function tomiasi.estado_banco_dados return varchar is estado char(20); begin select open_mode into estado from v$database; return(estado); end; /
Com o script abaixo, podemos enviar um e-mail simples como, por exemplo, o estado do banco de dados. OBS: Por motivos de segurança, usarei outro número da porta SMTP de número 999.
create or replace procedure envia_email
(
de in varchar2,
para in varchar2,
assunto in varchar2,
mailhost in varchar2,
username in varchar2,
password in varchar2
) is
mail_conn utl_smtp.connection;
mail_reply utl_smtp.replies;
crlf varchar2(2):= chr(13)||chr(10);
v_corpo_da_mensagem varchar2(2000);
mensagem varchar2(20);
sid varchar2(30);
begin
select estado_banco_dados into mensagem from dual;
select upper(instance_name) into sid from v$instance;
v_corpo_da_mensagem:= 'Date: ' ||TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss')||crlf||
'From: ' ||de ||crlf||
'To: ' ||para ||crlf||
'Subject: '||assunto ||crlf||
'O estado de seu banco de dados ' || sid ||' esta: ' || mensagem;
mail_conn := utl_smtp.open_connection(mailhost,999);
utl_smtp.helo (mail_conn, mailhost);
utl_smtp.command (mail_conn, 'AUTH LOGIN');
utl_smtp.command (mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(username))));
utl_smtp.command (mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(password))));
utl_smtp.mail (mail_conn, de);
utl_smtp.rcpt (mail_conn, para);
utl_smtp.data (mail_conn, v_corpo_da_mensagem);
utl_smtp.quit (mail_conn);
exception
when others then
raise_application_error(-20002,'Não foi possível enviar o email!!!'||sqlerrm);
end;
/
Após criar todos a função e o procedimento vamos executar o procedimento para envio.
exec envia_email('maycon.tomiasi@teiko.com.br','maycon.tomiasi@teiko.com.br','Estado do Banco de Dados','host_email_server','maycon.tomiasi@teiko.com.br','********');
Segue abaixo o e-mail recebido. De: maycon.tomiasi@teiko.com.br [mailto:maycon.tomiasi@teiko.com.br] Enviada em: terça-feira, 11 de outubro de 2011 16:12 Para: maycon.tomiasi@teiko.com.br Assunto: Estado do Banco de Dados O estado de seu banco de dados DBPROD esta: READ WRITE Para maiores informações sobre o assunto entre em http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/u_smtp.htm
Autor: Maycon Tomiasi
Formado em Tecnologia da Informação na FIPP (Faculdade de Informática de Presidente Prudente), Analista DBA Oracle pela Teiko Soluções em Tecnologia da Informação, residente em Blumenau/ SC, Certificado OCP 10g/11g/12c, OCS 11g Implementation, OCE 11g Performance Tuning, OCE 11g RAC & GRID e OPN Specialist. Conhecimentos em PHP.







One thought on “Envio de E-mail através de PL/SQL”