Home - www.devmedia.com.br


Enviando
e-mail utilizando o Oracle


Deve-se utilizar as packages UTL_SMTP e UTL_TCP. Para empregar estas packages internas e chamá-las eventualmente em todos os lugares aplicáveis nos sistemas poderá ser escrita uma rotina. As mensagens poderão ser enviadas sempre que um evento ocorrer ou poderão ser programadas como um JOB.

 

O que você vai necessitar para executar esta tarefa.

1. O nome de um servidor de e-mail ou o endereço IP. Este servidor poderá ser de uma intranet ou de um serviço remoto que esteja disponível. A palavra “localhost” pode ser usada para chamar o Oracle a usar o serviço “default” para o Sistema Operacional (SMTP).

2. O Sistema Operacional deverá suportar os serviços de SMTP. A maioria dos Unix do mercado suportam este serviço. Para o Windows 2000, verificar se o serviço de SMTP está disponível.

3. O serviço irá utilizar uma porta para comunicar-se com o SMTP. Normalmente o valor “default” da porta é o 25.

4. O banco de dados deverá ter os serviços de Java habilitados. A opção do Jserver deverá ser instalada usando os scripts (initjvm.sql e initplsj.sql).

5. A package UTL_SMTP deverá existir na base e o seu “owner” deverá ser o usuário SYS.


D
escrição das rotinas da package UTL_SMTP:

UTL_SMTP.OPEN_CONNECTION
Abre uma conexão para um servidor de SMTP. UTL_SMTP.HELLO: Inicializa o serviço “handshake”.

UTL_SMTP.MAIL
Inicializa a transação de envio do e-mail para o servidor.

UTL_SMTP.RCPT
Especifica o nome do recipiente.

UTL_SMTP.DATA
Especifica o corpo da mensagem.

UTL_SMTP.OPEN_DATA / UTL_SMTP.WRITE_DATA / UTL_SMTP.CLOSE_DATA
Um modo mais refinado de especificar o corpo da mensagem com maiores controles.

UTL_SMTP.VRFY
Verifica a validade dos endereços.

UTL_SMTP.QUIT
Termina a sessão e desconecta do servidor de SMTP.


Exemplo:

create or replace PROCEDURE send_mail
( sender IN VARCHAR2,
recipient IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2)
IS
mailhost VARCHAR2(30) := '200.32.0.0'; -- > NOME OU IP DO SERVIDOR DE SMTP
mail_conn utl_smtp.connection;
crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 );
mesg VARCHAR2( 1000 );

BEGIN
mail_conn := utl_smtp.open_connection(mailhost, 25);

mesg:= 'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || crlf ||
'From: <'||sender||'>' || crlf ||
'Subject: '||subject || crlf ||
'To: '||recipient || crlf ||
'ENVIANDO E-MAIL UTILIZANDO ORACLE - GPO'||crlf||
' '||crlf||
'CORPO DA MENSAGEM... COLOQUE AQUI SUA MENSAGEM !'||crlf||
'CORPO DA MENSAGEM... COLOQUE AQUI SUA MENSAGEM !'||crlf||
'CORPO DA MENSAGEM... COLOQUE AQUI SUA MENSAGEM !'||crlf||
' '||crlf||message;
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, sender);
utl_smtp.rcpt(mail_conn, recipient);
utl_smtp.data(mail_conn, mesg);
utl_smtp.quit(mail_conn);

Exception
WHEN OTHERS THEN
raise_application_error(-20002,'unable to send the mail.'||SQLERRM);
END;
/
show errors;

Para executar a procedure acima utilize:

execute send_mail('artigo@sqlmagazine.com.br', 'seu.email@sqlmagazine.com.br',
'Mensagem enviada pela SQL Magazine !', 'SQL');

                                                                                                                    
Por Adriana Ferreira
adriana@sqlmagazine.com.br

 

  O Otimizador do Oracle para desenvolvedores III    
  O Otimizador do Oracle para desenvolvedores II    
  O Otimizador do Oracle para desenvolvedores I – Introdução    
  Envio de E-mails contendo anexos utilizando PL/SQL e JSP (Java Stored Procedure)    
  Preservando Estatísticas no Oracle    
  Introdução ao PLSQL    
  Condicional em um SELECT    
  Enviando e-mail com Oracle    
  Introdução ao Oracle    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004