Enviar E-mail no Autonomous AI Database na Infraestrutura Dedicada do Exadata
Você pode enviar e-mail no Autonomous AI Database na Infraestrutura Dedicada do Exadata usando o Serviço Email Delivery ou os procedimentos DBMS_CLOUD_NOTIFICATION. Este artigo descreve como enviar email usando essas duas opções.
Enviar E-mail com o Email Delivery Service no Autonomous AI Database
Descreve as etapas para enviar e-mail usando o UTL_SMTP no Autonomous AI Database on Dedicated Exadata Infrastructure.
Para enviar um e-mail usando UTL_SMTP:
-
Identifique seu ponto final de conexão SMTP para o serviço Email Delivery.
-
Se você quiser usar o Serviço Email Delivery do Oracle Cloud Infrastructure (OCI), identifique seu ponto final de conexão para o serviço Email Delivery. Por exemplo, selecione
smtp.email.us-phoenix-1.oci.oraclecloud.comquando Oeste dos EUA (Phoenix) for a região de envio. Consulte Configurar Conexão SMTP para mais informações.Observação: Talvez seja necessário inscrever-se em regiões adicionais do Oracle Cloud Infrastructure se o serviço Email Delivery estiver indisponível na sua região atual.
-
Se quiser usar um servidor SMTP de terceiros, o administrador de rede deverá configurar o servidor SMTP e sua conectividade com o tenant do Autonomous AI Database e fornecer as informações do ponto de extremidade da conexão SMTP.
-
-
Gere credenciais SMTP para o serviço Email Delivery para o usuário do OCI.
O
UTL_SMTPusa credenciais para fazer autenticação com os servidores do serviço Email Delivery quando você envia um e-mail. Consulte Gerar Credenciais SMTP para um Usuário para obter mais informações. -
Crie remetentes aprovados para o serviço Email Delivery.
Se você estiver usando o Serviço OCI Email Delivery, conclua esta etapa para todos os endereços do e-mail que usar como "De" com
UTL_SMTP.MAIL. Consulte Gerenciando Remetentes Aprovados para mais informações. -
Permita o acesso ao host SMTP para o(s) usuário(s) com a atribuição de administrador incluindo a Entrada de Controle de Acesso (ACE).
Para usar o SMTP seguro, configure o usuário do banco de dados com a Entrada de Controle de Acesso (ACE) para acesso à wallet, além do acesso ao host SMTP. Para acesso SMTP seguro usando o Serviço Email Delivery do OCI, a conta do Oracle Cloud Infrastructure deve ser autenticada usando protocolos SASL (Simple Authentication and Security Layer), como PLAIN, CRAM-MD5, LOGIN. Por exemplo, consulte o código de amostra em SMTP - Enviar Código de Amostra do E-mail.
-
Escreva o código PL/SQL para enviar e-mails usando
UTL_MAIL.Dica: Se você estiver desenvolvendo o procedimento Enviar e-mail por conta própria, verifique se o código está de acordo com o Código de Amostra Enviar E-mail SMTP.
-
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 em Referência de Tipos e Pacotes PL/SQL do Oracle Database 19c ou Referência de Tipos e Pacotes PL/SQL do Oracle Database 26ai para obter mais referências.
Consulte Observações sobre o Uso de Pacotes PL/SQL de Banco de Dados para saber mais sobre o uso do UTL_SMTP com o Autonomous AI Database.
SMTP - Enviar Código de Amostra de E-mail
Mostra o código de amostra para enviar e-mail com UTL_SMTP em um Autonomous AI Database.
Código de Amostra
-- As ADMIN user, set up ACE to access SMTP host
connect admin/[password]@[ADBD-host]/[pdbname]_tp.atp.oraclecloud.com
begin
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => '[SMTP_Server_address]',
lower_port => 25,
upper_port => 25,
ace => xs$ace_type(
privilege_list => xs$name_list('smtp'),
principal_name => '[database_user]',
principal_type => xs_acl.ptype_db));
end;
/
-- If using secure SMTP, set up ACE to wallet for certificate-based secure (TLS) email
declare
m_wallet_path VARCHAR2(512);
begin
select property_value into m_wallet_path
from database_properties
where property_name like '%SSL%';
m_wallet_path := 'file:' || m_wallet_path;
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE (
wallet_path => m_wallet_path,
ace => xs$ace_type(
privilege_list => xs$name_list('use_client_certificates'),
principal_name => '[database_user]',
principal_type => xs_acl.ptype_db));
end;
/
-- As ADMIN or regular database user with privileges set up above, use UTL_SMTP to send email
connect [database_user]/[password]@[ADBD-host]/[pdbname]_tp.atp.oraclecloud.com
-- Example of normal (non-secure) email
DECLARE
c UTL_SMTP.CONNECTION;
reply UTL_SMTP.REPLY;
host varchar2(64) := '[SMTP_Server_address]',
port pls_integer := 25;
sender varchar2(64) := '[sender-address@domain.com]';
recipient varchar2(64) := '[recipient-address@domain.com]';
BEGIN
c := UTL_SMTP.OPEN_CONNECTION (host, port);
if (reply.CODE != 220) then
raise_application_error(-20000,'UTL_SMTP.CONNECTION: '
|| reply.CODE || ' - ' || reply.TEXT);
end if;
UTL_SMTP.HELO(c, host);
UTL_SMTP.MAIL(c, sender);
UTL_SMTP.RCPT(c, recipient);
UTL_SMTP.OPEN_DATA(c);
UTL_SMTP.WRITE_DATA(c,'From:[Sender] <' || sender || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'To:[Recipient] <' || recipient || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'Subject: Email from UTL_SMTP App' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'Mail Content');
UTL_SMTP.CLOSE_DATA(c);
dbms_output.put_line('Close Data: ' || reply.code);
UTL_SMTP.QUIT(c);
END;
/
-- Example of secure email using OCI Mail Server as the SMTP server
DECLARE
m_wallet_path VARCHAR2(256);
c UTL_SMTP.CONNECTION;
reply UTL_SMTP.REPLY;
host varchar2(64) := 'smtp.email.[region].oci.oraclecloud.com';
port pls_integer := 25;
sender varchar2(64) := '[sender-address@domain.com]';
recipient varchar2(64) := '[recipient-address@domain.com]';
BEGIN
select property_value into m_wallet_path
from database_properties
where property_name like '%SSL%';
m_wallet_path := 'file:' || m_wallet_path;
-- secure connection with SSL/TLS made *before* SMTP communication
-- use hostname matched against CN or SMTP server's certificate
reply := UTL_SMTP.OPEN_CONNECTION (
host => host,
port => port,
c => c,
wallet_path => m_wallet_path,
wallet_password => NULL,
secure_connection_before_smtp => FALSE,
secure_host => NULL);
if (reply.CODE != 220) then
raise_application_error(-20000,'UTL_SMTP.OPEN_CONNECTION: '
|| reply.CODE ||' - ' || reply.TEXT);
end if;
UTL_SMTP.STARTTLS(c);
-- username is the 'SMTP credential' for the user's email address
-- obtained from OCI Identity -> Users -> email address.
-- Scheme refers to SASL (Simple Authentication and Security Layer)
-- Authentication Schemes for SMTP protocol - PLAIN, CRAM-MD5, LOGIN
-- https://docs.oracle.com/en-us/iaas/Content/Email/Concepts/overview.htm
UTL_SMTP.AUTH(
c => c,
username => '[ocid1.user.verylongaddresscreatedinOCIforuseraddress.com]',
password => '[password-provided-from-create]',
schemes => 'PLAIN');
UTL_SMTP.HELO(c, host);
UTL_SMTP.MAIL(c, sender);
UTL_SMTP.RCPT(c, recipient);
UTL_SMTP.OPEN_DATA(c);
UTL_SMTP.WRITE_DATA(c, 'From: Sender <' || sender || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'To: Recipient <' || recipient || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'Subject: Email from UTL_SMTP App' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'Mail Content');
UTL_SMTP.WRITE_DATA(c, 'Sender is a domain-owned approved sender in OCI Mail Service');
UTL_SMTP.CLOSE_DATA(c);
dbms_output.put_line('Close Data: ' || reply.code);
UTL_SMTP.QUIT(c);
END;
/
Enviar Mensagens como E-mail do Autonomous AI Database
APLICA-SE A:
Oracle Public Cloud somente
Você pode usar o DBMS_CLOUD_NOTIFICATION para enviar mensagens como e-mail.
-
Identifique seu ponto final de conexão SMTP para o serviço Email Delivery. Talvez você precise assinar regiões adicionais do Oracle Cloud Infrastructure se o serviç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 mais informações.
-
-
Gere credenciais SMTP para o serviço Email Delivery. O
UTL_SMTPusa credenciais para autenticação com os servidores de Entrega de E-mail quando você envia e-mail.Consulte Gerar Credenciais SMTP para um Usuário para obter mais informações.
-
Crie um remetente aprovado para a Entrega de E-mail. Conclua esta etapa para todos os endereços com
UTL_SMTP.MAILusados como "From".Consulte Gerenciando Remetentes Aprovados para mais informações.
-
Permitir acesso SMTP para usuário ADMIN anexando uma Access Control Entry (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; / -
Crie um objeto de credencial e use
DBMS_CLOUD_NOTIFICATION.SEND_MESSAGEpara 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
paramspara especificar o remetente, smtp_host, assunto, destinatário e destinatários de um CC ou BCC nos valoresstring.-
remetente: especifica o ID do 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 com Cco.
Consulte Procedimento SEND_MESSAGE para obter mais informações.
-
Enviar Resultados da Consulta como E-mail do Autonomous AI Database
APLICA-SE A:
Oracle Public Cloud somente
Você pode usar o pacote DBMS_CLOUD_NOTIFICATION para enviar os resultados de uma consulta como e-mail.
Para usar o DBMS_CLOUD_NOTIFICATION para enviar e-mail:
-
Identifique seu ponto final de conexão SMTP para o serviço Email Delivery. Talvez você precise assinar regiões adicionais do Oracle Cloud Infrastructure se o serviç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 mais informações.
-
-
Gere credenciais SMTP para o serviço Email Delivery. O
UTL_SMTPusa credenciais para autenticação com os servidores de Entrega de E-mail quando você envia e-mail.Consulte Gerar Credenciais SMTP para um Usuário para obter mais informações.
-
Crie um remetente aprovado para a Entrega de E-mail. Conclua esta etapa para todos os endereços com
UTL_SMTP.MAILusados como "From".Consulte Gerenciando Remetentes Aprovados para mais informações.
-
Permitir acesso SMTP para usuário ADMIN anexando uma Access Control Entry (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; / -
Crie um objeto de credencial e use
DBMS_CLOUD_NOTIFICATION.SEND_DATApara 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
paramspara especificar o remetente, smtp_host, assunto, destinatário, destinatários de um CC ou BCC, a mensagem, o tipo de dados e o título nos valoresString.-
remetente: especifica o ID do 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 é 100 caracteres.
-
receptor: 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 com Cco.
-
mensagem: especifica o texto da mensagem.
-
type: especifica o formato de saída como CSV ou JSON.
-
título: 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 devido ao uso para gerar um nome de arquivo.
O tamanho máximo da mensagem para uso com
DBMS_CLOUD_NOTIFICATION.SEND_DATApara notificação por e-mail é de 32k bytes.Consulte Procedimento SEND_DATA para obter mais informações.
-