пройти аутентификацию в Exchange 2007 - PullRequest
0 голосов
/ 24 марта 2011

У меня есть простая почтовая утилита, которая должна отправлять электронную почту через сервер Exchange 2007 (который установлен на Windows Server 2008 R2 64bit), и она не работает, выдавая следующее сообщение об ошибке в командной строке: Msgstr "Почтовый ящик недоступен. Ответ сервера: 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);
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2016

System.Net.Mail.SmtpClient не будет легко проходить аутентификацию с Exchange, если вы не создадите соединитель, чтобы разрешить открытое реле на сервере Exchange.Вы можете ограничить его только ip отправляющего сервера.Однако для отправки почты через Exchange вы найдете следующую EWS dll как лучшее общее решение.Это так же просто, как ваш код сейчас, но лучше работает для Exchange.

Вы можете попробовать веб-службы Microsoft Exchange, используя следующую dll.

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();
        }

URL-адрес 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

0 голосов
/ 25 марта 2011

Я проверил, и ваш код работает нормально.Убедитесь, что используемая учетная запись правильно настроена в Exchange, или попробуйте использовать другую учетную запись.

...