Kiedy używasz sp_send_dbmail
procedura składowana do wysyłania wiadomości e-mail w SQL Server, zwykle zawiera @profile_name
argument, aby określić, którego profilu użyć.
Jeśli jednak pominiesz ten argument, sp_send_dbmail
użyje domyślnego profilu prywatnego dla bieżącego użytkownika. Jeśli użytkownik nie ma domyślnego profilu prywatnego, sp_send_dbmail
użyje domyślnego profilu publicznego dla msdb
baza danych.
Jeśli żadna z tych opcji nie zostanie skonfigurowana, otrzymasz następujący błąd:
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.
Jeśli otrzymujesz ten błąd, zasadniczo masz trzy opcje:
- Określ, którego profilu chcesz użyć, dołączając
@profile_name
argument podczas wywoływaniasp_send_dbmail
procedura. - Utwórz domyślny prywatny profil dla bieżącego użytkownika.
- Utwórz profil publiczny dla
msdb
baza danych.
Ten artykuł zawiera przykład trzeciej opcji:utwórz profil publiczny dla msdb
baza danych.
Przykład
Oto przykład, który przechodzi przez proces tworzenia profilu poczty bazy danych, tworzenia konta poczty bazy danych, dodawania konta do profilu, a następnie przyznawania publicznego dostępu do tego profilu.
-- 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 = '[email protected]',
@replyto_address = '[email protected]',
@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;
Ostatnia linia jest w rzeczywistości częścią, która sprawia, że jest to domyślny profil publiczny.
Używając @is_default = 1
, ustawiam ten profil jako domyślny profil publiczny. Gdybym użył @is_default = 0
zamiast tego nie byłby to domyślny profil publiczny.
Aby ustawić profil jako publiczny, określ @principal_id
z 0
lub @principal_name
z public
. Profil publiczny jest dostępny dla wszystkich użytkowników w msdb
baza danych (chociaż użytkownicy muszą być również członkami DatabaseMailUserRole
wykonać sp_send_dbmail
).
Pamiętaj, że może istnieć tylko jeden domyślny profil publiczny.
Zaktualizuj istniejący profil
Jeśli masz już profil publiczny, ale nie jest to domyślny profil publiczny, możesz użyć sysmail_update_principalprofile_sp
by to zmienić.
Przykład:
EXECUTE msdb.dbo.sysmail_update_principalprofile_sp
@profile_name = 'DB Public Profile',
@principal_name = 'public',
@is_default = 1;