2016-09-01 25 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

谢谢我现在要尝试此操作,请在第7行输入用户名和密码,我是否需要用细节替换这些密码?因为在VS中它表示名称“用户名”在当前上下文中不存在。 – Alexandria

+0

我需要将Sendmail添加到配置文件吗? – Alexandria

+0

抱歉,抱歉。我更新了代码,将用户名和密码包含在正确的位置。它们在代码中定义得更低,导致编译错误。 – Draco

相关问题