2013-02-14 77 views
2

我正在爲我的公司開發一個Web應用程序。其中一部分需要內部用戶填寫表格,並代表該用戶發送電子郵件。這一切都在公司內部。我搜索並找到了兩個可能的路由舊system.net.mail和更新的microsoft.exchange.webservices,但似乎我們的交換服務器需要憑據。我只能得到用戶的登錄名和他的電子郵件地址登錄+「@ company.com」。我怎樣才能做到這一點?通過交換服務器問題發送電子郵件。 (system.net.mail和microsoft.exchange.webservices)

下面是我使用smtp(system.net.mail)的代碼,但它不起作用。

  string[] username =System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\'); 
      string email = username[1] + "@company.com"; 
      MailAddress from = new MailAddress(email); 
      MailAddress to = new MailAddress("[email protected]"); 
      MailMessage message = new MailMessage(from, to);     
      message.Subject = "testmail"; 
      message.Body = "<h>testmail</h>"; 
      message.IsBodyHtml = true; 
      SmtpClient client = new SmtpClient(); 
      client.DeliveryMethod = SmtpDeliveryMethod.Network; 
      client.Send(message); 

回答

2

SmtpClient要求,你要麼直接指定SMTP服務器,或者你有正確的應用程序/機器配置設置讓它自動檢測服務器。您的代碼隱式選擇第二個選項,並且我懷疑您在應用/機器配置中沒有正確的設置。 Exchange不支持默認配置afaik中的SMTP,因此除非熟悉您的Exchange服務器的人知道SMTP已配置並且可以爲您提供正確的地址,否則SmtpClient可能不存在。

交換Web服務(又名EWS)可能是更好的答案,但它不是一個好的答案。爲了使用交換Web服務,您需要以下其中一項:

1)用戶的域名,用戶名和密碼,以便您可以將正確的NetworkCredential傳遞給EWS。在您的情況下,這可能意味着用戶必須將密碼輸入到您的表單中,這可能會破壞您的要求。

2)進程運行的用戶(在Web應用程序中,IIS的應用程序池標識)必須具有以相關用戶身份發送郵件的權限。 3)如果您可以使用ASP.NET身份驗證來模擬用戶(這隻會是一個局域網應用程序中的好方法),那麼您可以有效地回退到選項(2),因爲現在您會說話以EWS作爲用戶,他們顯然將有權從他們自己的地址發送郵件。

正如您所看到的,正確的方法很大程度上取決於您的Exchange/Active Directory/LAN設置。

+0

嗨達娜,您的評論是非常有幫助的。我確實嘗試設置如下的SMTP SmtpClient client = new SmtpClient(「10.21.80.174」); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = true; client.EnableSsl = true;但它仍然無法正常工作。任何想法爲什麼? – John 2013-02-14 18:47:36

+0

與EWS一樣,client.UseDefaultCredentials將發送正在運行的進程/線程的憑證。因此,在Web應用程序中,默認情況下,這將是一些未授權的IIS應用程序池標識,或者如果是這樣配置的話,可能還需要一個服務帳戶。無論哪種方式,它是發送到SMTP的帳戶。與EWS一樣,您需要提供NetworkCredential(即密碼),或允許IIS身份通過SMTP發送。 – 2013-02-14 18:53:36

+0

謝謝達納。我認爲它回答了我的問題。 – John 2013-02-14 20:11:53

相關問題