Configurando Envio de E-mail no Oracle Apex


Configurar o envio de e-mail no Oracle Apex pode parecer ser uma tarefa, porém se mal executada pode se estender por horas ou até mesmos dias.

Nesse artigo, irei mostrar como efetuei a configuração do envio de e-mail usando o serviço de Email Delivery da Oracle Cloud - via SMTP.

Para utilizar o Email Delivery da Oracle Cloud é necessário ter uma conta. Após o periodo trial é necessário alterar a conta para paga, mesmo utilizando o free tier, para continuar utilizando os serviços de e-mail.

A configuração abaixo os passos são basicamente os mesmos para utilização do SMTP da Google ou de qualquer outro provedor de envio de e-mails quando é necessário a utilização da conexão SSL/TLS.

Consulte a documentação da Oracle para criação de uma conta.

Oracle Wallet

Anter de prosseguir, recomendo a leitura do arquivo O que é Oracle Wallet? para entender mais do funcionamento da Oracle Wallet.

Será necessário a criação de uma Wallet para armazenamento do certificado (root) para a criação de um canal seguro com o serviço (SSL/TLS).

A criação da Oracle Wallet abaixo foi criada em um Oracle Database 18c XE em um servidor CentOS 7.

Caso for usar o banco Autonomous Transaction da Oracle, não é necessário criar uma wallet para utilizar o serviço de envio de e-mail.  

Para listar e obter os certificados utilize o openssl. Lembre-se, é necessário apenas o certificado root - entidade certificadora - e salve com a extensão .pem:
openssl s_client -starttls smtp -connect smtp.email.sa-saopaulo-1.oci.oraclecloud.com:587 -showcerts

Para criar a Wallet, execute o comando abaixo:
orapki wallet create -wallet /home/oracle/wallets/apex -pwd averysecurepassword

Para adicionar o certificado na wallet:
orapki wallet add -wallet /home/oracle/wallets/apex -trusted_cert -cert /home/oracle/rootcertificates/certificado.pem

Para visualizar os certificados da wallet:
orapki wallet display -wallet /home/oracle/wallets/apex/

Caso precisar remover todos os certificados, use o comando abaixo:
orapki wallet remove -trusted_cert_all -wallet /home/oracle/wallets/apex

Se a configuração do certificado for feita incorretamente, irá retornar o erro ORA-29024: Certificate validation failure.

Configuração

Faça login no painel de Administração do Apex:

Acesse a Configurações da Instância (Instance Settings) e edite a opção "Wallet" e informe o caminho da wallet criada acima e a senha:


Na opção de "E-mail":


Informe os dados de conexão do SMTP. Atente-se para utilizar a opção de SSL/TLS - "After connection is established".

Caso não tiver acesso ao painel de administração para alterar as configurações, basta rodar o SQL abaixo:
BEGIN
  APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_HOST_ADDRESS', 'smtp.email.sa-saopaulo-1.oci.oraclecloud.com');
  APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_USERNAME', 'xxxxxxxx');
  APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_PASSWORD', 'xxxxxxxx');
  COMMIT;
END;
/

Caso ocorrer o erro ORA-29019: The protocol version is incorrect é necessário verificar a permissão de ACL. Lembre-se de rodar o comando abaixo conectado como SYSDBA (Oracle Database 12c ou superior):

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'APEX_190200',
                           principal_type => xs_acl.ptype_db));
END;
/

Para testar o envio de e-mail basta rodar o comando abaixo, lembre-se de alterar os e-mails:

DECLARE
    l_body      CLOB;
BEGIN
    l_body := 'Thank you for your interest in the APEX_MAIL 
package.'||utl_tcp.crlf||utl_tcp.crlf;
    l_body := l_body ||'  Sincerely,'||utl_tcp.crlf;
    l_body := l_body ||'  The Application Express Dev Team'||utl_tcp.crlf;
    apex_mail.send(
        p_to       => 'some_user@somewhere.com',   -- change to your email address
        p_from     => 'some_sender@somewhere.com', -- change to a real senders email address
        p_body     => l_body,
        p_subj     => 'APEX_MAIL Package - Plain Text message');
END;
/

Comentários