Usar o Database Mail no Amazon RDS for SQL Server
Você pode usar o Database Mail para enviar mensagens de e-mail aos usuários a partir da instância de banco de dados do Amazon RDS no SQL Server. As mensagens podem conter arquivos e resultados de consultas. O Database Mail inclui os seguintes componentes:
-
Objetos deconfiguração e segurança – esses objetos criam perfis e contas e são armazenados no banco de dados
msdb
. -
Objetos de mensagens – esses objetos incluem o procedimento armazenado sp_send_dbmail
usado para enviar mensagens e estruturas de dados que contêm informações sobre mensagens. Eles estão armazenados no banco de dados msdb
. -
Objetos de registro e auditoria – o Database Mail grava informações de registro no banco de dados
msdb
e no log de eventos de aplicações do Microsoft Windows. -
Executável do Database Mail –
DatabaseMail.exe
lê a partir de uma fila no banco de dadosmsdb
e envia mensagens de e-mail.
O RDS oferece suporte ao Database Mail para todas as versões do SQL Server nas edições Web, Standard e Enterprise.
Limitações
As seguintes limitações se aplicam ao uso do Database Mail em sua instância de banco de dados SQL Server:
-
O Database Mail não é compatível com o SQL Server Express Edition.
-
A modificação dos parâmetros de configuração do Database Mail não é aceita. Para ver os valores predefinidos (padrão), use o procedimento armazenado sysmail_help_configure_sp
. -
Os anexos de arquivo não são totalmente compatíveis. Para ter mais informações, consulte Trabalhar com anexos de arquivos.
-
O tamanho máximo do anexo do arquivo é de 1 MB.
-
O Database Mail requer configuração adicional em instâncias de banco de dados Multi-AZ. Para ter mais informações, consulte Considerações para implantações Multi-AZ.
-
Não há suporte para configurar o SQL Server Agent para enviar mensagens de email para operadores predefinidos.
Habilitar Database Mail
Use o seguinte processo para habilitar o Database Mail para a instância de banco de dados:
-
Crie um novo parameter group.
-
Modifique o grupo de parâmetros para definir o parâmetro
database mail xps
como 1. -
Associe o grupo de parâmetros à instância de banco de dados.
Criar o grupo de parâmetros para o Database Mail
Crie um grupo de parâmetros para o parâmetro database mail xps
que corresponde à edição e à versão do SQL Server da instância de banco de dados.
nota
Você também pode modificar um grupo de parâmetros existente. Siga o procedimento em Modificar o parâmetro que habilita o Database Mail.
O exemplo a seguir cria um grupo de parâmetros para o SQL Server Standard Edition 2016.
Como criar o grupo de parâmetros
Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/
. -
No painel de navegação, selecione Parameter groups.
-
Escolha Create parameter group (Criar parameter group).
-
No painelCreate parameter group (Criar parameter group), faça o seguinte:
-
Em Família de grupos de parâmetros, escolha sqlserver-se-13.0.
-
Em Nome do grupo, insira um identificador para o grupo de parâmetros, como
dbmail-sqlserver-se-13
. -
Em Descrição, insira
Database Mail XPs
.
-
-
Escolha Criar.
O exemplo a seguir cria um grupo de parâmetros para o SQL Server Standard Edition 2016.
Como criar o grupo de parâmetros
-
Use um dos seguintes comandos.
Para Linux, macOS ou Unix:
aws rds create-db-parameter-group \ --db-parameter-group-name
dbmail-sqlserver-se-13
\ --db-parameter-group-family "sqlserver-se-13.0
" \ --description "Database Mail XPs
"Para Windows:
aws rds create-db-parameter-group ^ --db-parameter-group-name
dbmail-sqlserver-se-13
^ --db-parameter-group-family "sqlserver-se-13.0
" ^ --description "Database Mail XPs
"
Modificar o parâmetro que habilita o Database Mail
Modifique o parâmetro database mail xps
no grupo de parâmetros que corresponde à edição e à versão do SQL Server da instância de banco de dados.
Para habilitar o Database Mail, defina o parâmetro database mail xps
como 1.
O exemplo a seguir modifica o grupo de parâmetros que você criou para o SQL Server Standard Edition 2016.
Como modificar o grupo de parâmetros
Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/
. -
No painel de navegação, selecione Parameter groups.
-
Escolha o grupo de parâmetros, como debmail-sqlserver-se-13.
-
Em Parâmetros, filtre a lista de parâmetros para
mail
. -
Escolha xps de email de bancode dados.
-
Escolha Edit parameters.
-
Digite
1
. -
Selecione Save changes.
O exemplo a seguir modifica o grupo de parâmetros que você criou para o SQL Server Standard Edition 2016.
Como modificar o grupo de parâmetros
-
Use um dos seguintes comandos.
Para Linux, macOS ou Unix:
aws rds modify-db-parameter-group \ --db-parameter-group-name
dbmail-sqlserver-se-13
\ --parameters "ParameterName='database mail xps',ParameterValue=1
,ApplyMethod=immediate"Para Windows:
aws rds modify-db-parameter-group ^ --db-parameter-group-name
dbmail-sqlserver-se-13
^ --parameters "ParameterName='database mail xps',ParameterValue=1
,ApplyMethod=immediate"
Associar o grupo de parâmetros à instância de banco de dados
É possível usar o AWS Management Console ou a AWS CLI para associar o grupo de parâmetros do Database Mail à instância de banco de dados.
É possível associar o grupo de parâmetros do Database Mail a uma instância de banco de dados nova ou existente.
-
Para uma nova instância de banco de dados, associe-o ao executar a instância. Para ter mais informações, consulte Criar uma instância de banco de dados do Amazon RDS.
-
Para uma instância de banco de dados existente, associe-o modificando a instância. Para ter mais informações, consulte Modificar uma instância de banco de dados do Amazon RDS.
É possível associar o grupo de parâmetros do Database Mail a uma instância de banco de dados nova ou existente.
Para criar uma instância de banco de dados com o grupo de parâmetros do Database Mail
-
Especifique o mesmo tipo de mecanismo de banco de dados e a versão principal que você usou ao criar o grupo de parâmetros.
Para Linux, macOS ou Unix:
aws rds create-db-instance \ --db-instance-identifier
mydbinstance
\ --db-instance-classdb.m5.2xlarge
\ --enginesqlserver-se
\ --engine-version13.00.5426.0.v1
\ --allocated-storage100
\ --manage-master-user-password \ --master-usernameadmin
\ --storage-typegp2
\ --license-modelli
--db-parameter-group-namedbmail-sqlserver-se-13
Para Windows:
aws rds create-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-instance-classdb.m5.2xlarge
^ --enginesqlserver-se
^ --engine-version13.00.5426.0.v1
^ --allocated-storage100
^ --manage-master-user-password ^ --master-usernameadmin
^ --storage-typegp2
^ --license-modelli
^ --db-parameter-group-namedbmail-sqlserver-se-13
Para modificar uma instância de banco de dados e associar o grupo de parâmetros do Database Mail
-
Use um dos seguintes comandos.
Para Linux, macOS ou Unix:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --db-parameter-group-namedbmail-sqlserver-se-13
\ --apply-immediatelyPara Windows:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-parameter-group-namedbmail-sqlserver-se-13
^ --apply-immediately
Configurando o Correio do Banco
Execute as seguintes tarefas para configurar o Database Mail:
Crie o perfil do Database Mail.
Crie a conta Database Mail.
Adicione a conta de Correio do Banco de Dados ao perfil de Correio do Banco de Dados.
Adicione usuários ao perfil Database Mail.
nota
Para configurar o Database Mail, certifique-se de que você tem execute
permissão nos procedimentos armazenados no msdb
banco de dados.
Criando o perfil de Correio de Banco de
Para criar o perfil Database Mail, use o procedimento armazenado sysmail_add_profile_spNotifications
.
Para criar o perfil
-
Use a seguinte instrução SQL.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'Notifications', @description = 'Profile used for sending outgoing notifications using Amazon SES.'; GO
Criando a conta Database Mail
Para criar a conta Database Mail, use o procedimento armazenado sysmail_add_account_spSES
em uma instância de banco de dados do RDS para SQL Server em uma VPC privada, usando o Amazon Simple Email Service.
O uso do Amazon SES requer os seguintes parâmetros:
-
@email_address
: uma identidade verificada do Amazon SES. Para ter mais informações, consulte Identidades verificadas no Amazon SES. -
@mailserver_name
: um endpoint SMTP do Amazon SES. Para ter mais informações, consulte Conexão a um endpoint SMTP do Amazon SES. -
@username
: um nome de usuário SMTP do Amazon SES. Para ter mais informações, consulte Obtenção de credenciais SMTP do Amazon SES.Não use um nome de usuário do AWS Identity and Access Management.
-
@password
: uma senha SMTP do Amazon SES. Para ter mais informações, consulte Obtenção de credenciais SMTP do Amazon SES.
Para criar a conta
-
Use a seguinte instrução SQL.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'SES', @description = 'Mail account for sending outgoing notifications.', @email_address = '
nobody@example.com
', @display_name = 'Automated Mailer', @mailserver_name = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce
.amazonaws.com', @port = 587, @enable_ssl = 1, @username = 'Smtp_Username
', @password = 'Smtp_Password
'; GOnota
Especifique credenciais diferentes dos prompts mostrados aqui como prática recomendada de segurança.
Adicionar a conta do Database Mail ao perfil do Database Mail
Para adicionar a conta Database Mail ao perfil Database Mail, use o procedimento armazenado sysmail_add_profileaccount_spSES
ao perfil Notifications
.
Para adicionar a conta ao perfil
-
Use a seguinte instrução SQL.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'Notifications', @account_name = 'SES', @sequence_number = 1; GO
Adicionar usuários ao perfil Database Mail
Para conceder permissão para que um principal do banco de dados msdb
use um perfil do Database Mail, use o procedimento armazenado sysmail_add_principalprofile_sp
O exemplo a seguir concede acesso público ao perfil Notifications
.
Para adicionar um usuário ao perfil
-
Use a seguinte instrução SQL.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'Notifications', @principal_name = 'public', @is_default = 1; GO
Procedimentos armazenados e funções do Amazon RDS para o Database Mail
A Microsoft fornece procedimentos armazenados
Procedimento/Função | Descrição |
---|---|
rds_fn_sysmail_allitems | Mostra as mensagens enviadas, incluindo as enviadas por outros usuários. |
rds_fn_sysmail_event_log | Mostra eventos, incluindo aqueles para mensagens enviadas por outros usuários. |
rds_fn_sysmail_mailattachments | Mostra anexos, incluindo aqueles para mensagens enviadas por outros usuários. |
rds_sysmail_control | Inicia e interrompe a fila de correio (processo DatabaseMail.exe). |
rds_sysmail_delete_mailitems_sp | Exclui mensagens de e-mail enviadas por todos os usuários das tabelas internas do Database Mail. |
Enviando mensagens de e-mail usando o Database
Use o procedimento armazenado sp_send_dbmail
Uso
EXEC msdb.dbo.sp_send_dbmail @profile_name = '
profile_name
', @recipients = 'recipient1@example.com
[;recipient2
; ...recipientn
]', @subject = 'subject
', @body = 'message_body
', [@body_format = 'HTML'], [@file_attachments = 'file_path1
;file_path2
; ...file_pathn
'], [@query = 'SQL_query'
], [@attach_query_result_as_file =0|1
]';
Os seguintes parâmetros são obrigatórios:
-
@profile_name
– o nome do perfil Database Mail a partir do qual enviar a mensagem. -
@recipients
– a lista delimitada por ponto e vírgula de endereços de e-mail para os quais enviar a mensagem. -
@subject
– o assunto da mensagem. -
@body
– o corpo da mensagem. Você também pode usar uma variável declarada como o corpo.
Os seguintes parâmetros são opcionais:
-
@body_format
– esse parâmetro é usado com uma variável declarada para enviar e-mail em formato HTML. -
@file_attachments
– a lista delimitada por ponto e vírgula de anexos de mensagens. Os caminhos de arquivo devem ser caminhos absolutos. -
@query
– uma consulta SQL a ser executada. Os resultados da consulta podem ser anexados como um arquivo ou incluídos no corpo da mensagem. -
@attach_query_result_as_file
– Se deve anexar o resultado da consulta como um arquivo. Defina como 0 para não, 1 para sim. O padrão é 0.
Exemplos
Os exemplos a seguir demonstram como enviar mensagens de e-mail.
exemplo de enviar uma mensagem para um único destinatário
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Automated DBMail message - 1', @body = 'Database Mail configuration was successful.'; GO
exemplo de enviar uma mensagem para vários destinatários
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'recipient1@example.com;recipient2@example.com', @subject = 'Automated DBMail message - 2', @body = 'This is a message.'; GO
exemplo de enviar um resultado de consulta SQL como um anexo de arquivo
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test SQL query', @body = 'This is a SQL query test.', @query = 'SELECT * FROM abc.dbo.test', @attach_query_result_as_file = 1; GO
exemplo de enviar uma mensagem em formato HTML
USE msdb GO DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>'; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test HTML message', @body = @HTML_Body, @body_format = 'HTML'; GO
exemplo de enviar uma mensagem usando um gatilho quando ocorre um evento específico no banco de dados
USE AdventureWorks2017 GO IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL DROP TRIGGER Purchasing.iProductNotification GO CREATE TRIGGER iProductNotification ON Production.Product FOR INSERT AS DECLARE @ProductInformation nvarchar(255); SELECT @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!' FROM INSERTED i; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'New product information', @body = @ProductInformation; GO
Visualizar mensagens, logs e anexos
Você usa procedimentos armazenados do RDS para visualizar mensagens, logs de eventos e anexos.
Para visualizar todas as mensagens de e-mail
-
Use a seguinte consulta SQL:
SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
Para visualizar todos os logs de eventos de e-mail
-
Use a seguinte consulta SQL:
SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
Para visualizar todos os anexos de e-mail
-
Use a seguinte consulta SQL:
SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
Excluir mensagens
Use o procedimento armazenado rds_sysmail_delete_mailitems_sp
para excluir mensagens.
nota
O RDS exclui automaticamente os itens da tabela de e-mail quando os dados do histórico do DBMail atingem 1 GB de tamanho, com um período de retenção de pelo menos 24 horas.
Se você quiser manter itens de e-mail por um período mais longo, poderá arquivá-los. Para ter mais informações, consulte Create a SQL Server Agent Job to Archive Database Mail Messages and Event Logs
Para excluir todas as mensagens de e-mail
-
Use a seguinte instrução SQL.
DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
Para excluir todas as mensagens de e-mail com um status específico
-
Use a seguinte instrução SQL para excluir todas as mensagens com falha.
DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed'; GO
Iniciar a fila de e-mails
Use o procedimento armazenado rds_sysmail_control
para iniciar o processo Database Mail.
nota
A habilitação do Database Mail inicia automaticamente a fila de e-mails
Para iniciar a fila de correio
-
Use a seguinte instrução SQL.
EXECUTE msdb.dbo.rds_sysmail_control start; GO
Parar a fila de e-mails
Use o procedimento armazenado rds_sysmail_control
para interromper o processo Database Mail.
Para interromper a fila de e-mails
-
Use a seguinte instrução SQL.
EXECUTE msdb.dbo.rds_sysmail_control stop; GO
Trabalhar com anexos de arquivos
As seguintes extensões de anexo de arquivo não são compatíveis com as mensagens do Database Mail do RDS no SQL Server: .ade, .adp, .apk, .appx, .appxbundle, .bat, .bak, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .inf1, .ins, .isp, .iso, .jar, .job, .js, .jse, .ldf, .lib, .lnk, .mde, .mdf, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps, .ps1, .psc1, .reg, .rgs, .scr, .sct, .shb, .shs, .svg, .sys, .u3p, .vb, .vbe, .vbs, .vbscript, .vxd, .ws,. sc, .wsf e .wsh.
O Database Mail usa o contexto de segurança do Microsoft Windows do usuário atual para controlar o acesso aos arquivos. Os usuários que fazem login com o SQL Server Authentication não podem anexar arquivos usando o parâmetro @file_attachments
com o procedimento armazenado sp_send_dbmail
. O Windows não permite que o SQL Server forneça credenciais de um computador remoto para outro computador remoto. Portanto, o Database Mail não pode anexar arquivos de um compartilhamento de rede quando o comando é executado a partir de um computador diferente do computador que esteja executando o SQL Server.
No entanto, você pode usar tarefas do SQL Server Agent para anexar arquivos. Para ter mais informações sobre o SQL Server Agent, consulte Uso do SQL Server Agent e SQL Server Agent
Considerações para implantações Multi-AZ
Quando você configura o Database Mail em uma instância de banco de dados Multi-AZ, a configuração não é propagada automaticamente para o secundário. Recomendamos converter a instância Multi-AZ em uma instância Single-AZ, configurar o Database Mail e, em seguida, converter a instância de banco de dados de volta para Multi-AZ. Em seguida, os nós primário e secundário têm a configuração do Database Mail.
Se você criar uma réplica de leitura a partir da instância Multi-AZ que tenha o Database Mail configurado, a réplica herdará a configuração, mas sem a senha para o servidor SMTP. Atualize a conta Database Mail com a senha.