Когато използвате sp_send_dbmail съхранена процедура за изпращане на имейли в SQL Server, обикновено включвате @profile_name аргумент, за да посочите кой профил да използвате.
Ако обаче пропуснете този аргумент, sp_send_dbmail ще използва частния профил по подразбиране за текущия потребител. Ако потребителят няма частен профил по подразбиране, sp_send_dbmail ще използва публичния профил по подразбиране за msdb база данни.
Ако нито едно от тях не е конфигурирано, ще получите следната грешка:
Msg 14636, Level 16, State 1, Procedure msdb.dbo.sp_send_dbmail, Line 112 No global profile is configured. Specify a profile name in the @profile_name parameter.
Ако получавате тази грешка, основно имате три опции:
- Посочете кой профил да използвате, като включите
@profile_nameаргумент при извикване наsp_send_dbmailпроцедура. - Създайте частен профил по подразбиране за текущия потребител.
- Създайте публичен профил за
msdbбаза данни.
Тази статия предоставя пример за третата опция:създайте публичен профил за msdb база данни.
Пример
Ето пример, който минава през процеса на създаване на профил на Database Mail, създаване на акаунт в Database Mail, добавяне на акаунта към профила, след което предоставяне на публичен достъп до този профил.
-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'DB Public Profile',
@description = 'Public Profile for emails.';
-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_id = 1,
@account_name = 'DB Public',
@description = 'Public account for emails.',
@email_address = 'example@sqldat.com',
@replyto_address = 'example@sqldat.com',
@display_name = 'DB Public Mailer',
@mailserver_name = 'smtp.example',
@port = 587;
-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'DB Public Profile',
@account_name = 'DB Public',
@sequence_number = 1;
-- Grant the public principal access to the profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'DB Public Profile',
@principal_name = 'public',
@is_default = 1; Последният ред всъщност е частта, която го прави публичен профил по подразбиране.
С помощта на @is_default = 1 , задавам този профил като обществен профил по подразбиране. Ако използвах @is_default = 0 вместо това няма да е общественият профил по подразбиране.
За да направите профил публичен, посочете @principal_id от 0 или @principal_name на public . Публичният профил е достъпен за всички потребители в msdb база данни (въпреки че потребителите трябва също да са членове на DatabaseMailUserRole за изпълнение на sp_send_dbmail ).
Имайте предвид, че може да има само един обществен профил по подразбиране.
Актуализиране на съществуващ профил
Ако вече имате публичен профил, но това не е общественият профил по подразбиране, можете да използвате sysmail_update_principalprofile_sp за да промените това.
Пример:
EXECUTE msdb.dbo.sysmail_update_principalprofile_sp
@profile_name = 'DB Public Profile',
@principal_name = 'public',
@is_default = 1;