Enviando e-mails com PL/SQL em Bancos de Dados Oracle - Parte 2

Por Fabio Prado
Publicado en Outubro 2013

Dando continuidade ao artigo Enviando e-mails com PL/SQL em Bancos de Dados Oracle, irei compartilhar nesta 2a. parte, uma package chamada PKG_ENVIA_EMAIL, que eu desenvolvi para facilitar o trabalho de envio de e-mails com ou sem anexo. Essa package internamente utiliza a package UTL_MAIL para enviar mensagens sem anexo e a package UTL_SMTP para enviar mensagens com anexo do tipo texto. Ela foi criada como o objetivo didático de demonstrar o uso das 2 packages de envio de e-mail e pode ser utilizada para padronizar e facilitar o envio de e-mails com anexos maiores que 32K através do uso da package UTL_SMTP, pois não é muito fácil utilizá-la para essa finalidade (para mais informações sobre este assunto, leia a 1a. parte do artigo).

A package PKG_ENVIA_EMAIL pode ser instalada e utilizada em qualquer schema de usuário de um SGBD Oracle, desde que sejam atendidos os pré-requisitos especificados na 1a. parte deste artigo. Ela contém 1 função e 2 stored procedures, conforme descrições abaixo:

- FC_GERAR_ARRAY_STRING:

Função privada que permite gerar array para separar destinatários e enviar o e-mail para múltiplos destinatários, quando necessário.

- SP_ENVIAR_EMAIL:

Stored Procedure pública que pode ser utilizada para enviar e-mails sem anexo. Utiliza internamente a package UTL_MAIL.

- SP_ENVIAR_EMAIL_COM_ANEXO:

Stored Procedure pública que pode ser utilizada para enviar e-mails COM anexo do tipo texto. Utiliza internamente a package UTL_SMTP e permite enviar somente 1 anexo por e-mail.

É importante ressaltar que as procedures dessa package só podem ser utilizadas para enviar 2 tipos de e-mail: sem anexo ou com 1 anexo do tipo texto. Se você precisar mandar mais de 1 anexo do tipo texto ou outros tipos de anexos, tais como arquivos de vídeo ou som, consulte a documentação oficial da Oracle para criar nova(s) procedure(s) com sobrecarga dentro da package PKG_ENVIA_EMAIL, incluindo o código necessário para executar essas tarefas.

Para enviar um e-mail sem anexo, execute a stored procedure SP_ENVIAR_EMAIL, como no exemplo abaixo, substituindo os valores para os parâmetros:

BEGIN
 	PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL (P_ASSUNTO => 'Assunto do e-mail', 
    	P_MSG => 'Mensagem', 
    P_EMAIL_ORIGEM => 'oracle@oracle.com', 
 	P_EMAIL_DESTINO => 'fbifabio@gmail.com, 
jack@oracle.com',
P_EMAIL_CC_DESTINO => 'ze@oracle.com, 
				jo@oracle.com',
P_EMAIL_CCO_DESTINO => null);
   END;

Para enviar um e-mail com 1 anexo do tipo texto, execute a stored procedure SP_ENVIAR_EMAIL_COM_ANEXO, como no exemplo abaixo:

DECLARE
     v_CLOB CLOB;
   BEGIN
 	PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL_COM_ANEXO (P_ASSUNTO => 'Assunto do e-mail',
    		P_MSG => 'Mensagem', 
       	P_EMAIL_ORIGEM => 'oracle@oracle.com', 
P_EMAIL_DESTINO => 'fbifabio@gmail.com, 
jack@oracle.com',     
P_EMAIL_CC_DESTINO => 'ze@oracle.com, 
			jo@oracle.com', 
P_EMAIL_CCO_DESTINO => null,
       	P_FILENAME => 'arquivo.txt',
       P_ANEXO => v_CLOB,  -- variável CLOB c/ texto do arquivo
       P_ATTACH_MIME => 'text/plain; charset=iso-8859-1', 
       	P_SMTP_SERVER => 'smtp.oracle.com.br',
       	P_SMTP_PORT => 25);
   END;


Postado por Fabio Prado.