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.
Descriçã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
|