Автоматически отправлять электронные письма через SQL Server Express Edition - PullRequest
0 голосов
/ 06 декабря 2018

Я просмотрел весь интернет, но не смог найти решение.Есть ли способ автоматически отправлять отчеты по электронной почте с помощью SQL Server Express Edition?Мне удалось настроить свой сервер, и он отправляет электронную почту, если я запускаю код вручную, но он мне нужен для отправки электронной почты один раз в неделю.

Вот пример моего сценария:

exec msdb.dbo.sp_send_dbmail 
@profile_name = 'MailTest3', 
@recipients = 'a@aaa.com', 
@subject = 'Mail Test 2', 
@body = 'Mail Sent Successfully', 
@body_format = 'text'

Я настроил все как Андрей Николов в предложенном ниже комментарии, но это не сработало.Электронные письма не отправлялись автоматически.

После проверки журналов я обнаружил следующее сообщение:

Отказано в разрешении EXECUTE для объекта 'sp_send_dbmail', базы данных 'msdb', схемы 'dbo'.as

Так что похоже на проблему с разрешением.Но при попытке предоставить пользователю dbo разрешения с помощью скрипта

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = 'db_username';
GO

я получил сообщение, что этого пользователя не удалось найти:

Сообщение 15410, уровень 11, состояние 1, процедураmsdb.dbo.sp_addrolemember, строка 35 [Batch Start Line 0] Пользователь или роль 'db_username' не существует в этой базе данных.

Этот сценарий работал только после того, как я пытался использовать пользователя домена.

И файл * .bat начал работать только после того, как я запустил его с пользователем домена

sqlcmd -S localhost -E -Q "EXEC Send_email_Friday" -o "C:\Log_email.txt"

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Проблема с SQL Server Express заключается в том, что нет агента для запуска сценариев по расписанию.Но вы можете сделать это, используя Windows Task Scheduler и sqlcmd .

  1. Напишите скрипт для генерации вашего отчета, отправьте его по электронной почте и сохраните его.в файл.Допустим, это D:\Scripts\WeeklyReport.sql.
  2. Запустите планировщик заданий и создайте новое базовое задание.
  3. Дайте ему имя и определите расписание, еженедельно в вашем случае.
  4. Выберите, чтобы запустить программу и найдите sqlcmd.exe.Обычно вы можете найти его в C:\Program Files\Microsoft SQL Server\xxx\Tools\Binn, где xxx зависит от вашей версии SQL Server, например, 120.
  5. Добавьте аргументы в командной строке, чтобы указать, к какому серверу / базе данных подключаться,как пройти аутентификацию и какой скрипт выполнить.Например, -S MyComputer\SQLEXPRESS -d MyDatabaseName -U myusername -P mypassword -i D:\Scripts\WeeklyReport.sql (в случае, если вы подключитесь с использованием имени пользователя и пароля, то есть аутентификации SQL) или пропустите параметры для имени пользователя и пароля и укажите -E для использования аутентификации Windows.В последнем случае он будет подключаться в контексте входа в систему, который будет запускать запланированное задание.

Когда вы создаете запланированное задание, откройте диалоговое окно свойств и проверьте параметры безопасности.Вы можете изменить их, чтобы запустить команду, даже если в данный момент не зарегистрировано ни одного пользователя:

enter image description here

Закройте диалоговое окно и попробуйте запуститьЗадача подтвердить это работает правильно.В целях диагностики вы можете указать выходной файл, в который будут сохраняться результаты выполнения (добавьте -o D:\Scripts\WeeklyReport.txt).

0 голосов
/ 06 декабря 2018

SQL Server Express не поддерживает почту базы данных.Если это только система разработки, вы можете установить SQL Server Developer Edition, но она не лицензирована для производственного использования.Для этого вам необходимо приобрести полную копию SQL Server.

...