Uso de Database Mail en Amazon RDS for SQL Server - Amazon Relational Database Service

Uso de Database Mail en Amazon RDS for SQL Server

Puede utilizar Database Mail para enviar mensajes de correo electrónico a los usuarios desde su instancia de base de datos Amazon RDS en SQL Server. Los mensajes pueden contener archivos y resultados de consulta. Database Mail incluye los siguientes componentes:

  • Objetos de configuración y seguridad – Estos objetos crean perfiles y cuentas y se almacenan en la base de datos msdb.

  • Objetos de mensajería – Estos objetos incluyen el procedimiento almacenado sp_send_dbmail utilizado para enviar mensajes y estructuras de datos que contienen información sobre los mensajes. Están almacenados en la base de datos msdb.

  • Objetos de registro y auditoría – Database Mail escribe información de registro en la base de datos msdb y en el registro de eventos de aplicación de Microsoft Windows.

  • El ejecutable de Database MailDatabaseMail.exe lee desde una cola en la base de datos msdb y envía mensajes de correo electrónico.

RDS es compatible con Database Mail para todas las versiones de SQL Server en las ediciones Web, Estándar y Enterprise.

Limitaciones 

Las siguientes limitaciones se aplican al uso de Database Mail en su instancia de base de datos de SQL Server:

  • Database Mail no es compatible con la edición SQL Server Express.

  • La modificación de los parámetros de la configuración de Database Mail no es compatible. Para ver los valores preestablecidos (predeterminados), utilice el procedimiento almacenado sysmail_help_configure_sp.

  • Los archivos adjuntos no son totalmente compatibles. Para obtener más información, consulte Trabajar con archivos adjuntos.

  • El tamaño máximo del archivo adjunto es de 1 MB.

  • Database Mail requiere configuración adicional en las instancias de base de datos Multi-AZ. Para obtener más información, consulte Consideraciones para implementaciones Multi-AZ.

  • La configuración del Agente SQL Server para enviar mensajes de correo electrónico a operadores predefinidos no es compatible.

Habilitación de Database Mail

Utilice el siguiente proceso para habilitar Database Mail para su instancia de base de datos:

  1. Cree un nuevo grupo de parámetros.

  2. Modifique el grupo de parámetros para establecer el parámetro database mail xps en 1.

  3. Asocie el nuevo grupo de parámetros a la instancia de base de datos.

Creación del grupo de parámetros para Database Mail

Cree un grupo de parámetros para el parámetro database mail xps que corresponde a la edición y versión de SQL Server de su instancia de base de datos.

nota

También puede modificar un grupo de parámetros existente. Siga el procedimiento indicado en Modificación del parámetro que habilita Database Mail.

En el ejemplo siguiente se crea un grupo de parámetros para SQL Server Standard Edition 2016.

Para crear el grupo de parámetros
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, seleccione Parameter groups (Grupos de parámetros).

  3. Elija Create parameter group.

  4. En el panel Create parameter group (Crear grupo de parámetros), haga lo siguiente:

    1. En Familia de grupos de parámetros, elija sqlserver-se-13.0.

    2. En Nombre de grupo, escriba un identificador para el grupo de parámetros, como dbmail-sqlserver-se-13.

    3. En Descripción, escriba Database Mail XPs.

  5. Elija Create (Crear).

En el ejemplo siguiente se crea un grupo de parámetros para SQL Server Standard Edition 2016.

Para crear el grupo de parámetros
  • Utilice uno de los siguientes comandos.

    Para Linux, macOS o 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"

    En 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"

Modificación del parámetro que habilita Database Mail

Modifique el parámetro database mail xps en el grupo de parámetros que corresponde a la edición y la versión de SQL Server de su instancia de base de datos.

Para habilitar Database Mail, establezca el parámetro database mail xps en 1.

En el ejemplo siguiente se modifica el grupo de parámetros que ha creado para SQL Server Standard Edition 2016.

Para modificar el grupo de parámetros
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, seleccione Parameter groups (Grupos de parámetros).

  3. Elija el grupo de parámetros, como ssis-sqlserver-se-13.

  4. En Parámetros, filtre la lista de parámetros para mail.

  5. Elija database mail xps (procedimientos almacenados extendidos [XP] de Database Mail).

  6. Elija Edit parameters (Editar parámetros).

  7. Escriba 1.

  8. Elija Guardar cambios.

En el ejemplo siguiente se modifica el grupo de parámetros que ha creado para SQL Server Standard Edition 2016.

Para modificar el grupo de parámetros
  • Utilice uno de los siguientes comandos.

    Para Linux, macOS o Unix:

    aws rds modify-db-parameter-group \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"

    En Windows:

    aws rds modify-db-parameter-group ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"

Asociación del grupo de parámetros con la instancia de base de datos

Puede utilizar la AWS Management Console o la AWS CLI para asociar el grupo de parámetros de Database Mail con la instancia de base de datos.

Puede asociar el grupo de parámetros de Database Mail con una instancia de base de datos nueva o existente.

Puede asociar el grupo de parámetros de Database Mail con una instancia de base de datos nueva o existente.

Para crear una instancia de base de datos con el grupo de parámetros de Database Mail
  • Especifique el mismo tipo de motor de base de datos y la misma versión principal que ha utilizado al crear el grupo de parámetros.

    Para Linux, macOS o Unix:

    aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --db-instance-class db.m5.2xlarge \ --engine sqlserver-se \ --engine-version 13.00.5426.0.v1 \ --allocated-storage 100 \ --manage-master-user-password \ --master-username admin \ --storage-type gp2 \ --license-model li --db-parameter-group-name dbmail-sqlserver-se-13

    En Windows:

    aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --db-instance-class db.m5.2xlarge ^ --engine sqlserver-se ^ --engine-version 13.00.5426.0.v1 ^ --allocated-storage 100 ^ --manage-master-user-password ^ --master-username admin ^ --storage-type gp2 ^ --license-model li ^ --db-parameter-group-name dbmail-sqlserver-se-13
Para modificar una instancia de base de datos y asociar el grupo de parámetros de Database Mail
  • Utilice uno de los siguientes comandos.

    Para Linux, macOS o Unix:

    aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --apply-immediately

    En Windows:

    aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --apply-immediately

Configuración de Database Mail

Realice las siguientes tareas para configurar Database Mail:

  1. Cree el perfil de Database Mail.

  2. Cree la cuenta de Database Mail.

  3. Agregue la cuenta de Database Mail al perfil de Database Mail.

  4. Agregue usuarios al perfil de Database Mail.

nota

Para configurar Database Mail, asegúrese de que tenga permiso execute sobre los procedimientos almacenados en la base de datos msdb.

Creación del perfil de Database Mail

Para crear el perfil de Database Mail, utilice el procedimiento almacenado sysmail_add_profile_sp. En el ejemplo siguiente se crea un perfil denominado Notifications.

Para crear el perfil
  • Utilice la siguiente instrucción 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

Creación de la cuenta de Database Mail

Para crear la cuenta de Database Mail, utilice el procedimiento almacenado sysmail_add_account_sp. En el ejemplo siguiente, se crea una cuenta denominada SES en una instancia de base de datos de RDS para SQL Server en una VPC privada mediante Amazon Simple Email Service.

Para utilizar Amazon SES se requieren los siguientes parámetros:

Para crear la cuenta
  • Utilice la siguiente instrucción 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'; GO
    nota

    Especifique credenciales distintas de las que se muestran aquí como práctica recomendada de seguridad.

Adición de la cuenta de Database Mail al perfil de Database Mail

Para agregar la cuenta de Database Mail al perfil de Database Mail, utilice el procedimiento almacenado sysmail_add_profileaccount_sp. En el ejemplo siguiente se agrega la cuenta SES al perfil Notifications.

Para agregar la cuenta al perfil
  • Utilice la siguiente instrucción SQL.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'Notifications', @account_name = 'SES', @sequence_number = 1; GO

Adición de usuarios al perfil de Database Mail

Para conceder permiso a una entidad principal de base de datos msdb para utilizar un perfil de Database Mail, utilice el procedimiento almacenado sysmail_add_principalprofile_sp. Una entidad principal es una entidad que puede solicitar recursos de SQL Server. La entidad principal de base de datos debe asignarse a un usuario de autenticación de SQL Server, un usuario de autenticación de Windows o un grupo de autenticación de Windows.

En el ejemplo siguiente se concede acceso público al perfil Notifications.

Para agregar un usuario al perfil
  • Utilice la siguiente instrucción SQL.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'Notifications', @principal_name = 'public', @is_default = 1; GO

Procedimientos y funciones almacenados de Amazon RDS para Database Mail

Microsoft proporciona procedimientos almacenados para usar Database Mail, como crear, enumerar, actualizar y eliminar cuentas y perfiles. Además, RDS provee los procedimientos almacenados y las funciones almacenadas para Database Mail que se muestran en la tabla siguiente.

Procedimiento/Función Descripción
rds_fn_sysmail_allitems Muestra los mensajes enviados, incluidos los enviados por otros usuarios.
rds_fn_sysmail_event_log Muestra eventos, incluidos los de mensajes enviados por otros usuarios.
rds_fn_sysmail_mailattachments Muestra archivos adjuntos, incluidos los de los mensajes enviados por otros usuarios.
rds_sysmail_control Inicia y detiene la cola de correo (proceso DatabaseMail.exe).
rds_sysmail_delete_mailitems_sp Elimina los mensajes de correo electrónico enviados por todos los usuarios de las tablas internas de Database Mail.

Envío de mensajes de correo electrónico con Database Mail

Utilice el procedimiento almacenado sp_send_dbmail para enviar mensajes de correo electrónico mediante Database Mail.

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]';

Se requieren los siguientes parámetros:

  • @profile_name – El nombre del perfil de Database Mail desde el que se va a enviar el mensaje.

  • @recipients – La lista delimitada por punto y coma de direcciones de correo electrónico a las que enviar el mensaje.

  • @subject – El asunto del mensaje.

  • @body – El cuerpo del mensaje. También puede usar una variable declarada como cuerpo.

Los siguientes parámetros son opcionales:

  • @body_format – Este parámetro se utiliza con una variable declarada para enviar un correo electrónico en formato HTML.

  • @file_attachments – La lista delimitada por punto y coma de archivos adjuntos de mensajes. Las rutas de archivo deben ser rutas absolutas.

  • @query – Una consulta SQL que se va a ejecutar. Los resultados de la consulta se pueden adjuntar como un archivo o incluirse en el cuerpo del mensaje.

  • @attach_query_result_as_file – Si se debe adjuntar el resultado de la consulta como un archivo. Establezca en 0 para no, 1 para sí. El valor predeterminado es 0.

Ejemplos

Los ejemplos siguientes muestran cómo enviar mensajes de correo electrónico.

ejemplo de enviar un mensaje a un único destinatario
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
ejemplo de enviar un mensaje a varios destinatarios
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
ejemplo de enviar un resultado de consulta SQL como un archivo adjunto
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
ejemplo de enviar un mensaje en 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
ejemplo de enviar un mensaje mediante un desencadenador cuando se produce un evento específico en la base de datos
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

Visualización de mensajes, registros y archivos adjuntos

Utilice procedimientos almacenados de RDS para ver mensajes, registros de eventos y archivos adjuntos.

Para ver todos los mensajes de correo electrónico
  • Utilice la siguiente consulta SQL.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
Para ver todos los registros de eventos de correo electrónico
  • Utilice la siguiente consulta SQL.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
Para ver todos los archivos adjuntos de correo electrónico
  • Utilice la siguiente consulta SQL.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();

Eliminación de mensajes

Utilice el procedimiento almacenado rds_sysmail_delete_mailitems_sp para eliminar mensajes.

nota

RDS elimina automáticamente los elementos de la tabla de correo cuando los datos del historial de DBMail alcanzan un tamaño de 1 GB, con un periodo de retención de al menos 24 horas.

Si desea conservar los elementos de correo durante un periodo más largo, puede archivarlos. Para obtener más información, consulte Crear un trabajo de agente SQL Server para archivar mensajes y registros de eventos de Database Mail en la documentación de Microsoft.

Para eliminar todos los mensajes de correo electrónico
  • Utilice la siguiente instrucción SQL.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
Para eliminar todos los mensajes de correo electrónico con un estado determinado
  • Utilice la siguiente instrucción SQL para eliminar todos los mensajes fallidos.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed'; GO

Inicio de la cola de correo

Utilice el procedimiento almacenado rds_sysmail_control para iniciar el proceso de Database Mail.

nota

Al habilitar Database Mail, se inicia automáticamente la cola de correo.

Para iniciar la cola de correo
  • Utilice la siguiente instrucción SQL.

    EXECUTE msdb.dbo.rds_sysmail_control start; GO

Detención de la cola de correo

Utilice el procedimiento almacenado rds_sysmail_control para detener el proceso de Database Mail.

Para detener la cola de correo
  • Utilice la siguiente instrucción SQL.

    EXECUTE msdb.dbo.rds_sysmail_control stop; GO

Trabajar con archivos adjuntos

Las siguientes extensiones de archivos adjuntos no son compatibles con los mensajes de Database Mail de RDS en 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, .wsc, .wsf y .wsh.

Database Mail utiliza el contexto de seguridad de Microsoft Windows del usuario actual para controlar el acceso a los archivos. Los usuarios que inician sesión con la autenticación de SQL Server no pueden adjuntar archivos mediante el parámetro @file_attachments con el procedimiento almacenado sp_send_dbmail. Windows no permite que SQL Server proporcione credenciales de un equipo remoto a otro equipo remoto. Por lo tanto, Database Mail no puede adjuntar archivos desde un recurso compartido de red cuando el comando se ejecuta desde un equipo distinto del equipo que ejecuta SQL Server.

Sin embargo, usted puede utilizar trabajos del agente SQL Server para adjuntar archivos. Para obtener más información sobre el Agente SQL Server, consulte Uso del Agente SQL Server y Agente SQL Server en la documentación de Microsoft.

Consideraciones para implementaciones Multi-AZ

Al configurar Database Mail en una instancia de base de datos Multi-AZ, la configuración no se propaga automáticamente a la secundaria. Se recomienda convertir la instancia Multi-AZ en una instancia Single-AZ, configurar Database Mail y, a continuación, convertir la instancia de base de datos de nuevo a Multi-AZ. Entonces, tanto el nodo primario como el secundario tienen la configuración de Database Mail.

Si crea una réplica de lectura desde su instancia Multi-AZ que tiene Database Mail configurado, la réplica hereda la configuración, pero sin la contraseña del servidor de protocolo simple de transferencia de correo (SMTP). Actualice la cuenta de Database Mail con la contraseña.