quarta-feira, 12 de fevereiro de 2014

Enviar e-mail usando Oracle com G-mail.


   Muitas empresas estão usando os servidores de e-mail externo como o G-mail para uso de correios eletrônicos ao invés de montarem servidores para esta finalidade, isto reduz o custo de T.I.

   Ocorre que ao realizar esta mudança, pode acontecer que o sistema que enviava e-mail normalmente com o servidor SMTP local possa não mais funcionar, a razão é que o gmail exige conexão autenticada segura (preferencialmente via protocolo TLS) .

   Este foi o caso em que uma aplicação de um cliente mandava e-mail usando os pacote PL/SQL de envio de e-mail, e depois de usarem o g-mail a aplicação - mais especificamente o Oracle - não consegui mais enviar e-mail.

  Para criar uma conexão segura é preciso esta usando no mínimo o Oracle na versão 11.2.0.2 e além disso não esta disponível na versão XE. Sendo preciso criar um Oracle Wallet, como discorrido em http://arkatec.wordpress.com/2011/08/15/sending-email-using-oracle-database-and-google-mail-service/ .

   Supondo que a versão do Oracle seja inferior ou que a edição seja Express Edition, neste caso ainda podemos enviar e-mail pelo g-mail, mas usando o emailrelay, e é isto que quero mostrar neste artigo, para referência que possa ajudar que passar pelo mesmo problema, além disso servir como documentação para mim, caso preciso fazer isso em mais servidores.  O cenário aqui apresentado é um servidor Windows Server 2008.

1 - Baixe o programa emailrelay e mande instalar o mesmo
1.1 - Na primeira Janela vem com as informações do programa, click em Next>
1.2 - Depois a licença, marque a opção de aceitar a licença e click em Next>
1.3 - A próxima janela mostra o diretório onde será instalado além do Spool e configuração. Aceite o padrão e click em Next>
1.4 - Em Tipo de Instalação marque o SMTP Server e depois escolha a opção "Check periodically" e
1.5 - Na próxima janela configure com a informação do seu G-mail. Em HostName digite smtp.gmail.com e na Port 587 e na parte "Account" coloque a informação do seu e-mail com Login no editor Name e a Senha no editor PassWord; Click em Next>
1.6 - Nas demais janelas aceite as opções padrões e click em Next> para terminar a instalação.

2 - Depois de instalado será preciso alterar o arquivo de configuração para o G-mail, o arquivo é o
emailrelay-star.bat e ele vai estar no caminho de instalação (passo 1.3), mas normalmente esta em c:\arquivos de programa\emailrelay;

2.1 Altere o arquivo como no exemplo abaixo;

 "C:\Arquivos de programas\emailrelay\emailrelay.exe" --as-proxy smtp.gmail.com:587 --client-tls --client-auth "C:\Arquivos de programas\emailrelay\emailrelay.auth" --log --pid-file "C:\Arquivos de programas\emailrelay\emailrelay.pid" --poll 60 --remote-clients --spool-dir C:\Windows\spool\emailrelay --syslog --verbose

2.2 Abre o arquivo emailrelay.auth e confirme que o Login e a Senha estão corretos.

3 -  Pelo CMD vá no diretório de instalação do E-mail relay e digite emailrelay-service.exe -install para criar o serviço no Windows.

3.1 Depois entre no serviço do Windows (Iniciar -> Executar -> Services.msc) e inicie o serviço caso ainda não esta inicializado.


Agora vamos no Oracle realizar alguns ajustes.

1 - Com usuário SYS altere o parâmetro SMTP_OUT_SERVER

     SQL>ALTER SYSTEM SET SMTP_OUT_SERVER='localhost' SCOPE=SPFILE;

2-Então Reinicie a instância Oracle.

3- Então pode usar diretamente o UTL_MAIL ou o UTL_SMPT;
3.1 Usando o UTL_MAIL, instale o pacote caso não exista;
SQL> @?/rdbms\admin\utlmail.sql;
SQL> @?/rdbms\admin\prvtmail.plb

E chame o pacote de enviar e-mail como no exemplo abaixo:
 
UTL_MAIL.send(sender     => 'My Name "<ale.lucio.cordeiro@gmail.com>"',
              recipients => 'destino@gmail.com',

              subject    => 'Teste',
              message    => 'Bom trabalho!');


3.2 Caso esteja usando o pacote UTL_SMPT, basta informar localhost  na conexão e retirar a parte de autenticação

Parte que precisa ser retirado

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(v_usuario))));
utl_smtp.command(mail_conn,
utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_senha))));
 
 
OBS; Caso ocorra o erro SMTP permanent error: 553 verifique se você respeitou o uso das aspas simples e dupla além dos <> entre o endereço de e-mail, coloque como no exemplo supracitado.
 
Pronto, o Oracle já consegue enviar e-mail pelo G-mail;
 
Espero ter ajudado.