4

내부 Exchange 2007 서버 (SMTP 사용)를 통해 같은 도메인에있는 모든 컴퓨터에서 C# 콘솔 응용 프로그램으로 보낸 자동화 된 전자 메일을 보내려고하지만 인증 된 보낸 사람 만 허용하는 메일 그룹이 있습니다. .인증 된 보낸 사람 만 허용하는 메일 그룹에 SmtpClient 및 DefaultNetworkCredentials를 사용하여 메일을 보내는 방법은 무엇입니까?

#550 5.7.1 RESOLVER.RST.AuthRequired; authentication required ##rfc822;[email protected]

내가 System.Net.Mail.SmtpClient을 사용하고 System.Net.CredentialCache.DefaultNetworkCredentials에 자격 증명 속성을 설정하지만, 어딘가에 선을 따라 계정의 자격 증명이 프로그램을 실행 해요 : 기본적으로 내가 보내고있다 우편물이와 교환에 의해 거부지고 (저, 유효한 사서함이있는 유효한 도메인 사용자)는 Exchange로 올바르게 전달되지 않습니다.

사용자 이름이나 암호를 코드 자체 나 다른 종류의 구성 파일에 하드 코딩하고 싶지 않기 때문에 System.Net.CredentialCache.DefaultNetworkCredentials을 사용하고 있습니다. Windows 인증을 사용하여 SMTP 서버에서 프로세스를 인증하려고합니다. 내가 다시 자신 (로 이것을 실행할 때마다

using System; 
using System.Net.Mail; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var smtpClient = new SmtpClient 
           { 
            Host = "MAIL", 
            Port = 25, 
            DeliveryMethod = SmtpDeliveryMethod.Network, 
            Credentials = System.Net.CredentialCache.DefaultNetworkCredentials 
           }; 

      var mailMessage = new MailMessage 
            { 
             Body = "Testing", 
             From = new MailAddress(Environment.UserName + "@example.com"), 
             Subject = "Testing", 
             Priority = MailPriority.Normal 
            }; 

      mailMessage.To.Add("[email protected]"); 

      smtpClient.Send(mailMessage); 
     } 
    } 
} 

, 내가에 유효한 사용자입니다 : 여기

내가 문제 (도메인 이름이 anonomized 된)를 재생하기 위해 사용하고 테스트 프로그램입니다 도메인, 나는 응답 거래소에서 배달 할 수없는 반송 메시지를 얻을 수) Exchange 서버에있는 기존 사서함 : 나는 우리의 Exchange 서버 관리자에게 이야기

#550 5.7.1 RESOLVER.RST.AuthRequired; authentication required ##rfc822;[email protected]

그는 Exchange 서버의 EV에서 다음과 같은 오류를 보았다 엔트 로그 :

Account For Which Logon Failed: 
    Security ID: NULL SID 
    Account Name: 
    Account Domain: 

Failure Information: 
    Failure Reason: Unknown user name or bad password. 
    Status:   0xc000006d 
    Sub Status:  0xC0000064 

분명히 그 상태 코드와 하위 상태 코드를 번역하려면 : 어딘가에 선을 따라, 내 Windows 자격 증명이있는 경우로

0xc000006d This is either due to a bad username or authentication information. Usually logged as status code with 0xc0000064 as substatus

0xC0000064 user name does not exist 그래서 다시

, 그건 SmtpClient.CredentialsSystem.Net.CredentialCache.DefaultNetworkCredentials

로 설정하더라도 Exchange 서버로 전달되지 않습니다.

아이디어가 있으십니까?

미리 감사드립니다. 당신이 이름을 통과해야

+0

@Austin - 감사합니다 빠른 편집 불쌍한 내 서식을 정리하는 – russcollier

+0

당신은 사용자 이름, 암호를 전달 대해 생각하고있을 경우 개인의 그룹 방금 설정 :-), 당신은 무리 날 이길 메일 서버 또는 IIS의 메일 계정에 추가하고 해당 그룹에 속한 개인의 전자 메일을 추가하십시오. MSDN : Site - http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.credentials.aspx – MethodMan

+0

내 메모를 메모/서버에서 따라갈 수 있기를 바랍니다. smpt.somedomain.com입니다 .. ok .. 귀하의 서버로 대체하십시오 – MethodMan

답변

3

, 비밀번호 여기

이 코드입니다 명심 ... 나는 그것을 할 것입니다 방법에 대한 코드입니다 당신이 사용 사례

에 맞게 필요한 변경을해야 니펫을 = //려면 SmtpClient 클라이언트 : 아래
MailClient = new SmtpClient(); 
MailClient.Credentials = new System.Net.NetworkCredential(username, password); 

는 또 다른 예이지만 서버 변수 ..이 어쩌면 당신이 시도 할 수 무엇을해야하는지 나에게 당신이 당신의 domain.com으로 예를 전달할 수 있습니다 예를 들어, 서버를 알고 사용 새 SmtpClient ("smtp.contoso.com"); //이 서버는 // 클라이언트가됩니다. .Credentials = CredentialCache.DefaultNetworkCredentials;

public static void CreateBccTestMessage(string server) 
    { 
     MailAddress from = new MailAddress("[email protected]", "Ben Miller"); 
     MailAddress to = new MailAddress("[email protected]", "Jane Clayton"); 
     MailMessage message = new MailMessage(from, to); 
     message.Subject = "Using the SmtpClient class."; 
     message.Body = @"Using this feature, you can send an e-mail message from an application very easily."; 
     MailAddress bcc = new MailAddress("[email protected]"); 
     message.Bcc.Add(bcc); 
     SmtpClient client = new SmtpClient(server); 
     client.Credentials = CredentialCache.DefaultNetworkCredentials; 
     Console.WriteLine("Sending an e-mail message to {0} and {1}.", 
      to.DisplayName, message.Bcc.ToString()); 
     try 
     { 
      client.Send(message); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exception caught in CreateBccTestMessage(): {0}", 
         ex.ToString()); 
     } 
    } 
+1

죄송합니다, 제가 언급 했어야합니다 - CredentialCache.DefaultNetworkCredentials를 사용하고 있습니다. 어떤 사용자 이름이나 암호도 하드 코딩하지 않으려 고합니다. 구성). 차라리 프로세스를 실행중인 현재 사용자의 Windows 자격 증명에 의존하고 싶습니다. SmtpClient 문서는 이것이 가능하다고 믿게하지만, 어떤 이유로이 경우에는 작동하지 않습니다. – russcollier

+0

추가 샘플을 게시합니다 .. "서버"변수에주의를 기울이십시오. 1 초만주세요. – MethodMan