Отправка массовой почты в фоновом режиме

Я назвал поток на главной странице на загрузке страницы и назвал функцию EMail, и он выглядит следующим образом:

Page_load()
{
    CreatingThread();
}

protected void CreatingThread()
{
    Thread tSendMails;
    tSendMails = new System.Threading.Thread(delegate() { EmailQueueSettings(); });
    tSendMails.IsBackground = true;
    tSendMails.Start();
}

protected void EmailQueueSettings()
{
   //Function to get emails which are not sent ;
   //looping it and sending it one by one
   //Function to send mails
   //Updating the status after mail is sent   
}

Письма идут, но одному и тому же пользователю несколько раз отправляются письма.

Возможно ли назначить другой поток и разные письма, когда страница будет загружена в следующий раз?

0
nl ja de
Зачем вам помещать его в Page_Load вашей главной страницы, вы хотите, чтобы он пытался отправлять эти письма каждый раз, когда кто-либо звонит на страницу, использующую главную страницу?
добавлено автор Tanner, источник
Я бы использовал Visual Studio Debugger, чтобы понять, почему вы отправляете электронное письмо по тому же адресу несколько раз.
добавлено автор Security Hound, источник
Перечитайте свой пост и измените
добавлено автор user2166576, источник

1 ответы

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

Как правило, то, что я сделал бы, это иметь консольное приложение в фоновом режиме. Но вы можете сделать что-то в этом духе, в методе global.asax Application_Start .

void Application_Start(object sender, EventArgs e)
{
    Task beginSendEmailTask = new Task(SendEmailRunningTask);
    beginSendEmailTask.Start();
}

void SendEmailRunningTask()
{
    while (true)
    {
        Thread.Sleep(300000);//5minutes
        MailMessage[] emails = GetEmailsToSend();
        SmtpClient client = new SmtpClient();//Configure this

        foreach (MailMessage email in emails) 
        {
            client.Send(email);
           //Mark email in your database/application as sent.
        }
    }
}

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

Изменить: Объяснение


Website Starts Task Creates a New Thread Task enters loop

Задача ждет 5 минут
GetEmailsToSend() находит первые 50 из 100 писем для отправки.
Итерирует и отправляет электронные письма

Задача ждет 5 минут
GetEmailsToSend() находит следующие 50 из 100 писем для отправки.
Итерирует и отправляет электронные письма

Задача ждет 5 минут
GetEmailsToSend() не находит никаких писем

Задача ждет 5 минут
GetEmailsToSend() находит 2 новых письма
Итерирует и отправляет электронные письма

1
добавлено
Свяжите прошлое с тем, что у вас есть в настоящее время, которое отправляет электронные письма. Или обновите свой вопрос внизу. Без этого я не могу помочь дальше.
добавлено автор Dan Saltmer, источник
Нет, цикл в SendEmailRunningTask() постоянно работает в фоновом потоке в веб-приложении. Приложение начинается просто отлично.
добавлено автор Dan Saltmer, источник
В каких рамках вы пишете это? Я верю, что он пришел с .NET4. И да, вы могли бы сделать это на 5-минутной петле в консольном приложении или что-то в этом роде.
добавлено автор Dan Saltmer, источник
Я объяснил поток внизу.
добавлено автор Dan Saltmer, источник
Это определенно в .NET 4 и будет доступно в веб-приложении. Если вы не работаете в .NET 4 Client Profile? msdn. microsoft.com/en-us/library/…
добавлено автор Dan Saltmer, источник
См. Мой повторный ответ, думаю, что я неправильно понял ваш запрос изначально, был смущен page_load, который у вас был.
добавлено автор Dan Saltmer, источник
Да, всегда должен быть запущен на фоне вашего приложения. Даже если никто не запрашивает страницу.
добавлено автор Dan Saltmer, источник
Это сработало ... :) Большое спасибо.
добавлено автор bs25, источник
Письма не идут.
добавлено автор bs25, источник
До отправки всех писем ... приложение не загружается?
добавлено автор bs25, источник
В application_start он запускается только один раз, если есть 100 писем, которые будут отправлены, то как это будет работать? есть ли другая альтернатива?
добавлено автор bs25, источник
Будет ли это работать всегда? в Application_End? Не знаю много о global.ascx
добавлено автор bs25, источник
действительно ли это требуется?
добавлено автор bs25, источник
.net 4.0 ..web application
добавлено автор bs25, источник
для запуска этой функции каждые 5 минут это возможно в приложении asp.net?
добавлено автор bs25, источник
Parallel.ForEach() я не получаю.
добавлено автор bs25, источник
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)