2010-06-08 38 views
2

我有一個Web應用程序在公司的域中的IIS上運行,並且正在通過Intranet訪問。我有這個應用程序基於一些用戶操作發送電子郵件。例如,它的一個調度應用程序的一部分,所以如果一個任務完成,發送一封電子郵件通知其他用戶。爲什麼System.Net.Mail在我的c#.net網絡應用程序的一部分中工作,但不在另一部分中工作?

問題是,電子郵件在某些情況下完美無缺,在其他情況下完全沒有。我有一個login.aspx頁面,在頁面加載時發送報告電子郵件(每天通過Windows任務調度程序加載一次) - 這似乎總能很好地工作。我有一個更新頁面,當輸入文本並單擊「更新」按鈕時應該發送電子郵件 - 大多數情況下此操作都會失敗。這兩個任務都使用我編寫的使用System.Net.Mail發送電子郵件的相同靜態重載方法。

我曾嘗試使用Gmail作爲我的smtp服務器(而不是我們的內部),並獲得相同的結果。

我調查了是否讓本地SMTP服務運行有任何區別,但似乎沒有。此外,由於C#是服務器端代碼,它不應該只關係在服務器上運行什麼,而不是客戶端?

請幫我弄清楚什麼是錯的!我應該在哪裏看?我可以嘗試什麼?

以下是我的代碼發送電子郵件。

public static void sendEmail(String[] recipients, String sender, String subject, String body, String[] attachments) 
{ 
     MailMessage message; 
     try 
     { 
      message = new MailMessage(sender, recipients[0]); 
     } 
     catch (Exception) 
     { 
      return; 
     } 
     foreach (String s in recipients) 
     { 
      if (!message.To.Contains(new MailAddress(s))) 
       message.To.Add(s); 
     } 
     message.From = new MailAddress(sender); 
     message.Subject = subject; 
     message.Body = body; 
     message.IsBodyHtml = true; 
     SmtpClient smtp = new SmtpClient("PRIVATE.PRIVATE.PRIVATE", 25); 
     smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 
     smtp.UseDefaultCredentials = true; 
     if (attachments.Count() > 0) 
     { 
      foreach (String a in attachments) 
      { 
       message.Attachments.Add(new Attachment(a)); 
      } 
     } 
     try 
     { 
      smtp.Send(message); 
     } 
     catch (Exception e) 
     { 

     } 
    } 
} 
+1

當你發送信息時,你收到了什麼錯誤?如果郵件發送時沒有錯誤但未收到,則可能是基於郵件內容的垃圾郵件過濾。 – 2010-06-08 15:15:21

+1

請發送發送電子郵件的代碼。沒有這些,任何人都很難幫助你。 – Raja 2010-06-08 15:15:52

+0

我瞭解它的困難,沒有代碼。我的問題是知道要包含哪些代碼。我已經添加了下面的靜態郵件發送方法。 – Marc 2010-06-08 15:42:39

回答

1

你可能在你的代碼變得異常代碼到達sendmail的方法之前,讓你的sendmail的方法不會被調用,如果你有,你應該檢查有沒有發生什麼事日誌。

此外,它可能適用於您的login.aspx,因爲您沒有得到異常並且代碼完成執行。

+0

我不確定我是否理解你的觀點。它的工作原理是什麼? – Marc 2010-06-08 15:45:02

相關問題