2016-08-31 11 views
-1

登録の有効期限が切れ、システムが自動的にメールをユーザーに送信する方法を教えてください。登録期限が過ぎるとメールを送信MVC 5

これを監視するためにWindowsフォームにアプリケーションを作成することを考えましたが、別の方法があるのだろうかと思います。

ありがとうございます!

+0

データベースに登録日付を記録し、特定の時間が経過したかどうかを確認するためにビジネスロジック内に1つのIF条件を設定します。 –

答えて

2

それは他の回答を参照するためにおそらく悪い形だが、私は、シャノンの答えは合理的な解決策を提示だと思います。彼が言及したように、Windowsタスクスケジューラはコンソールアプリケーションをコンソールウィンドウを表示することなく1日に1回(または何らかのスケジュールで、1日に一度このように思えますが)実行できます。

このソリューションを使用しない場合は、SQL Server jobと考えてください。私は間違いなくこのオプションを自分自身にあまり詳しく見ていないが、明らかにであり、SQL Serverエージェントsend emailsも可能であり、これは明らかに要件の一部である。

Windowsサービスを使用することもできます(定期的にサービスを受けるためにタイマーを使用する人もいます)が、私は決してそのソリューションを気にしませんでした。 Windowsサービスは、デバッグする際のスルー・アンド・スルーの痛みになる可能性があります。しかし、プラスの面では、電子メールのフォーマットをユーザーが望むように簡単に行うことができ、Windowsサービスはユーザーの操作を必要としません。

+1

あなたは間違いなくMS SQLサーバーに電子メールを送信させることができます。それを設定した後、いくつかのパラメータを持つ 'EXEC msdb.dbo.sp_send_dbmail'と同じくらい簡単です – TG01

+0

私は個人的に試していません(したがって、私の答えでは免責事項ですが)この種の問題に対しては合理的な解決策になるようです。 – EJoshuaS

0

データベースに登録情報が格納されていると仮定してDBをチェックし、期限切れのユーザーに電子メールを送信するコンソールアプリケーションを作成し、Windowsタスクスケジューラを使用して特定の時刻に毎日実行するようにアプリをスケジュールします。それは、この簡単です:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.SqlClient; 
using System.Net.Mail; 
using System.Net; 
namespace SO_Question_2 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     sendEmails(); 
    } 

    private static void sendEmails() 
    { 
     List<string> emails = new List<string>(); 
     using (SqlConnection conn = new SqlConnection(@"Your Connection String")) 
     { 
      conn.Open(); 
      using (SqlCommand com = conn.CreateCommand()) 
      { 
       com.CommandText = "select user_Email from users where exireDate > @today"; 
       com.Parameters.AddWithValue("@today", DateTime.Now.Date); 
       SqlDataReader read = com.ExecuteReader(); 
       while (read.Read()) 
       { 
        emails.Add(Convert.ToString(read[0])); 
       } 
      } 
      conn.Close(); 
      string smtpAddress = "smtp.mail.yahoo.com"; 
      int portNumber = 587; 
      bool enableSSL = true; 

      string emailFrom = "[email protected]"; 
      string password = "xxxxxx!"; 

      string subject = "Hello"; 
      string body = "Buy a new license!"; 

      using (MailMessage mail = new MailMessage()) 
      { 
       mail.From = new MailAddress(emailFrom); 
       foreach (string recipient in emails) 
       { 
        mail.To.Add(recipient); 
       } 
       mail.Subject = subject; 
       mail.Body = body; 
       mail.IsBodyHtml = true; 
       // Can set to false, if you are sending pure text. 


       using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber)) 
       { 
        smtp.Credentials = new NetworkCredential(emailFrom, password); 
        smtp.EnableSsl = enableSSL; 
        smtp.Send(mail); 
       } 
      } 
     } 
    } 
} 

}

+0

さて、これを行う別の方法がありますか?コンソールアプリケーションなし? –

+0

SQLでトリガを使用してリストを作成することはできますが、電子メールを送信するにはまだコードが必要です。あなたはサービスまたはコンソールアプリケーションとして実行することができますが、コンソールアプリケーションを使用した場合、ウィンドウは表示されず、タスクスケジューラのバックグラウンドで実行されます。コンソールアプリケーションであなたのためらいはありますか? –

+0

WinForm環境でこのコードを実行する理由は何もありません。送信された電子メールを受け取る人を手で選ぶ場合を除き、ユーザーの操作は必要ありません。 –

関連する問題