Codes DeCodes Ответов: 1

Создание заданий для отправки почты из global. asax отправка нескольких писем


Я использую глобальный.asax, чтобы отправить почту через определенный промежуток времени. Время отправки почты задается в БД и может быть в любое время суток(например, 1 час ночи, 1 час дня, 6 часов утра и так далее). Это мой код :

void Application_Start(object sender, EventArgs e)
   {
       System.Threading.Timer _timer = new System.Threading.Timer(new System.Threading.TimerCallback(GetSchedule));
       _timer.Change(0, (1000 * 60 * 60));
   }


void GetSchedule(Object state)
   {
       try
       {
           lock (state)
           {
               EmailingReportToCustomers.GetDBAndReportTypeOfCustomers();
           }
       }
       catch (Exception ex)
       {

       }
   }



public static void GetDBAndReportTypeOfCustomers()
   {

// Запросы БД на время в таблице. Если время сейчас-это время БД. Затем Отправьте Письмо()
}

Почта отправляется в заданное время по мере необходимости. Проблема, с которой я сталкиваюсь здесь, заключается в том, что одна и та же почта отправляется несколько раз (8 раз). Я думаю, что GetDBAndReportTypeOfCustomers () запрашивается несколько раз.

Что я уже пробовал:

Первоначально не было никакого _timer.Перемены(0, (1000 * 60 * 60));. После некоторых исследований я добавил таймер, как сказал мой им, чтобы контролировать многократную отправку почты. Но это не работает, какая-нибудь помощь ???

[no name]

"Я думаю", вы думаете? Отладьте свое приложение, и вы будете *знать*.
"Но это не работает", мы понятия не имеем, что вы думаете, что означает" не работает". Почему вы не используете правильный инструмент для обработки этой электронной почты?

Codes DeCodes

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

Karthik_Mahalingam

Всегда использовать  Ответить   кнопка для отправки комментариев / запросов заинтересованному пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

F-ES Sitecore

Используйте что-то вроде Quartz.net вместо того, чтобы пытаться развивать свой собственный.

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Во-первых, использование таймера на самом деле не очень хорошая идея. Он связывает весь код отправки электронной почты с вашим сайтом, который работает и работает. Кроме того, он не масштабируется по серверам. У вас будет несколько серверов, выполняющих проверку электронной почты в разное время. Это не работа вашего веб-сервера.

Это можно сделать, просто не очень хорошая идея.

У меня была бы отдельная служба Windows, которая запускает задание отправки электронной почты. Теперь, как вы узнаете, было ли письмо уже отправлено? Вы должны как-то отслеживать эту информацию в своей базе данных. Например, установить флаг, который может сказать: "этому пользователю нужно отправить электронное письмо" и/или "этому пользователю не было отправлено электронное письмо", но поскольку вы делаете это по расписанию, он также должен сказать: "этому пользователю не было отправлено электронное письмо в такое-то время". Как вы это спроектируете, зависит только от вас.