2011-10-06 46 views
2

以下是调用sendmail方法的代码。问题是只有第一次拨打sendmail才会将邮件发送给接收方。第二次调用sendmail时,它会完美执行,但不会传送任何邮件。如果我将应用程序置于调试模式,然后逐步执行,则这两封邮件都可以发送。看起来程序的执行速度非常快,出现了问题。因此,我在发送功能下面延迟了一段时间,所以它开始为我工作,但我认为这不是一个完美的解决方案。任何人都知道这里发生了什么。SMTP邮件不发送第二个电话

 if (!String.IsNullOrEmpty(SendMailAdmin)) 
     { 
     SendMail(SendMailFrom, SendMailAdmin, Subject, AdminMessageText + "<br>" + MessageText); 
     } 
     if (!String.IsNullOrEmpty(SendMailOwner)) 
     { 
     SendMail(SendMailFrom, SendMailOwner, Subject, OwnerMessageText + "<br>" + MessageText); 
     } 

    public void SendMail(String MessageFrom, String MessageTo, String MessageSubject, String MessageBody) 
      { 
       MailMessage Message = new MailMessage(); 
       Message.Priority = MailPriority.High; 
       Message.From = new MailAddress(MessageFrom); 
       Message.To.Add(MessageTo); 

       Message.Subject = MessageSubject; 
       Message.IsBodyHtml = true; 
       Message.Body = MessageBody; 

       try 
       { 
        SmtpClient client = new SmtpClient(SMTPServer, Convert.ToInt32(SMTPPort)); 

        client.UseDefaultCredentials = false; 
        client.Credentials = new NetworkCredential("{myusername}", "{mypassword}"); 

        client.Send(Message); 
System.Threading.Thread.Sleep(3000); 

       } 
       catch 
       { 
        throw; 
       } 
      } 
+1

也许有些防洪地方低水平。调用你的方法一次,并发送'MessageTo'数组而不是一个,它将工作。 –

+0

感谢shadow,但内容对于这两个邮件都是不同的,因为您可以在sendmail调用中看到它,它对于AdminMessageText和OwnerMessageText不同。如果我想发送2个用户,那么我可以使用CC,但那不是这种情况。你认为防洪是什么意思? – Chief

+1

被黑客入侵的服务器发送成千上万封垃圾邮件。一种方法可以解决这个问题,不允许一个接一个地发送邮件。所以这很可能是这样的安全措施。查看服务器事件日志以验证它。无论如何,睡几秒是不错的做法,假设防洪水平较低并且不能停用,IMO不会想到更好的办法。 –

回答

1

我个人认为只是会在这一点上为你工作的事情是延迟码。@影子是正确的,这是服务器的配置