【问题标题】:authenticate to Exchange 2007对 Exchange 2007 进行身份验证
【发布时间】:2011-03-24 19:02:51
【问题描述】:

我有一个简单的邮件实用程序,它应该通过 Exchange 2007 服务器(安装在 Windows Server 2008 R2 64 位上)发送电子邮件,但它不起作用,在命令行中显示以下错误消息: “邮箱不可用。服务器响应为:5.7.1 无法中继”。 我被告知我需要对服务器进行身份验证,但显然我没有正确执行。有什么建议么? 我的代码如下:

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("user@domain.com");
            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("user@domain.com");            
            try
            {
                smtpClient.Send(message);
                Console.WriteLine("Message sent successfully");
            }
            catch (Exception ex)
            {    
                //Error, could not send the message
                Console.WriteLine(ex.Message);
            }
        }
    }
}

【问题讨论】:

    标签: .net c#-4.0 exchange-server exchange-server-2007


    【解决方案1】:

    我进行了测试,您的代码运行良好。请检查您使用的帐户是否在 Exchange 中正确配置,或尝试使用其他帐户。

    【讨论】:

      【解决方案2】:

      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("a@b.com");
      
                  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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        • 2017-03-11
        相关资源
        最近更新 更多