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

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 の URL は少しわかりにくい場合があります。また、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

最後の部分を Services.wsdl ではなく Exchange.asmx に変更します

于 2016-05-04T21:51:34.277 に答える