2011-03-24 99 views
0

我有一個簡單的郵件實用程序,該郵件實用程序應該通過Exchange 2007服務器(安裝在Windows Server 2008 R2 64位上)發送電子郵件,它不起作用,並提供以下錯誤消息在命令行中:「郵箱不可用,服務器響應是:5.7.1無法中繼」。 我被告知我需要對服務器進行身份驗證,但顯然我沒有正確執行。有什麼建議麼? 我的代碼如下:向Exchange 2007進行身份驗證

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Mail; 

namespace SendMail 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SmtpClient smtpClient = new SmtpClient("x.x.x.x", 25); 
      NetworkCredential basicCredential = new NetworkCredential("username", "password", "domain"); 
      MailMessage message = new MailMessage(); 
      MailAddress fromAddress = new MailAddress("[email protected]"); 
      smtpClient.Host = "x.x.x.x"; 

      smtpClient.UseDefaultCredentials = false; 
      smtpClient.Credentials = basicCredential; 
      message.From = fromAddress; 
      message.Subject = "test message"; 
      message.Body = "test message"; 
      message.To.Add("[email protected]");    
      try 
      { 
       smtpClient.Send(message); 
       Console.WriteLine("Message sent successfully"); 
      } 
      catch (Exception ex) 
      {  
       //Error, could not send the message 
       Console.WriteLine(ex.Message); 
      } 
     } 
    } 
} 

回答

0

我測試過了,你的代碼工作正常。請檢查您使用的帳戶是否在Exchange中正確配置,或嘗試使用其他帳戶。

0

System.Net.Mail.SmtpClient不會輕易通過Exchange進行身份驗證,除非您使連接器允許Exchange服務器上的開放中繼。您可以將其限制爲僅發送服務器的IP。但是,通過Exchange發送郵件,您會發現以下EWS DLL是更好的通用解決方案。這與您的代碼現在一樣簡單,但對Exchange更好。

您可以使用以下dll嘗試Microsoft Exchange Web Services。

https://www.microsoft.com/en-us/download/details.aspx?id=42951

目的是非常簡單的,並與使用System.Net.Mail。

這是我從MSDN示例修改的一個示例。

using Microsoft.Exchange.WebServices.Data; 


     protected void EmailEws() 
     { 
      ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

      service.Credentials = new WebCredentials("user", "password", "domain(local)"); 

      service.TraceEnabled = true; 
      service.TraceFlags = TraceFlags.All; 
// EWS service url. 
      service.Url = new Uri("https://example.com/EWS/Exchange.asmx"); 

      EmailMessage email = new EmailMessage(service); 

      email.ToRecipients.Add("[email protected]"); 

      email.Subject = "HelloWorld";   
      email.Body = new MessageBody("<p>This is the first email I've sent by using the EWS Managed API!</p>"); 
      // set Body before BodyType or an error is raised!               
      email.Body.BodyType = BodyType.HTML; 

      email.SendAndSaveCopy(); 
     } 

EWS的網址可能有點混亂。這也取決於您是否有權訪問Exchange服務器。這裏有一些幫助。

https://msdn.microsoft.com/en-us/library/office/dn509511(v=exchg.150).aspx

有益的,如果你沒有訪問Exchange服務器。 http://nuanceimaging.custhelp.com/app/answers/detail/a_id/13098/~/determining-the-exchange-web-services-(ews)-url-for-the-sharescan-exchange

更改最後部分Exchange.asmx,不Services.wsdl