Enviar E-mail no Autonomous Database

Há várias opções para enviar e-mail no Autonomous Database. Você também pode enviar mensagens de texto ou a saída de uma consulta SQL para um canal do Slack ou MSTeams.

Enviar E-mail com o Serviço Email Delivery Service no Autonomous Database

Descreve as etapas para enviar e-mail usando UTL_SMTP no Autonomous Database.

Para enviar e-mail com o Serviço Oracle Cloud Infrastructure Email Delivery:

  1. Identifique seu ponto final de conexão SMTP para o serviço Email Delivery. Pode ser necessário se inscrever em regiões adicionais do Oracle Cloud Infrastructure se o Email Delivery não estiver disponível na sua região atual.

    Por exemplo, selecione uma das opções a seguir para o ponto final de conexão SMTP:

    • smtp.us-phoenix-1.oraclecloud.com
    • smtp.us-ashburn-1.oraclecloud.com
    • smtp.email.uk-london-1.oci.oraclecloud.com
    • smtp.email.eu-frankfurt-1.oci.oraclecloud.com
    Observação

    Se o ponto final da conexão SMTP estiver em uma região diferente do seu Autonomous Database, você deverá criar uma solicitação no Suporte do Oracle Cloud para que o Cloud Operations ative o serviço Email Delivery dessa região para o seu Autonomous Database.

    Consulte Configurar Conexão SMTP para obter mais informações.

  2. Gere credenciais SMTP para o Email Delivery. O UTL_SMTP usa credenciais para autenticar-se com os servidores do serviço Email Delivery quando você envia e-mail.

    Consulte Gerar Credenciais SMTP para um Usuário para obter mais informações.

  3. Crie um remetente aprovado para o serviço Email Delivery. Conclua essa etapa para todos os endereços de e-mail usados como "From" com UTL_SMTP.MAIL.

    Consulte Gerenciando Enviadores Aprovados para obter mais informações.

  4. Permita o acesso SMTP para o usuário ADMIN anexando uma Entrada de Controle de Acesso (ACE).

    Por exemplo:

    BEGIN
      -- Allow SMTP access for user ADMIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => ’www.us.example.com’,
        lower_port => 587,
        upper_port => 587,
        ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
                           principal_name => 'ADMIN',
                           principal_type => xs_acl.ptype_db));
    END;
    /
  5. Crie um procedimento PL/SQL para enviar e-mail.

    Por exemplo, consulte o código de amostra em Código de Amostra SMTP de Envio de E-mail.

  6. Envie um e-mail de teste usando o procedimento PL/SQL criado na etapa 5.

    Por exemplo:

    execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');

Consulte UTL_SMTP para obter informações sobre UTL_SMTP.

Consulte Notas do Pacote PL/SQL para o Autonomous Database para saber as restrições UTL_SMTP com o Autonomous Database.

Código de amostra SMTP de e-mail de envio

Mostra o código de amostra para enviar e-mail com UTL_SMTP no Autonomous Database.

CREATE OR REPLACE PROCEDURE SEND_MAIL (
  msg_to varchar2,
  msg_subject varchar2,
  msg_text varchar2 ) 
IS

  mail_conn utl_smtp.connection;
  username varchar2(1000):= 'ocid1.user.oc1.username';
  passwd varchar2(50):= 'password';
  msg_from varchar2(50) := 'adam@example.com';
  mailhost VARCHAR2(50) := 'smtp.us-ashburn-1.oraclecloud.com';

BEGIN
  mail_conn := UTL_smtp.open_connection(mailhost, 587);
  utl_smtp.starttls(mail_conn);
  
  UTL_SMTP.AUTH(mail_conn, username, passwd, schemes => 'PLAIN');
  
  utl_smtp.mail(mail_conn, msg_from);
  utl_smtp.rcpt(mail_conn, msg_to);
  
  UTL_smtp.open_data(mail_conn);
 
  UTL_SMTP.write_data(mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf);
  UTL_SMTP.write_data(mail_conn, 'To: ' || msg_to || UTL_TCP.crlf);
  UTL_SMTP.write_data(mail_conn, 'From: ' || msg_from || UTL_TCP.crlf);
  UTL_SMTP.write_data(mail_conn, 'Subject: ' || msg_subject || UTL_TCP.crlf);
  UTL_SMTP.write_data(mail_conn, 'Reply-To: ' || msg_to || UTL_TCP.crlf || UTL_TCP.crlf);
  UTL_SMTP.write_data(mail_conn, msg_text || UTL_TCP.crlf || UTL_TCP.crlf);
  
  UTL_smtp.close_data(mail_conn);
  UTL_smtp.quit(mail_conn);

EXCEPTION
  WHEN UTL_smtp.transient_error OR UTL_smtp.permanent_error THEN
    UTL_smtp.quit(mail_conn);
    dbms_output.put_line(sqlerrm);
  WHEN OTHERS THEN
    UTL_smtp.quit(mail_conn);
    dbms_output.put_line(sqlerrm);
END;
/

Onde:

Enviar E-mail com um Provedor de E-mail em um Ponto Final Privado

Descreve as etapas para enviar e-mail com um provedor de e-mail que esteja no Ponto Final Privado.

Para enviar e-mail do Autonomous Database usando um provedor de e-mail em um ponto final privado, o provedor de e-mail deve estar acessível pela VCN do Oracle Cloud Infrastructure (o ponto final privado da instância do Autonomous Database). Por exemplo, você pode acessar um provedor de e-mail quando:

  • A instância do Autonomous Database de origem e o provedor de e-mail estão na mesma VCN do Oracle Cloud Infrastructure.

  • A instância do Autonomous Database de origem e o provedor de e-mail estão em diferentes VCNs do Oracle Cloud Infrastructure pareadas.

  • O provedor de e-mail está em uma rede on-premises conectada à VCN da instância do Autonomous Database de origem do Oracle Cloud Infrastructure usando FastConnect ou VPN.

Para enviar e-mail usando um provedor de e-mail, defina as seguintes regras de entrada e saída:

  • Defina uma regra de saída na lista de segurança de sub-rede ou no grupo de segurança de rede do banco de origem de forma que o tráfego para o host de destino seja permitido na porta 587 ou na porta 25 (dependendo da porta que você está usando).

  • Defina uma regra de entrada na lista de segurança de sub-rede ou no grupo de segurança de rede do host de destino de forma que o tráfego do endereço IP da instância do Autonomous Database de origem para a porta 587 ou 25 seja permitido (dependendo da porta que você está usando).

Para enviar e-mail de um provedor de e-mail no ponto final privado:

  1. Permita o acesso SMTP para o usuário ADMIN anexando uma Entrada de Controle de Acesso (ACE).

    Por exemplo:

    -- Create an Access Control List for the host
    BEGIN
       DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
             host => 'www.example.com',
             lower_port => 587,
             upper_port => 587,
             ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
                                 principal_name => 'ADMIN',
                                 principal_type => xs_acl.ptype_db),
             private_target => TRUE);
    END;
    /
    Observação

    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE só suporta um único nome de host para o parâmetro host (em um ponto final privado, o uso de um endereço IP, um IP SCAN ou um nome de host SCAN não é suportado).

    Se você definir ROUTE_OUTBOUND_CONNECTIONS como PRIVATE_ENDPOINT, não será necessário definir o parâmetro private_target como TRUE nessa API. Consulte Segurança Avançada para Conexões de Saída com Pontos Finais Privados para obter mais informações.

  2. Crie um procedimento PL/SQL para enviar e-mail.
  3. Envie um e-mail de teste usando o procedimento PL/SQL criado na etapa 2.

    Por exemplo:

    execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using private email provider');

Usar Objetos de Credencial para definir a Autenticação SMTP

Descreve como informar objetos de credencial para APIs UTL_SMTP.SET_CREDENTIAL.

O subprograma SET_CREDENTIAL envia o comando AUTH para autenticação no servidor SMTP.

O subprograma UTL_SMTP.SET_CREDENTIAL permite que você informe objetos de credencial para definir a autenticação SMTP. Os objetos de credenciais são objetos de esquema; portanto, eles só podem ser acessados por usuários privilegiados e permitem que você configure privilégios no nível do esquema para controlar as credenciais. A passagem de objetos de credencial é uma maneira apropriada e segura de armazenar e gerenciar nome de usuário/senha/chaves para autenticação.

O subprograma UTL_SMTP.SET_CREDENTIAL é uma alternativa segura e conveniente ao subprograma UTL_SMTP.AUTH.

Exemplo


...
UTL_SMTP.AUTH (l_mail_conn, 'ocid1.user.oc1.username', 'xxxxxxxxxxxx', schemes => 'PLAIN');
...

Conforme mostrado no exemplo acima, ao chamar o subprograma AUTH, você deve informar o nome de usuário/senha em texto não criptografado como parte dos parâmetros formais PL/SQL. Talvez seja necessário incorporar o nome de usuário/senha em vários scripts cron ou de automação PL/SQL. A passagem de senhas de texto não criptografado é um problema de conformidade que é tratado no subprograma UTL_SMTP.SET_CREDENTIAL.

Consulte Função e Procedimento AUTH para obter mais informações.

Sintaxe UTL_SMTP.SET_CREDENTIAL

PROCEDURE UTL_SMTP.SET_CREDENTIAL (
    c          IN OUT NOCOPY connection,
    credential IN            VARCHAR2,
    schemes    IN            VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES
);

FUNCTION UTL_SMTP.SET_CREDENTIAL (
    c          IN OUT NOCOPY connection,
    credential IN            VARCHAR2,
    schemes    IN            VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES)
    RETURN reply;

Exemplo

  • Crie um objeto de credencial:

    BEGIN DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'HTTP_CRED',
        username        => 'web_app_user',
        password        => '<password>' );
    END;

    Isso cria um objeto de credencial que cria um par de nome de usuário/senha armazenado.

    Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.

    Consulte Especificando Credenciais de Job do Scheduler para obter mais informações.

  • Execute o procedimento UTL_SMTP.SET_CREDENTIAL:

    DECLARE
          l_mail_conn UTL_SMTP.CONNECTION;
        BEGIN 
          l_mail_conn := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 587);
          UTL_SMTP.SET_CREDENTIAL(l_mail_conn, 'SMTP_CRED', SCHEMES => 'PLAIN');
          ...
    END;
    

    Este exemplo envia o comando para autenticação no servidor SMTP. O servidor Web precisa dessas informações para autorizar a solicitação. O valor l_mail_conn é a conexão SMTP, SMTP_CRED é o nome das credenciais e PLAIN é o esquema de autenticação SMTP.

Consulte UTL_SMTP para obter mais informações.

Consulte Notas do Pacote PL/SQL para o Autonomous Database para obter informações sobre restrições para UTL_SMTP no Autonomous Database.

Enviar E-mail pelo Autonomous Database Usando DBMS_CLOUD_NOTIFICATION

Use o pacote DBMS_CLOUD_NOTIFICATION para enviar mensagens e consultar resultados como e-mail.

Enviar Mensagens como E-mail do Autonomous Database

Você pode usar o DBMS_CLOUD_NOTIFICATION para enviar mensagens como e-mail.
  1. Identifique seu ponto final de conexão SMTP para o serviço Email Delivery. Pode ser necessário se inscrever em regiões adicionais do Oracle Cloud Infrastructure se o Email Delivery não estiver disponível na sua região atual.

    Por exemplo, selecione uma das opções a seguir para o ponto final de conexão SMTP:

    • smtp.us-phoenix-1.oraclecloud.com
    • smtp.us-ashburn-1.oraclecloud.com
    • smtp.email.uk-london-1.oci.oraclecloud.com
    • smtp.email.eu-frankfurt-1.oci.oraclecloud.com

    Consulte Configurar Conexão SMTP para obter mais informações.

  2. Gere credenciais SMTP para o Email Delivery. O UTL_SMTP usa credenciais para autenticar-se com os servidores do serviço Email Delivery quando você envia e-mail.

    Consulte Gerar Credenciais SMTP para um Usuário para obter mais informações.

  3. Crie um remetente aprovado para o serviço Email Delivery. Conclua essa etapa para todos os endereços de e-mail usados como "From" com UTL_SMTP.MAIL.

    Consulte Gerenciando Enviadores Aprovados para obter mais informações.

  4. Permita o acesso SMTP para o usuário ADMIN anexando uma Entrada de Controle de Acesso (ACE).

    Por exemplo:

    BEGIN
      -- Allow SMTP access for user ADMIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => ’www.us.example.com’,
        lower_port => 587,
        upper_port => 587,
        ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
                           principal_name => 'ADMIN',
                           principal_type => xs_acl.ptype_db));
    END;
    /
  5. Crie um objeto de credencial e use DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE para enviar uma mensagem como e-mail.
    BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
            credential_name => 'EMAIL_CRED',
            username        => 'username',
            password        => 'password'
       );
       END;
    /
    BEGIN
       DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
            provider        => 'email',
            credential_name => 'EMAIL_CRED',
            message         => 'Subject content',
            params          => json_object('recipient' value  'mark@example.com, suresh@example.com',
                                           'to_cc'  value 'nicole@example.com, jordan@example.com',
                                           'to_bcc' value 'manisha@example.com',
                                           'subject' value 'Test subject',
                                           'smtp_host' value 'smtp.email.example.com',
                                           'sender'    value  'approver_sender@example.com' )
       );
       END;
    /

    Use o parâmetro params para especificar o remetente, smtp_host, assunto, destinatário e destinatários de um CC ou CCO nos valores string.

    • remetente: especifica o ID de E-mail do remetente aprovado na Etapa 3.

    • smtp_host: especifica o nome do host SMTP da etapa 2.

    • assunto: especifica o assunto do e-mail.

    • destinatário: especifica os IDs de e-mail dos destinatários. Use uma vírgula entre os IDs de e-mail quando houver vários destinatários.

    • to_cc: especifica os IDs de e-mail que estão recebendo um CC do e-mail. Use uma vírgula entre os IDs de e-mail quando houver vários destinatários CC.

    • to_bcc: especifica os IDs de e-mail que estão recebendo um Cco do e-mail. Use uma vírgula entre os IDs de e-mail quando houver vários destinatários Cco.

    Consulte SEND_MESSAGE Procedimento para obter mais informações.

Enviar Resultados da Consulta como E-mail pelo Autonomous Database

Você pode usar o pacote DBMS_CLOUD_NOTIFICATION para enviar os resultados de uma consulta como e-mail.

Para usar DBMS_CLOUD_NOTIFICATION para enviar e-mail:

  1. Identifique seu ponto final de conexão SMTP para o serviço Email Delivery. Pode ser necessário se inscrever em regiões adicionais do Oracle Cloud Infrastructure se o Email Delivery não estiver disponível na sua região atual.

    Por exemplo, selecione uma das opções a seguir para o ponto final de conexão SMTP:

    • smtp.us-phoenix-1.oraclecloud.com
    • smtp.us-ashburn-1.oraclecloud.com
    • smtp.email.uk-london-1.oci.oraclecloud.com
    • smtp.email.eu-frankfurt-1.oci.oraclecloud.com

    Consulte Configurar Conexão SMTP para obter mais informações.

  2. Gere credenciais SMTP para o Email Delivery. O UTL_SMTP usa credenciais para autenticar-se com os servidores do serviço Email Delivery quando você envia e-mail.

    Consulte Gerar Credenciais SMTP para um Usuário para obter mais informações.

  3. Crie um remetente aprovado para o serviço Email Delivery. Conclua essa etapa para todos os endereços de e-mail usados como "From" com UTL_SMTP.MAIL.

    Consulte Gerenciando Enviadores Aprovados para obter mais informações.

  4. Permita o acesso SMTP para o usuário ADMIN anexando uma Entrada de Controle de Acesso (ACE).

    Por exemplo:

    BEGIN
      -- Allow SMTP access for user ADMIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => ’www.us.example.com’,
        lower_port => 587,
        upper_port => 587,
        ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
                           principal_name => 'ADMIN',
                           principal_type => xs_acl.ptype_db));
    END;
    /
  5. Crie um objeto de credencial e use DBMS_CLOUD_NOTIFICATION.SEND_DATA para enviar a saída de uma consulta como e-mail.
    BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
            credential_name => 'EMAIL_CRED',
            username        => 'username',
            password        => 'password'
       );
       END;
    /
    BEGIN
       DBMS_CLOUD_NOTIFICATION.SEND_DATA(
            provider        => 'email',
            credential_name => 'EMAIL_CRED',
            query           => 'SELECT tablespace_name FROM dba_tablespaces',
            params          => json_object('recipient' value  'mark@example.com, suresh@example.com',
                                           'to_cc'  value 'nicole@example.com1, jordan@example.com',
                                           'to_bcc' value 'manisha@example.com',
                                           'subject' value 'Test subject',
                                           'type' value 'json',
                                           'title' value 'mytitle',
                                           'message' value 'This is the message',
                                           'smtp_host' value 'smtp.email.example.com',
                                           'sender'    value  'approver_sender@example.com' )
       );
       END;
    /
    Use o parâmetro params para especificar o remetente, smtp_host, assunto, destinatário, destinatários de um CC ou CCO, a mensagem, o tipo de dados e o título nos valores String.
    • remetente: especifica o ID de E-mail do remetente aprovado na Etapa 3.

    • smtp_host: especifica o nome do host SMTP da etapa 2.

    • assunto: especifica o assunto do e-mail. O tamanho máximo é de 100 caracteres.

    • destinatário: Especifica os IDs de e-mail dos destinatários. Use uma vírgula entre os IDs de e-mail quando houver vários destinatários.

    • to_cc: especifica os IDs de e-mail que estão recebendo um CC do e-mail. Use uma vírgula entre os IDs de e-mail quando houver vários destinatários CC.

    • to_bcc: especifica os IDs de e-mail que estão recebendo um Cco do e-mail. Use uma vírgula entre os IDs de e-mail quando houver vários destinatários Cco.

    • mensagem: especifica o texto da mensagem.

    • tipo: especifica o formato de saída como CSV ou JSON.

    • title: especifica o título do anexo da saída SQL. O título deve conter apenas letras, dígitos, sublinhados, hifens ou pontos como caracteres em seu valor, pois ele está sendo usado para gerar um nome de arquivo.

    O tamanho máximo da mensagem a ser usado com DBMS_CLOUD_NOTIFICATION.SEND_DATA para notificação de e-mail é 32k bytes.

    Consulte SEND_DATA Procedimento para obter mais informações.