Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Correction "le nom de profil n'est pas valide" lors de l'envoi de courrier à partir de SQL Server

Si vous essayez d'envoyer du courrier à partir de SQL Server, mais que vous obtenez un "nom de profil non valide", c'est probablement parce que vous n'avez pas spécifié de profil valide pour le @profile_name arguments.

Exemple

Par exemple, supposons que vous utilisiez le code T-SQL suivant pour envoyer un e-mail de notification à l'administrateur chaque fois qu'une tâche de l'Agent SQL Server échoue :

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Your favorite SQL Server Agent job just failed',  
    @subject = 'SQL Server Agent Job: FAILED';

Mais vous obtenez l'erreur suivante :

Msg 14607, Level 16, State 1, Procedure msdb.dbo.sysmail_verify_profile_sp, Line 42
profile name is not valid

Cette erreur nous indique précisément que "le nom du profil n'est pas valide".

Pour envoyer un e-mail avec Database Mail, vous devez spécifier directement un profil au lieu d'un compte d'utilisateur. Dans ce cas, j'ai spécifié un @profile_name de DB Admin Profile , mais un tel profil n'existe pas réellement.

Avant de pouvoir envoyer du courrier, ce que je dois faire est d'ajouter un utilisateur au msdb base de données, créez un compte de messagerie de base de données, puis créez un profil et ajoutez le compte de messagerie de base de données à ce profil. Je dois ensuite ajouter l'utilisateur au profil.

Dans l'ensemble, cela ressemblera à ceci :

-- Switch to the msdb database
USE msdb;

-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'DB Admin',  
    @description = 'Mail account for admin emails.',  
    @email_address = '[email protected]',  
    @replyto_address = '[email protected]',  
    @display_name = 'DB Automated Mailer',  
    @mailserver_name = 'smtp.example.com',
    @port = 25;  
  
-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'DB Admin Profile',  
    @description = 'Profile for admin emails.';  
  
-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'DB Admin Profile',  
    @account_name = 'DB Admin',  
    @sequence_number = 1;
  
-- Grant user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DB Admin Profile',
    @principal_name = 'Marge',
    @is_default = 1;

Évidemment, vous devrez remplacer les différents détails par les vôtres. Cela suppose également que vous spécifiez un serveur de messagerie qui fonctionne.

Une fois cela fait, vous devriez être prêt à envoyer du courrier.