.NET에서 SmtpClient 객체의 사용자 이름과 비밀번호를 설정하는 방법은 무엇입니까?


160

다른 버전의 생성자를 보았습니다. 하나는 web.config의 정보를 사용하고 하나는 호스트를 지정하고 다른 하나는 호스트와 포트를 지정합니다. 그러나 사용자 이름과 비밀번호를 web.config와 다른 것으로 어떻게 설정합니까? 일부 높은 보안 클라이언트가 내부 smtp를 차단하고 smtp 서버를 사용하려는 문제가 있습니다. web.config 대신 코드에서이를 수행하는 방법이 있습니까?

이 경우 데이터베이스에서 사용할 수없는 web.config 자격 증명을 어떻게 사용합니까?

public static void CreateTestMessage1(string server, int port)
{
    string to = "jane@contoso.com";
    string from = "ben@contoso.com";
    string subject = "Using the new SMTP client.";
    string body = @"Using this new feature, you can send an e-mail message from an application very easily.";
    MailMessage message = new MailMessage(from, to, subject, body);
    SmtpClient client = new SmtpClient(server, port);
    // Credentials are necessary if the server requires the client 
    // to authenticate before it will send e-mail on the client's behalf.
    client.Credentials = CredentialCache.DefaultNetworkCredentials;

    try {
        client.Send(message);
    }
    catch (Exception ex) {
        Console.WriteLine("Exception caught in CreateTestMessage1(): {0}", 
                    ex.ToString());
    }              
}

답변:


301

SmtpClient는 코드로 사용할 수 있습니다 :

SmtpClient mailer = new SmtpClient();
mailer.Host = "mail.youroutgoingsmtpserver.com";
mailer.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword");

내가 설정하지 않으면 기본적으로 web.config의 것을 사용합니까?
CloudMeta

3
@pipelinecache Ryan이 맞습니다. 자격 증명이 제공되지 않으면 web.config의 <system.net> <mailSettings>를 볼 수 있습니다.
Tomas

1
나는 경우 생각 UseDefaultCredentialstrue로 설정이 기본값을 사용합니다 그렇지 않으면 처음에 모양 Credentials속성을 다음의 Web.config에. 아무것도 설정하지 않으면 익명으로 이메일을 보냅니다.
TheGateKeeper

1
C # 코드로 사용자 이름과 비밀번호를 하드 코딩하는 것이 안전합니까?
kudlatiger

3
경고 : 'UseDefaultCredentials = false'를 설정하면 변경 사항이 기존 자격 증명이 설정되지 않으므로 자격 증명을 설정하기 전에 수행해야합니다.
WhoIsRich

26

사용하다 NetworkCredential

네,이 두 줄을 코드에 추가하십시오.

var credentials = new System.Net.NetworkCredential("username", "password");

client.Credentials = credentials;

4
왜 한 줄이 아닌가?
JSON

7
SmtpClient MyMail = new SmtpClient();
            MailMessage MyMsg = new MailMessage();
            MyMail.Host = "mail.eraygan.com";
            MyMsg.Priority = MailPriority.High;
            MyMsg.To.Add(new MailAddress(Mail));
            MyMsg.Subject = Subject;
            MyMsg.SubjectEncoding = Encoding.UTF8;
            MyMsg.IsBodyHtml = true;
            MyMsg.From = new MailAddress("username", "displayname");
            MyMsg.BodyEncoding = Encoding.UTF8;
            MyMsg.Body = Body;
            MyMail.UseDefaultCredentials = false;
            NetworkCredential MyCredentials = new NetworkCredential("username", "password");
            MyMail.Credentials = MyCredentials;
            MyMail.Send(MyMsg);

4
답변에 관련 코드 만 게시하십시오
johnny 5

1
@ johnny5 문맥은 세계에서 가장 큰 범죄가 아닙니다
Shiv

@shiv 당신은 정확하지만 문맥은 대답에 대한 설명을 작성합니다.
johnny 5

1
@ johnny5 다른 상단 답변에는 설명이 없습니다. 코드가 자체 문서화되어 있으므로 예제는 설명이 필요 없습니다.
Shiv

@Shiv 상위 답변은 관련 코드 만 게시하기 때문에 자체 문서화됩니다. 내 원래 의견은이 답변만큼 많은 찬성 투표를했습니다. 왜냐하면이 질문에 대답하기 위해 2 개만 필요한 경우 15 줄의 코드를 선별 해야하는 이유를 알 수 없습니다. 그것을 찬성하십시오. 그렇지 않으면, 이것들은 내가 2 년 전에 한 다른 의견이 유용하다고 언급 한 의견에 대해 논쟁의 여지가 없다
johnny 5

-2

모든 클라이언트가 인증 된 SMTP 계정을 사용하는 것은 아니기 때문에 web.config 파일에 앱 키 값이 제공되는 경우에만 SMTP 계정을 사용했습니다.

VB 코드는 다음과 같습니다.

sSMTPUser = ConfigurationManager.AppSettings("SMTPUser")
sSMTPPassword = ConfigurationManager.AppSettings("SMTPPassword")

If sSMTPUser.Trim.Length > 0 AndAlso sSMTPPassword.Trim.Length > 0 Then
    NetClient.Credentials = New System.Net.NetworkCredential(sSMTPUser, sSMTPPassword)

    sUsingCredentialMesg = "(Using Authenticated Account) " 'used for logging purposes
End If

NetClient.Send(Message)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.