Utilisation de Database Mail sur Amazon RDS for SQL Server - Amazon Relational Database Service

Utilisation de Database Mail sur Amazon RDS for SQL Server

Vous pouvez utiliser Database Mail pour envoyer des e-mails à des utilisateurs à partir de votre instance de base de données Amazon RDS sur SQL Server. Les messages peuvent contenir des fichiers et des résultats de requête. Database Mail comprend les éléments suivants :

  • Objets de configuration et de sécurité – Ces objets créent des profils et des comptes, et sont stockés dans la base de données msdb.

  • Objets de messagerie – Ces objets incluent la procédure stockée sp_send_dbmail utilisée pour envoyer des messages, ainsi que des structures de données contenant des informations sur les messages. Ils sont stockés dans la base de données msdb.

  • Objets de journalisation et d'audit – Database Mail écrit les informations de journalisation dans la base de données msdb et dans le journal des événements de l'application Microsoft Windows.

  • Le fichier exécutable de Database MailDatabaseMail.exe lit le contenu d'une file d'attente de la base de données msdb et envoie les e-mails.

RDS prend en charge Database Mail pour toutes les versions de SQL Server sur les éditions Web, Standard et Enterprise.

Limites

Les limites suivantes s'appliquent à l'utilisation de Database Mail sur votre instance de base de données SQL Server :

  • Database Mail n'est pas pris en charge pour SQL Server Express Edition.

  • La modification des paramètres de configuration de Database Mail n'est pas prise en charge. Pour afficher les valeurs prédéfinies (par défaut), vous devez utiliser la procédure stockée sysmail_help_configure_sp.

  • Les pièces jointes ne sont pas entièrement prises en charge. Pour plus d'informations, consultez Utilisation de pièces jointes.

  • La taille maximale des pièces jointes est de 1 Mo.

  • Database Mail requiert une configuration supplémentaire sur les instances de base de données multi-AZ. Pour plus d'informations, consultez Considérations sur les déploiements multi-AZ.

  • La configuration de SQL Server Agent pour envoyer des e-mails à des opérateurs prédéfinis n'est pas prise en charge.

Activation de Database Mail

Procédez comme suit pour activer Database Mail sur votre instance de base de données :

  1. Créez un groupe de paramètres.

  2. Modifiez le groupe de paramètres de manière à définir le paramètre database mail xps sur 1.

  3. Associez le groupe de paramètres à l'instance de base de données.

Création du groupe de paramètres pour Database Mail

Créez un groupe de paramètres pour le paramètre database mail xps qui correspond à l'édition et à la version de SQL Server utilisées par votre instance de base de données.

Note

Vous pouvez également modifier un groupe de paramètres existant. Suivez la procédure décrite dans Modification du paramètre qui active Database Mail.

L'exemple suivant crée un groupe de paramètres pour SQL Server Standard Edition 2016.

Pour créer le groupe de paramètres

  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon RDS à l'adresse https://console.aws.amazon.com/rds/.

  2. Dans le panneau de navigation, choisissez Groupes de paramètres.

  3. Choisissez Créer un groupe de paramètres.

  4. Dans le volet Créer un groupe de paramètres, faites ce qui suit :

    1. Pour Famille de groupes de paramètres, choisissez sqlserver-se-13.0.

    2. Pour Nom du groupe, saisissez un identifiant pour le groupe de paramètres, tel que dbmail-sqlserver-se-13.

    3. Pour Description, saisissez Database Mail XPs.

  5. Choisissez Create (Créer).

L'exemple suivant crée un groupe de paramètres pour SQL Server Standard Edition 2016.

Pour créer le groupe de paramètres

  • Utilisez l'une des commandes suivantes.

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

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

Modification du paramètre qui active Database Mail

Modifiez le paramètre database mail xps dans le groupe de paramètres qui correspond à l'édition et à la version de SQL Server utilisées par votre instance de base de données.

Pour activer Database Mail, définissez le paramètre database mail xps sur 1.

L'exemple suivant modifie le groupe de paramètres que vous avez créé pour SQL Server Standard Edition 2016.

Pour modifier le groupe de paramètres

  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon RDS à l'adresse https://console.aws.amazon.com/rds/.

  2. Dans le volet de navigation, choisissez Groupes de paramètres.

  3. Choisissez le groupe de paramètres, par exemple dbmail-sqlserver-se-13.

  4. Sous Paramètres, filtrez la liste des paramètres pour mail.

  5. Choisissez database mail xps.

  6. Choisissez Modifier les paramètres.

  7. Saisissez 1.

  8. Sélectionnez Save Changes.

L'exemple suivant modifie le groupe de paramètres que vous avez créé pour SQL Server Standard Edition 2016.

Pour modifier le groupe de paramètres

  • Utilisez l'une des commandes suivantes.

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

    Pour Windows :

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

Association du groupe de paramètres à l'instance de base de données

Vous pouvez utiliser la AWS Management Console ou l'AWS CLI pour associer le groupe de paramètres Database Mail à l'instance de base de données.

Vous pouvez associer le groupe de paramètres Database Mail à une instance de base de données nouvelle ou existante.

Vous pouvez associer le groupe de paramètres Database Mail à une instance de base de données nouvelle ou existante.

Pour créer une instance de base de données avec le groupe de paramètres Database Mail

  • Spécifiez le type de moteur de base de données et la version majeure utilisés lors de la création du groupe de paramètres.

    Pour Linux, macOS ou 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 \ --master-user-password secret123 \ --master-username admin \ --storage-type gp2 \ --license-model li --db-parameter-group-name dbmail-sqlserver-se-13

    Pour 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 ^ --master-user-password secret123 ^ --master-username admin ^ --storage-type gp2 ^ --license-model li ^ --db-parameter-group-name dbmail-sqlserver-se-13

Pour modifier une instance de base de données et associer le groupe de paramètres Database Mail

  • Utilisez l'une des commandes suivantes.

    Pour Linux, macOS ou Unix :

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

    Pour Windows :

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

Configuration de Database Mail

Pour configurer Database Mail, procédez comme suit :

  1. Créez le profil Database Mail.

  2. Créez le compte Database Mail.

  3. Ajoutez le compte Database Mail au profil Database Mail.

  4. Ajoutez des utilisateurs au profil Database Mail.

Note

Pour configurer Database Mail, assurez-vous que vous disposez des autorisations execute requises sur les procédures stockées de la base de données msdb.

Création du profil Database Mail

Pour créer le profil Database Mail, vous devez utiliser la procédure stockée sysmail_add_profile_sp. L'exemple suivant crée un profil nommé Notifications.

Pour créer le profil

  • Utilisez l'instruction SQL suivante.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'Notifications', @description = 'Profile used for sending outgoing notifications using Amazon SES.'; GO

Création du compte Database Mail

Pour créer le compte Database Mail, vous devez utiliser la procédure stockée sysmail_add_account_sp. L'exemple suivant crée un compte nommé SES qui utilise Amazon Simple Email Service.

L'utilisation d'Amazon SES nécessite les paramètres suivants :

Pour créer le compte

  • Utilisez l'instruction SQL suivante.

    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 = 'email-smtp.us-west-2.amazonaws.com', @port = 587, @enable_ssl = 1, @username = 'Smtp_Username', @password = 'Smtp_Password'; GO

Ajout du compte Database Mail au profil Database Mail

Pour ajouter le compte Database Mail au profil Database Mail, vous devez utiliser la procédure stockée sysmail_add_profileaccount_sp. L'exemple suivant ajoute le compte SES au profil Notifications.

Pour ajouter le compte au profil

  • Utilisez l'instruction SQL suivante.

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

Ajout d'utilisateurs au profil Database Mail

Pour autoriser un principal de base de données msdb à utiliser un profil Database Mail, vous devez utiliser la procédure stockée sysmail_add_principalprofile_sp. Un principal est une entité qui peut demander des ressources SQL Server. Le principal de la base de données doit correspondre à un utilisateur de l'authentification SQL Server, à un utilisateur de l'authentification Windows ou à un groupe de l'authentification Windows.

L'exemple suivant accorde un accès public au profil Notifications.

Pour ajouter un utilisateur au profil

  • Utilisez l'instruction SQL suivante.

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

Fonctions et procédures stockées Amazon RDS pour Database Mail

Microsoft fournit des procédures stockées pour utiliser Database Mail, comme la création, la présentation en listes, la mise à jour et la suppression de comptes et de profils. En outre, RDS fournit les fonctions et procédures stockées Database Mail présentées dans le tableau suivant.

Procédure/Fonction Description
rds_fn_sysmail_allitems Affiche les messages envoyés, y compris ceux envoyés par d'autres utilisateurs.
rds_fn_sysmail_event_log Affiche les événements, y compris ceux des messages envoyés par d'autres utilisateurs.
rds_fn_sysmail_mailattachments Affiche les pièces jointes, y compris celles des messages envoyés par d'autres utilisateurs.
rds_sysmail_control Lance et arrête la file d'attente de la messagerie (processus DatabaseMail.exe).
rds_sysmail_delete_mailitems_sp Supprime des tables internes de Database Mail les e-mails envoyés par l'ensemble des utilisateurs.

Envoi d'e-mails à l'aide de Database Mail

Pour envoyer des e-mails à l'aide de Database Mail, vous devez utiliser la procédure stockée sp_send_dbmail.

Utilisation

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

Les paramètres suivants sont obligatoires :

  • @profile_name – Nom du profil Database Mail à partir duquel envoyer le message doit être envoyé.

  • @recipients – Liste des adresses e-mail, délimitées par des points-virgules, auxquelles le message doit être envoyé.

  • @subject – Objet du message.

  • @body – Corps du message. Vous pouvez également utiliser une variable déclarée comme corps.

Les paramètres suivants sont facultatifs :

  • @body_format – Ce paramètre est utilisé avec une variable déclarée pour envoyer un e-mail au format HTML.

  • @file_attachments – Liste des pièces jointes de message délimitées par des points-virgules. Les chemins d'accès aux fichiers doivent être des chemins absolus.

  • @query – Requête SQL à exécuter. Les résultats de la requête peuvent être joints sous forme de fichier ou inclus dans le corps du message.

  • @attach_query_result_as_file – Permet d'indiquer si les résultats de la requête doivent être joints sous forme de fichier. À définir sur 0 pour si la réponse est négative et sur 1 si elle est positive. La valeur par défaut est 0.

Exemples

Les exemples suivants montrent comment envoyer des e-mails.

Exemple envoi d'un message à un seul destinataire

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

Exemple envoi d'un message à plusieurs destinataires

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

Exemple envoi d'un résultat de requête SQL sous forme de pièce jointe

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

Exemple envoi d'un message au format 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

Exemple envoi d'un message à l'aide d'un déclencheur lorsqu'un événement spécifique se produit dans la base de données

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

Affichage des messages, des journaux et des pièces jointes

Pour afficher les messages, les journaux d'événements et les pièces jointes, vous devez utiliser des procédures stockées RDS.

Pour afficher tous les e-mails

  • Utilisez la requête SQL suivante.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'

Pour afficher les journaux d'événements des tous les e-mails

  • Utilisez la requête SQL suivante.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();

Pour afficher toutes les pièces jointes

  • Utilisez la requête SQL suivante.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();

Suppression de messages

Pour supprimer des messages, vous devez utiliser la procédure stockée rds_sysmail_delete_mailitems_sp.

Note

RDS supprime automatiquement les éléments des tables de messagerie lorsque les données d'historique de Database Mail atteignent 1 Go, avec une période de conservation d'au moins 24 heures.

Si vous souhaitez conserver les éléments plus longtemps, vous pouvez les archiver. Pour plus d'informations, consultez Créer un travail SQL Server Agent pour archiver les messages et les journaux d'événements de Database Mail dans la documentation Microsoft.

Pour supprimer tous les e-mails

  • Utilisez l'instruction SQL suivante.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO

Pour supprimer tous les e-mails dotés d'un état particulier

  • Utilisez l'instruction SQL suivante pour supprimer tous les messages qui ont échoué.

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

Lancement de la file d'attente de messagerie

Pour lancer le processus Database Mail, vous devez utiliser la procédure stockée rds_sysmail_control.

Note

L'activation de Database Mail lance automatiquement la file d'attente de messagerie.

Pour lancer la file d'attente de messagerie

  • Utilisez l'instruction SQL suivante.

    EXECUTE msdb.dbo.rds_sysmail_control start; GO

Arrêt de la file d'attente de messagerie

Pour arrêter le processus Database Mail, vous devez utiliser la procédure stockée rds_sysmail_control.

Pour arrêter la file d'attente de messagerie

  • Utilisez l'instruction SQL suivante.

    EXECUTE msdb.dbo.rds_sysmail_control stop; GO

Utilisation de pièces jointes

Les extensions de pièces jointes suivantes ne sont pas prises en charge dans les messages Database Mail à partir de RDS sur 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 et .wsh.

Database Mail utilise le contexte de sécurité Microsoft Windows de l'utilisateur actuel pour contrôler l'accès aux fichiers. Les utilisateurs qui se connectent avec l'authentification SQL Server ne peuvent pas joindre de fichiers à l'aide du paramètre @file_attachments avec la procédure stockée sp_send_dbmail. Windows n'autorise pas SQL Server à fournir des informations d'identification d'un ordinateur distant à un autre ordinateur distant. Par conséquent, Database Mail ne peut pas joindre des fichiers provenant d'un partage réseau lorsque la commande est exécutée à partir d'un ordinateur autre que celui qui exécute SQL Server.

Vous pouvez toutefois utiliser des tâches SQL Server Agent pour joindre des fichiers. Pour plus d'informations sur SQL Server Agent, consultez Utilisation de SQL Server Agent et SQL Server Agent dans la documentation Microsoft.

Considérations sur les déploiements multi-AZ

Lorsque vous configurez Database Mail sur une instance de base de données multi-AZ, la configuration n'est pas automatiquement propagée vers la zone secondaire. Nous vous recommandons de convertir l'instance multi-AZ en instance mono-AZ, de configurer Database Mail, puis de reconvertir l'instance de base de données en instance multi-AZ. Les nœuds principal et secondaire disposeront ensuite de la configuration de Database Mail.

Si vous créez un réplica en lecture à partir de l'instance multi-AZ sur laquelle Database Mail est configuré, le réplica hérite de la configuration, mais sans le mot de passe du serveur SMTP. Mettez à jour le compte Database Mail avec le mot de passe.