Beleza pessoal, como prometido vamos movimentar essa área destinada aos SGDB's.
Neste post irei apresentar um procedimento para envio de emails no SGBD Oracle 11G.
Envio de emails no próprio banco de dados é util em situações onde por exemplo, você deseja saber o status de uma procedure em execução.
O procedimento para envio de emails pode ser visualizado abaixo:
Observações sobre o procedimento:
UTL_SMTP.open_connection(l_mailhost, 25): Abertura de conexão com o servidor smtp (l_mailhost = Host SMTP / segundo parametro = Porta SMTP)
UTL_SMTP.close_data(l_mail_conn): Termino de escrita de dados.
UTL_SMTP.quit(l_mail_conn): Finalização do email e sinalização que o mesmo esta pronto para envio.
Chr(13): Quebra de linha
Durante a execução do procedimento para envio de email, é possível que ocorra errros de ACL. Este erro pode ser visualizado abaixo.
ERRO na linha 1:
ORA-24247: acesso à rede negado pela ACL (access control list)
ORA-06512: em "SYS.UTL_TCP", line 17
ORA-06512: em "SYS.UTL_TCP", line 246
ORA-06512: em "SYS.UTL_SMTP", line 115
ORA-06512: em "SYS.UTL_SMTP", line 138
ORA-06512: em line 11
Para resolver este problema, execute como SYSDBA os comandos abaixo:
Bom amigos por hora é só, dúvidas só deixar a baixo.
att. leinad .
Neste post irei apresentar um procedimento para envio de emails no SGBD Oracle 11G.
Envio de emails no próprio banco de dados é util em situações onde por exemplo, você deseja saber o status de uma procedure em execução.
O procedimento para envio de emails pode ser visualizado abaixo:
Código:
create or replace procedure e_mail_message ( to_name varchar2, subject varchar2, message varchar2 ) IS L_MAILHOST VARCHAR2(64) := <IP DO SERVIDOR DE EMAIL>; l_from VARCHAR2(64) := <ENDERECO DE EMAIL DE ORIGEM>; L_TO VARCHAR2(64) := to_name; l_subject VARCHAR2(64) := subject; l_mail_conn UTL_SMTP.connection; BEGIN l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25); UTL_SMTP.helo(l_mail_conn, l_mailhost); UTL_SMTP.mail(l_mail_conn, l_from); UTL_SMTP.rcpt(l_mail_conn, l_to); UTL_SMTP.open_data(l_mail_conn); UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || Chr(13)); UTL_SMTP.write_data(l_mail_conn, 'From: ' || l_from || Chr(13)); UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || l_subject || Chr(13)); UTL_SMTP.write_data(l_mail_conn, 'To: ' || l_to || Chr(13)); UTL_SMTP.WRITE_DATA(L_MAIL_CONN, '' || CHR(13)); UTL_SMTP.write_data(l_mail_conn, MESSAGE || Chr(13)); UTL_SMTP.close_data(l_mail_conn); UTL_SMTP.quit(l_mail_conn); END;
UTL_SMTP.open_connection(l_mailhost, 25): Abertura de conexão com o servidor smtp (l_mailhost = Host SMTP / segundo parametro = Porta SMTP)
UTL_SMTP.close_data(l_mail_conn): Termino de escrita de dados.
UTL_SMTP.quit(l_mail_conn): Finalização do email e sinalização que o mesmo esta pronto para envio.
Chr(13): Quebra de linha
Durante a execução do procedimento para envio de email, é possível que ocorra errros de ACL. Este erro pode ser visualizado abaixo.
ERRO na linha 1:
ORA-24247: acesso à rede negado pela ACL (access control list)
ORA-06512: em "SYS.UTL_TCP", line 17
ORA-06512: em "SYS.UTL_TCP", line 246
ORA-06512: em "SYS.UTL_SMTP", line 115
ORA-06512: em "SYS.UTL_SMTP", line 138
ORA-06512: em line 11
Para resolver este problema, execute como SYSDBA os comandos abaixo:
Código:
begin dbms_network_acl_admin.create_acl ( acl => 'utl_mail.xml', description => 'Permite enviar e-mail', principal => 'USUARIO', is_grant => TRUE, privilege => 'connect' ); commit; end; / begin dbms_network_acl_admin.add_privilege ( acl => 'utl_mail.xml', principal => 'NOME DO USUARIO', is_grant => TRUE, privilege => 'resolve' ); commit; end; / begin dbms_network_acl_admin.assign_acl( acl => 'utl_mail.xml', host => 'IP DO SMTP' ); commit; end; /
att. leinad .
Comment