SQL Server предоставя възможност за изпращане на имейли чрез своето решение за Database Mail.
Действителното изпращане на поща се извършва с sp_send_dbmail
съхранена процедура. Но преди да започнете да изпращате имейли от SQL Server, трябва да активирате и конфигурирате Database Mail.
Можете да направите това с SSMS GUI или с T-SQL.
Тази статия демонстрира как да го направите с T-SQL. Предполага се, че Database Mail никога не е била активирана във вашата система и следователно преминава през стъпките за разрешаването й.
Ако предпочитате да използвате SSMS GUI, вижте Как да настроите поща на база данни в SQL Server (SSMS).
Стъпка 1:Активирайте Database Mail XPs
Първото нещо, което трябва да направите, преди да изпратите каквато и да е поща от SQL Server, е да активирате разширените съхранени процедури на Database Mail (Database Mail XPs). Те са в msdb системна база данни.
Това също изисква „показване на разширени опции“ да са активирани.
Те са деактивирани по подразбиране. Така че, ако никога досега не сте използвали Database Mail в системата си, тогава ще трябва да ги активирате.
Ето как да активирате разширените опции и XPs на Database Mail:
EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE
GO
Няма нужда да рестартирате SQL Server. Database Mail XPs вече трябва да са достъпни за използване.
Microsoft всъщност препоръчва разширените опции като тази да се променят само от опитен администратор на база данни или сертифициран техник на SQL Server, но за целите на тази статия ще приема, че сте опитен администратор на DB, който обновява паметта ви 😉
Във всеки случай, за да се изпълни sp_configure
с двата параметъра, за да промените опция за конфигурация или да изпълните RECONFIGURE
изявление, трябва да ви бъде предоставено ALTER SETTINGS
разрешение на ниво сървър. ALTER SETTINGS
разрешението имплицитно се държи от сисадмина иserveadmin фиксирани роли на сървъра.
Стъпка 2:Създайте имейл акаунт и профил
Пощата от база данни се изпраща чрез профил, а не директно от потребителски акаунт.
За да изпращате имейл с Database Mail, трябва да създадете акаунт в Database Mail, профил на Database Mail, да добавите акаунта към профила и след това да предоставите потребителски достъп до този профил. Потребителят трябва да е в msdb
база данни.
T-SQL кодът за това може да изглежда така:
-- 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 the msdb 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;
Ще трябва да замените различните детайли със свои собствени. Това също предполага, че сте посочили пощенски сървър, който работи, и че използвате правилния порт.
Имайте предвид, че вече имах вход, наречен Marge на моя сървър. Тук създадох потребител в msdb база данни за това влизане. След това в последната част предоставих на този потребител достъп до профила, който току-що създадох.
В този пример създадох един акаунт в Database Mail и го добавих към профила. Можете да добавите няколко акаунта към профил, ако желаете. Това може да бъде полезно като отказ при изпращане на поща. Ако първият акаунт се провали, той ще опита следващия, следващия и т.н.
След като получите горния код (със вашите собствени данни), трябва да можете да изпращате поща.
Стъпка 3:Изпратете поща
Както споменахме, действителното изпращане на поща се извършва с sp_send_dbmail
съхранена процедура.
Ето един пример:
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';
Това е прост имейл с основните основни неща като получател, тема, текст на имейла и т.н.
Ако не посочите профил, процедурата ще използва частния профил по подразбиране за текущия потребител. Ако няма частен профил по подразбиране за потребителя, той ще използва обществения профил по подразбиране за msdb база данни. Ако няма обществен профил по подразбиране, ще получите грешка.
Още опции
sp_send_dbmail
процедурата приема доста повече аргументи от това, което използвах в този пример.
Ето официалния синтаксис за sp_send_dbmail
процедура:
sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]
[ , [ @recipients = ] 'recipients [ ; ...n ]' ]
[ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]
[ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]
[ , [ @from_address = ] 'from_address' ]
[ , [ @reply_to = ] 'reply_to' ]
[ , [ @subject = ] 'subject' ]
[ , [ @body = ] 'body' ]
[ , [ @body_format = ] 'body_format' ]
[ , [ @importance = ] 'importance' ]
[ , [ @sensitivity = ] 'sensitivity' ]
[ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]
[ , [ @query = ] 'query' ]
[ , [ @execute_query_database = ] 'execute_query_database' ]
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
[ , [ @query_attachment_filename = ] query_attachment_filename ]
[ , [ @query_result_header = ] query_result_header ]
[ , [ @query_result_width = ] query_result_width ]
[ , [ @query_result_separator = ] 'query_result_separator' ]
[ , [ @exclude_query_output = ] exclude_query_output ]
[ , [ @append_query_error = ] append_query_error ]
[ , [ @query_no_truncate = ] query_no_truncate ]
[ , [ @query_result_no_padding = ] @query_result_no_padding ]
[ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]
Вижте документацията на Microsoft за подробно обяснение на всеки аргумент.
Справка за поща в базата данни
Вижте уроци за база данни за изчерпателен списък с уроци за поща на база данни. Това може да бъде чудесна справка, защото всеки урок се занимава с конкретна част от Database Mail.