2016-09-01 12 views
0

抽出がアップロードされると、およそ60人のユーザーに電子メールアラートを送信するための次のコードがあります。私はそれをローカルに実行している場合、それはすべてのアカウントに送信されますが、私はサーバーにそれをアップロードするとき、それは一人に唯一の場合を除き、すべての電子メールを送信しません。私はホスティングやサーバーのものに多くの経験を持っていないので、あなたが私に与えることができるどんな助けも素晴らしいだろう。電子メールは多数の人に送信されません

   if (Session["ExtractNo"].ToString() == "Extract 1") 
      { 

       //Connection String (SendEmail) 
       string SendEmail = ConfigurationManager.ConnectionStrings["Sendmail"].ConnectionString; 

       SqlDataReader reader; 
       String SendMessage = "SELECT Name, Position, Email FROM AuthorisedStaff Where Position = 'CM' or Position = 'DHOD' or Position = 'HOD'"; //<---- change position before launch 

       using (SqlConnection myConnection = new SqlConnection(SendEmail)) 
       { 
        myConnection.Open(); 
        SqlCommand myCommand = new SqlCommand(SendMessage, myConnection); 

        ArrayList emailArray = new ArrayList(); 
        reader = myCommand.ExecuteReader(); 

        var emails = new List<EmailCode>(); 

        while (reader.Read()) 
        { 
         emails.Add(new EmailCode 
         { 
          Email = Convert.ToString(reader["Email"]), 
          Name = Convert.ToString(reader["Name"]), 
          Position = Convert.ToString(reader["Position"]) 
         }); 
        } 

        foreach (EmailCode email in emails) 
        { 
         //Email Config 

         const string username = "[email protected]"; //account address 
         const string password = "######"; //account password 

         SmtpClient smtpclient = new SmtpClient(); 
         MailMessage mail = new MailMessage(); 
         MailAddress fromaddress = new MailAddress("[email protected]", "PTLP"); //address and from name 

         smtpclient.Host = "omavex011"; //host name for particular email address 
         smtpclient.Port = 25; //port number for particular email address 

         mail.From = fromaddress; 
         mail.To.Add(email.Email); 
         mail.Subject = ("PTLP Check"); 

         mail.IsBodyHtml = true; 

         //change context of message below as appropriate 
         mail.Body = HttpUtility.HtmlEncode(email.Name) + " <br /> <p>Part Time Payroll details are now available for checking.</p> "; 

         //smtpclient.EnableSsl = true; 
         smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network; 
         smtpclient.Credentials = new System.Net.NetworkCredential(username, password); 

         smtpclient.Send(mail); 

        } 
       } 

      } 
+1

あなたは他の確認、多分それが問題の一部であり、あなたの 'SmtpClient'を処分されていませんディスポーザブルクラスも 'using'ステートメントでラップします。 –

+4

"それは一人にしかならない限り、電子メールを送信しません。 - それは何をするためのものか?エラーなしで終了する、例外をスローする、無限ループに詰まっているように見える、など。 – Quantic

+0

ファイルをアップロードするコードを完成させます。エラーは表示されません。コードを見落とすように表示されますが、ローカルで実行すると問題はありません。 – Alexandria

答えて

1

これはあなたが単一SmtpClientのインスタンスを使用する方法である私のコメントで述べたように:

 if (Session["ExtractNo"].ToString() == "Extract 1") 
     { 
      //Email Config 
      const string username = "[email protected]"; //account address 
      const string password = "######"; //account password 

      SmtpClient smtpclient = new SmtpClient(); 
      smtpclient.Host = "omavex011"; 
      smtpclient.Port = 25; 
      smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network; 
      smtpclient.Credentials = new System.Net.NetworkCredential(username, password); 

      string SendEmail = ConfigurationManager.ConnectionStrings["Sendmail"].ConnectionString; 

      SqlDataReader reader; 
      String SendMessage = "SELECT Name, Position, Email FROM AuthorisedStaff Where Position = 'CM' or Position = 'DHOD' or Position = 'HOD'"; //<---- change position before launch 

      using (SqlConnection myConnection = new SqlConnection(SendEmail)) 
      { 
       myConnection.Open(); 
       SqlCommand myCommand = new SqlCommand(SendMessage, myConnection); 

       ArrayList emailArray = new ArrayList(); 
       reader = myCommand.ExecuteReader(); 

       var emails = new List<EmailCode>(); 

       while (reader.Read()) 
       { 
        emails.Add(new EmailCode { Email = Convert.ToString(reader["Email"]), 
              Name = Convert.ToString(reader["Name"]), 
              Position = Convert.ToString(reader["Position"]) 
              }); 
              } 

       foreach (EmailCode email in emails) 
       { 

        MailMessage mail = new MailMessage(); 
        MailAddress fromaddress = new MailAddress("[email protected]", "PTLP"); //address and from name 

        mail.From = fromaddress; 
        mail.To.Add(email.Email); 
        mail.Subject = ("PTLP Check"); 
        mail.IsBodyHtml = true; 
        mail.Body = HttpUtility.HtmlEncode(email.Name) + " <br /> <p>Part Time Payroll details are now available for checking.</p> "; 
        smtpclient.Send(mail); 
       } 
      } 
      smtpclient.Dispose(); 
      } 
+0

ありがとう、私はこれを試してみます。 VSでは、現在のコンテキストに "username"という名前が存在しないと言います。 – Alexandria

+0

設定ファイルにSendmailを追加する必要がありますか? – Alexandria

+0

申し訳ありません。正しい場所にユーザー名とパスワードを含めるようにコードを更新しました。コンパイルエラーの原因となったコードの下位に定義されていました。 – Draco

関連する問題