Все описанное в этом посте будет актуально для Microsoft SQL Server 2005 и старших версий (2008, 2008 R2, Denali). Так же, в рамках этого поста, словосочетание «SQL Server» будет обозначать только Microsoft SQL Server, исключая MySQL, PostgreSQL, FireBird и прочие СУБД, которые, теоретически, можно назвать SQL Server.
Что это за штука такая, Database Mail?
Database Mail появился в SQL Server 2005, заменив собой компонент SQLMail. Database Mail (как ранее SQLMail) используется для отправки сообщений электронной почты самим SQL Server’ом (точнее, его компонентом Database Engine). Коренным отличием Database Mail от SQLMail является то, что последний, для отправки сообщений, использовал стороний клиент (Microsoft Outlook), который должен был быть установлен на машине с SQL Server’ом, а Database Mail сам общается с почтовым сервером по протоколу SMTP.
Для чего это надо?
Фактически, каждый решает для себя — нужно ему это или нет. В качестве примеров использования можно привести следующее:
- каждое утро менеджер хочет получать на почту итоги вчерашнего дня: сколько и какой продукции было продано, какой клиент сделал наибольшую заявку, какие клиенты имеют задолженность и прочее. Иными словами — результаты любого запроса могут быть отправлены с помощью Database Mail;
 - администратор баз данных хочет получать на почту информацию о том какие задачи(job’ы) или планы обслуживания завершились с ошибкой (или наоборот, выполнились успешно);
 - администратор баз данных хочет получать на почту информацию об ошибках определенного уровня серьезности, или с определенным номером, произошедших на сервере;
 - администратор баз данных хочет получать на почту информацию о том, что размер базы данных вплотную приближается к размеру жесткого диска и пора уже трясти шефа на предмет покупки нового обрудования;
 - администратор баз данных хочет получать на почту что-то еще.
 
Таким образом, Database Mail, на мой взгляд, будет наиболее полезен именно администраторам баз данных SQL Server, а учитывая, что сотовые операторы предоставляют услугу email-to-sms (честно говоря не силен в ОПСОСах, может это и редкость, но у моего такая есть и является абсолютно бесплатной), может стать еще и очень оперативным средством информирования.
Что нам понадобится?
Итак, в первую очередь нам нужнен SQL Server версии 2005 или старше. У меня стоит SQL Server 2008 R2, но, в данном случае, разницы в настройках не будет никакой. Database Mail, по мнению Microsoft, доступен во всех редакциях, за исключением Express Edition (пруф), однако, вот здесь есть подробное описание, как этот компонент можно включить. Второе, без чего Database Mail работать не будет — это почтовый сервер, доступный с машины с SQL Server’ом и учетная запись на нем, от которой будут отправляться письма. В моем примере роль такого сервера будет выполнять mail.ru. И третье — членство в роли sysadmin у вашей учетной записи в SQL Server, поскольку настройку могут производить только члены этой роли.
Поехали
  В первую очередь, подключимся к нашему SQL Server’у с помощью SQL Server Management Studio. Естественно, все действия по настройке можно выполнить с помощью предопределенных хранимых процедур, но я не стремлюсь делать запросам все что возможно, тем более, если для этого существуют удобные мастера.  Раскрываем ветку Management, выбираем пункт Database Mail, тыкаем по нему правой кнопкой мыши и выбираем «Configure Database Mail». Приветственный экран мастера можно сразу отметить галкой «Больше никогда не показывать мне эту дрянь», поскольку полезной информации на нем нет.  И вот, мы уже стоим перед выбором. Теперь мы можем: настроить Database Mail, изменить профили и аккаунты Database Mail, изменить безопасность профилей и, наконец, изменить конфигурацию системы. Поскольку Database Mail мы ранее не использовали — изменять нам пока нечего, выбираем первый пункт «Set up Database Mail» и нажимаем «Next».





- Account Retry Attempts — количество попыток отправки письма с использованием конкретной учтеной записи (помните, что мы можем добавить в профиль несколько учетных записей? Вот, сначала SQL Server попробует отправить письмо от имени учетной записи с приоритетом 1 столько раз, сколько мы укажем, а потом, если письмо так и не уйдет — будет перебирать менее приоритетные учетные записи)
 - Account Retry Delay (seconds) — именно столько секунд SQL Server будет ждать прежде чем повторить попытку отправить письмо
 - Maximum File Size (Bytes) — SQL Server может добавлять файлы-вложения в письмо. Этим параметром можно ограничить размер такого вложения
 - Prohibited Attachment File Extensions — запрещенные разрешения для вложений, чтобы пользователь не мог сгененерировать и отправить файл .vbs, например
 - Database Mail Executable Minimum Lifetime (seconds) — Database Mail представляет из себя отдельный файл DatabaseMail(90-110).exe — этот параметр определяет через какой промежуток времени SQL Server «прибьет» запущенный процесс при отсутствии активности
 - Logging Level — этот параметр определяет как много информации будет писаться в лог, при работе Database Mail.
 
На последнем экране мы увидим какие учетные записи и профили будут созданы, а так же каким пользователям будет добавлена возможность использовать созданный профиль.  Смело жмем «Finish».


SELECT is_broker_enabled  FROM sys.databases  WHERE name = 'msdb'  Если возвращаемое значение отличается от единицы, Service Broker выключен. Вы можете включить его так:ALTER DATABASE msdb SET ENABLE_BROKER  Если же Service Broker включен, все настройки сделаны верно — чем черт не шутит — проверьте почту еще раз. Письма нет? Тыкайте в кнопочку «Troubleshoot», которая есть в окне, появившемся после нажатия кнопки «Send Test E-Mail» и посмотрите типовые ошибки в справке от Microsoft.  Будем считать, что теперь Database Mail у нас настроена и тестовое письмо пришло.
А дальше, дальше-то что?
  А дальше начинается самое интересное. Теперь мы наконец-то можем использовать Database Mail для того чтобы получать уведомления от SQL Server’а о том, что у него что-то не так (или же наоборот, что у него все замечательно).  SQL Server может прислать уведомление о том, что задание выполнилось успешно (или наоборот — завершилось с ошибкой). Точнее это может сделать SQL Server Agent, собственно, и выполняющий задания. Для того, чтобы он смог это сделать нужно сделать следующее.  В первую очередь — создать оператора. То есть лицо, получающее уведомления. Для этого мы открываем SQL Server Agent, выбираем Operators и тыкаем «New operator»




- Когда и какое задание выполнялось (JOB RUN: ‘Backup With Errors’ was run on 19.11.2011 at 19:35:12)
 - Сколько времени выполнялось задание до того как обнаружилась ошибка (DURATION: 0 hours, 0 minutes, 1 seconds)
 - Итог выполнения (STATUS: Failed) — хотя, собственно, при успешном выполнении задания, письмо бы и не пришло
 - Сообщение из журнала событий этого задания (MESSAGES: The job failed. The Job was invoked by User KATE-HOMErancid. The last step to run was step 1 (test).), включающее в себя имя пользователя, выполнявшего задание
 
Этой информации хватит для того чтобы понять что, когда и где не выполнилось и поможет в определении вариантов решения возникшей проблемы.
Хэппи энд
Надеюсь эта информация была хоть кому-нибудь полезной и возможно даже интересной. Если у кого-нибудь возникнет интерес — я могу написать о других способах использования Database Mail. В частности: внутри планов обслуживания, для создания предупреждений (Alerts), а так же о хранимой процедуре sp_send_dbmail, используемой для отправки электронных сообщений с использованием Database Mail.
P.S.
На хабре появился ещё один пост, посвящённый настройке Database Mail. Там написано как можно настроить Database Mail с помощью скриптов.
Для оперативного реагирования необходимо своевременно получать информацию об ошибках выполнения заданий. Для этого в SQL Server существует специальный механизм оповещение. В этой статье мы рассмотрим как его настроить.
МЕХАНИЗМ ОПОВЕЩЕНИЙ
Настройку оповещений можно разделить на 4 этапа:
- Включение и настройка профиля компонента Database Mail
 - Создание оператора оповещений и настройка почты агента SQL Server
 - Включение триггеров и задач оповещений
 - Проверка работоспособности
 
НАСТРОЙКА ПРОФИЛЯ КОМПОНЕНТЫ DATABASE MAIL
Включить компонент работы с почтой DATABASE MAIL нужно с помощью следующего запроса:
Для того чтобы настроить учетную запись компонента Database Mail необходимо в дереве «Обозревателя Объектов» (Object Explorer) выбрать настраиваемый экземпляр SQL Server, перейти в «Управление» (Management), далее «Компонент Database Mail» (Database Mail). Щелкнув правой клавишей мыши на данном пункте, будет открыто контекстное меню, в котором необходимо выбрать «Настроить…» (Configure…), после чего будет открыто окно мастера настройки.

Первую страницу можно пропустить, поэтому перейдем сразу ко второй. Здесь нам необходимо выбрать первый пункт «Установить компонент Database Mail…» (Setup Database Mail…) и нажать «Далее» (Next). На третьей странице задаем имя и описание профиля, затем нажимаем кнопку «Добавить» для добавления учетной записи SMTP. В открывшемся окне необходимо заполнить данные учетной записи (e-mail адрес, сервер и порт SMTP, а так же параметры аутентификации).
На следующей странице необходимо назначить безопасность профиля: указать открытый это профиль или частный (и для каких пользователей), а также можно указать является ли профилем по умолчанию. Для наших целей достаточно сделать профиль открытым и профилем по умолчанию. На пятой странице оставляем все по умолчанию, на последней странице жмем «Готово» (Finish)
После того как профиль настроен, его надо проверить, для этого в контекстном меню пункта «Компонент Database Mail»(вызываемым щелчком правой мыши по данному пункту) надо выбрать «Отправить тестовое сообщение» (Send Test E-Mail). В открывшемся окне следует заполнить поле «Кому» (To) и нажать «Отправить …» (Send …)
Если все сделано правильно, тогда в ближайшее время на почту будет доставлено тестовое письмо.
Если нет, то выполните настройки системных параметров по картинке:
ДОБАВЛЕНИЕ ОПЕРАТОРА ОПОВЕЩЕНИЙ
Операторы — это псевдонимы людей или групп, которые могут получать электронные уведомления о завершении задач, заданий или предупреждения. Для добавления нового оператора оповещений необходимо в дереве «Обозревателя Объектов» (Object Explorer) выбрать настраиваемый экземпляр SQL Server, перейти в «Агент SQL Server» (SQL Server Agent), далее «Операторы» (Operators). Щелкнув правой клавишей мыши на данном пункте, выбрать «Создать оператора» (New Operator), после чего будет открыто окно свойств оператора оповещений.
Настройки оператора находятся на закладке «Общие» (General). Здесь необходимо заполнить «Имя» (Name), указать состояние «Включено» (Enabled), ввести адрес электронной почты. В целом, существуют альтернативные способы оповещения помимо электронной почты: с помощью команды net send или сообщением на пейджер.
На этом настройка оператора завершена, перейдем к следующему шагу.
НАСТРОЙКА ПОЧТЫ АГЕНТА SQL SERVER
Данный пункт необходим для рассылки уведомлений по электронной почты агентом SQL Server. Такая рассылка происходит, например, для уведомления о статусе выполнения задания. Для настройки почты агента необходимо в дереве «Обозревателя Объектов» (Object Explorer) выбрать настраиваемый экземпляр SQL Server, перейти в «Агент SQL Server» (SQL Server Agent), из контекстного меню выбрать «Свойства» (Properties).
В открывшемся окне перейдем на вкладку «Система предупреждений» (Alert System), установим флажок «Включить почтовый профиль» (Enable mail profile), в качестве почтовой системы оставим «Компонент Database Mail» (Database Mail) и выберем ранее созданный профиль в соответствующем поле.
ВКЛЮЧЕНИЕ ТРИГГЕРОВ И ЗАДАЧ ОПОВЕЩЕНИЯ
Для удобства проверки настроим оповещения на успешное выполнение заданий, в реальной жизни больше имеет смысл подключать оповещения на случай ошибки. В целях демонстрации настроим оповещения на наше «Задание» (Job), а так же добавим оповещение в наш план обслуживания.
Итак, откроем наш план обслуживания, в нем выделим субплан «UpdateStatistics». На рабочую область субплана перетащим задачу «Уведомление оператора» (Notify Operator Task). Протянем стрелку от задачи «Обновление статистики». Двойным кликом по задаче «Уведомление оператора» откроем ее свойства, отметим созданного оператора, а так же введем «Тему»(Subject) и «Текст» (Message) письма. Для того чтобы изменить условие оповещения (по умолчанию стрелка вида «Успешное завершение») надо щелкнуть правой клавишей мыши на стрелке и выбрать ее вид: успешное выполнение/ошибка/выполнение.
Теперь перейдем к настройке оповещений в «Заданиях» (Jobs). Откроем свойства нашего задания и перейдем на вкладку «Уведомления» (Notifications). Установим галки рядом с видами уведомлений, которые мы хотим использовать (у меня это только электронная почта), далее выберем оператора и условие оповещения (успешное завершение/завершение с ошибкой/любое завершение).
ПРОВЕРКА РАБОТОСПОСОБНОСТИ ОПОВЕЩЕНИЙ
Выполним ручной запуск нашего задания, для этого щелкнем правой клавишей мыши на нем и выберем «Запустить задание на шаге» (Start Job at Step). В результате должно прийти на почту 2 письма: одно (с установленными нами темой и текстом) соответствует задаче «Уведомления оператора» в плане обслуживания; второе — информирует о выполнении задания в целом.
Если не пришло ни одного письма тогда, возможно:
- Ошибка в параметрах учетной записи SMTP. Попробуйте отправить тестовое сообщение, если оно не отправляется — перепроверьте параметры
 - Ошибка в правах безопасности профиля. Перепроверьте установлены ли права как описано ранее. Если все установлено верно, а результата нет — попробуйте указать все права: открытый и все частные, а так же сделать профилем по умолчанию для каждого права
 
Если не пришло только письмо с результатом выполнения задания: проверьте что почта SQL Server’а настроена в соответствии с вышеизложенным.
Используемые источники:
- https://habr.com/post/132902/
 - https://lepkov.ru/ms-sql-server-email-notify/
 
Настройка регулярного резервного копирования БД MS SQL Server
Windows Server 2016 в Azure Pack Infrastructure: виртуальные рабочие места за 10 минут
							
Как настроить свой почтовый сервер
PTR записи на DNS сервере
Служба WDS для Windows Server 2008
Настройка iCloud Mail на устройствах