0

我有一个简单的邮件实用程序,它应该通过 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);
            }
        }
    }
}
4

2 回答 2

0

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

于 2011-03-25T05:17:59.743 回答
0

System.Net.Mail.SmtpClient 不会轻易地通过 Exchange 进行身份验证,除非您创建一个连接器以允许在 Exchange 服务器上打开中继。您可以将其限制为仅发送服务器的 ip。但是,对于通过 Exchange 发送邮件,您会发现以下 EWS dll 是更好的通用解决方案。它与您现在的代码一样简单,但更适用于 Exchange。

您可以使用以下 dll 尝试 Microsoft Exchange Web 服务。

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

于 2016-05-04T21:51:34.277 回答