2009-12-25 4 views
4

В моем веб-приложении я хочу отправить почту пользователям в соответствии с заранее выбранными периодами самостоятельно.
например:1 HTML-почта за 3 дней пользователю 01 и 1 HTML-письмо на 20 дней пользователю 02

Как это можно сделать? любые ресурсы? Я могу отправить почту своим приложением из моей учетной записи Gmail на любые почтовые адреса в моих таблицах, но я не знаю, как отправить его автоматически в течение определенного периода времени. (Я использую C# и SQL Express)
Помогите мне!Отправка периодической почты в соответствии с настройками пользователя в ASP.net?

ответ

3

Я нашел решение.
согласно моему поиску у нас есть 3 способа обработки, что:

  1. working with SQL Server to send mail notification in periods of time. (или this)
  2. using Windows service and Creating Timer object and checking the time with it.

но способы 1 и 2, мы должны получить доступ к серверу, и мы должны выделенный хостинг сервер, например, для установки WinService. поэтому он не работает в общем пространстве хоста, которое мы обычно используем. Так что я нашел лучший способ, как вы видите:

    3.     Simulating Windows Services Using ASP.NET Caching For Scheduled Jobs.

ссылка выше является потрясающим решением. Поэтому нет необходимости работать вне нашего веб-приложения.

3

Вам понадобится что-то, что может периодически запускать задания для вас, например, cron daemon или планировщик задач Windows.

По существу, у вас есть периодическое задание и выполняйте любую обработку почты, в которой вы нуждаетесь.

Вы также можете сделать это из кода, если вы можете создать службу Windows, чтобы в основном спать, пока не будет отправлена ​​следующая партия писем.

Проще всего написать планировщик задач или задание cron для периодического запуска. Таким образом вам просто нужен небольшой кусок кода для обработки части отправки почты, а затем вы просто планируете его запускать один раз в час или день или что угодно.

2

я думаю, что есть решение:

1- вы должны добавить 2 колонки в таблице пользователей в вашей БД SQL, если у вас есть таблица пользователей и в первом столбце добавить дату последнего сообщения, отправленные на пользователь и второй столбец имеет период для отправки электронной почты для этого пользователя напр: LastEmailSentDate DateTime SendEmailPeriod INT

2 в коде приложения написать функцию, которая сравнить последнюю дату последнего отправленного письма с период отправки электронной почты.

// здесь код Funciton

public void CompareLastSentDate() 
{ 
    // lets assume that you bring the data for the db using Sqdatareader reader 
    //get the field from the LastEmailSentDate field in the database as i mention before 
    DateTime LastEmailSentDate = Convert.ToDate(reader["DatePeriod"]) 

    // get the field from the SendEmailPeriod of the user field from database 
    int sendEmailPeriod = Convert.Toint32(reader["SendEmailPeriod"]) 

    // now you have the date before the period of day ex: before 3 days depend on user 
    DateTime DatePeriod = new DateTime(DateTime.Now.Year, DateTime.Now.Month, (DateTime.Now.Day - sendEmailPeriod)); 

    // if the last email send is before period of day that mean u have to send an email again 
    if(LastEmailSentDate.Day <= DatePeriod.Day) 
    { 
     // sent the email to the user 
    } 

} 

Примечание: в настоящее время у может быть зациклена среди пользователей и послал по электронной почте

вы можете вызывать эту функцию только один раз в день, называя его из Ура приложения дома page_Load и после первого вызова дня добавьте приложение ["LastFunctionCallDate"] = DateTime.Now, поэтому в следующем вы можете проверить этот флаг, если его == сегодня, и если его еще не называть

+0

, но мы должны периодически вызывать функцию CompareLastSentDate(). вы знаете, что это просто отправьте почту пользователям (если я зациклирую ваш предложенный метод среди пользователей) один раз и как насчет следующего периода? на самом деле эта функция должна звонить каждый день и проверять, отправлять ли почту или нет сегодня. но спасибо вашему ответу. – mahdiahmadirad

+0

проверить мой ответ сейчас, я думаю, u найдет решение этого тоже – Hiyasat

2

Отличный Что касается IIS, на котором размещен ASP.NET, то IIS будет (по умолчанию) pe riodically утилизировать ваш пул приложений в соответствии с настройками самого пула приложений.

Когда запускается пул приложений (который может быть не реже одного раза в день, особенно если ему разрешено бездействовать, например, бизнес-приложение, где большинство действий составляет 9-5), обработчик событий Application_Start в Global.asax уволен. Это может быть использовано для вашей повторяющейся задачи.

Теперь вы не обязательно хотите, чтобы это электронное письмо отправлялось синхронно в этом обработчике Application_Start, поскольку мне кажется, что эта функция обмена сообщениями не является ядром для запуска, но, во всяком случае, использует этот обработчик событий как простой способ периодически делайте свое домашнее хозяйство.

Для отправки async вам следует использовать делегаты async, например.

3

Хай,

Посмотрите quartz.net

Quartz.NET является полнофункциональным, с открытым исходным кодом система планирования заданий, которые могут быть использованы из маленьких приложений для крупных систем масштаба предприятия.

Quartz.NET - это порт очень пропущенных открытых источников Java, планирующий планирование работы, кварц. Quartz.NET поддерживает кластеризацию и постоянство базы данных из-за-коробки и имеет мощные средства для планирования заданий с использованием cron-выражений, интервальных триггеров и исключений.