2017-03-27 19 views
0

ASP.NET、C#、Webformsを使用して毎日11時に自動的に電子メールを送信する方法は?毎日特定の時刻に自動的に電子メールを送信する方法

ボタンでクリックしてメールを送信しています。私の要求は毎日午前11時で、メールは自動的に送信されるべきです。これはC#コードを使用して可能ですか?

protected void SendEmail(object sender, EventArgs e) 
{ 
    using (StringWriter sw = new StringWriter()) 
    { 
     using (HtmlTextWriter hw = new HtmlTextWriter(sw)) 
     { 
      gv_TotalAllReg.RenderControl(hw); 
      StringReader sr = new StringReader(sw.ToString()); 
      MailMessage mm = new MailMessage("[email protected]", "[email protected],[email protected]"); 

      mm.Subject = "Daily Report"; 

      mm.Body = "Dear Customer, <br><br>Applications received as on: " + ViewState["date"] + ".<hr />" + sw.ToString() + "<br/>Thanks,<br>Support Team."; 

      mm.IsBodyHtml = true; 
      mm.CC.Add("[email protected]"); 

      SmtpClient smtp = new SmtpClient(); 
      smtp.Host = "smtp.gmail.com"; 
      smtp.EnableSsl = true; 

      System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(); 
      NetworkCred.UserName = "[email protected]"; 
      NetworkCred.Password = "n0"; 
      smtp.UseDefaultCredentials = true; 
      smtp.Credentials = NetworkCred; 
      smtp.Port = 587; 

      smtp.Send(mm); 

      lbl_msg.Visible = true; 
     } 
    } 
} 

以下は私のボタンコードです。

<asp:Button ID="btnSendEmail" runat="server" Text="Send email" OnClick="SendEmail" class="btn btn-md btn-danger pull-right" /> 

私がボタンをクリックすると、gridviewデータが電子メールに送信されます。しかし、私は以下のような考え方をしています。

If(time==11am) 
    { 
    //send mail 
    } 

私はロットを検索しましたが、Windowsサービス関連の例がありますが、そのタイプの概念は得られません。他の方法はありますか?

答えて

4

ジョブスケジューラライブラリを使用する必要があります。

使用hangfireまたはQuartz.net

あなたは仕事に特定の時間をスケジュールすることができるようになります。それはこのようになりますhangfireで

BackgroundJob.Schedule(
    () => SendMail(), 
    new DateTime(2017, 27, 03, 11, 00, 00)); 
+0

私はasp.net Webフォームアプリケーションを使用して作業しています。迅速に達成するためのサンプルコードはありますか? @ Ygalbel –

+3

@ mazhar124もしあなたがそれをすばやくしたいのであれば、経験豊富な開発者を雇ってあなたのためにやってみることをお勧めしますか? –

+0

私は開発者だけですが、新しいことは助けてください。 @UweKeim –

2

Webフォームアプリケーションでは、いくつかの理由のためにスケジュールされたタスクのために間違った場所です。まず、Webフォームはhttpの要求応答パラダイムに基づいています。これは、サーバコードがhttpリクエストによってトリガされることを意味します。ユーザーがページをブラウズしたりボタンをクリックしたりすると、理論的には、条件をチェックする(つまり、スリープまたはタイマーを利用する)無限ループを実装してからSendMailによって実行されるメッセージを送信することができます。ただし、Webフォームアプリケーションが実行されているIISアプリケーションプールがリサイクルされる可能性があるため、これは悪い考えです。代替案として

、あなたは

  • は、メール送信タスクを実行しているコンソールアプリケーションを作成し、Windowsのタスクスケジューラを使用して、それを実行し、または
  • は、メール送信タスクを実行するWindowsサービスを作成することができます、または
  • 他のタスクスケジューリングユーティリティを使用してコンソールアプリケーションを実行したり、Webサービスを呼び出すことができます。
+0

いくつかのコードを提供すれば完全に役立ちます。 @Gaste –

+0

@ mazhar124最初のメソッドの場合、コンソールアプリケーションの 'Main'メソッドに送信メールコードを入れ、[Task Scheduler](https://technet.microsoft.com/en-us)を使って実行します。 /library/cc748993(v=ws.11).aspx)。方法については、[チュートリアル](https://www.aspsnippets.com/Articles/Tutorial-to-create-a-simple-Windows-Service-with-sample-example-in-C-and-VBNet.aspx)があります。時間を使ってWindowsサービスを作成します。タスクスケーリングライブラリを使用する3番目のオプションは、@ Ygalbelの答えに記述されています。 – Gaste

+0

グリッドビューデータのメールを送信していますが、コンソールでgridviewが動作しません。 @Gaste –

関連する問題