2016-11-25 17 views
2

Я разрабатываю настольное приложение .NET с SQL Server в качестве базы данных. Одним из требований приложения является то, что если статус записи, например, остается неактивным в течение 30 дней, будет отправлено электронное письмо с напоминанием пользователю, связанному с этой записью.Отправка электронной почты автоматически с использованием задания SQL Server

Это может быть сделано довольно легко в приложении, если оно запущено и запущено. Однако предположим, что в течение определенного периода времени никто не запускает приложение, письмо с напоминанием не будет отправлено, потому что ничего/nodody не запускает действие.

Как насчет создания задания на SQL Server, который может отслеживать записи и отправлять электронные письма по мере необходимости? Кто-нибудь когда-либо делал это?

Большое спасибо!

+0

Я использовал [sp_send_dbmail] (https://msdn.microsoft.com/en-us/library/ms190307.aspx) для этого раньше. Установите его в хранимой процедуре, а затем планируйте периодически запускать, чтобы проверить, нужно ли отправлять электронные письма. Я думаю, вы могли бы использовать его в триггерах, если хотите получать оповещения по электронной почте в реальном времени. – 3N1GM4

+0

Какую версию SQL Server вы используете? – JohnH

+0

@JohnH Я использую 2008 @ 3N1GM4 Я не настолько осведомлен о SqlServer и t-sql, есть ли у вас учебник по 'sp_send_dbmail'? Я постараюсь по-прежнему смотреть. – tab87vn

ответ

2

Учитывая требования вашей задачи, я предлагаю создать консольную программу (w/C# или VB.NET), которая проверяет состояние неактивной (30 дней) строки, а затем генерирует соответствующее уведомление по электронной почте. Затем запустите эту программу каждый час или около того (в зависимости от срочности, связанной с обнаружением состояния неактивной строки) с использованием задания агента SQL Server.

На следующем рисунке показано, как задания агента SQL Server отображаются в Обозревателе объектов для SQL Server 2008 R2.

enter image description here

Этот SO entry охватывает некоторые аспекты по созданию консольной программы, которая работает в определенное время. Агент задания SQL Server имеет несколько параметров планирования, которые должны облегчить ваши потребности.

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

+0

Спасибо. Как разработчик C#, я нахожу этот подход более выполнимым, чем тот, который был реализован на стороне сервера (SqlServer и T-SQL на самом деле не мои вещи). Таким образом, этот подход означает, что я мог бы использовать такие классы, как [MailMessage] (https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage (v = vs.110) .aspx) для подключения к службе SMTP, а не к 'sp_send_dbmail' T-SQL. Что остается тем же самым, так это то, что служба по-прежнему запланирована и инициирована агентом SQL Server. Правильно ли я понимаю? – tab87vn

+1

Правильно, агент SQL Server предоставляет функцию планирования, чтобы вы могли запускать консольную программу с регулярными интервалами времени. Это позволяет создать программу, которая проходит через данные в определенный момент времени. Следующий прогон будет определяться по расписанию, которое вы создаете в агенте SQL Server для программы. Я ожидал бы, что эта программа будет работать в короткий промежуток времени в несколько секунд или около того. Затем программа может оставаться бездействующей, пока планировщик не запустит ее снова для следующего запуска. – JohnH

+0

Из-за требования безопасности я должен использовать первый подход, то есть отправлять электронную почту с помощью хранимой процедуры на стороне сервера. Я установил профиль почты базы данных и успешно отправил тестовое письмо с помощью 'sp_send_dbmail'. У вас есть какие-либо советы о том, как это сделать с агентом по работе? Что-то, что может периодически проверять записи базы данных и определять устаревшие, чтобы отправить электронное письмо с напоминанием. – tab87vn

Смежные вопросы