SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. 서버 응답은 5.5.1 인증이 필요합니까?


110

신청서에서 이메일을 보내고 싶은데 메일 발송을 위해 다음 코드를 작성했습니다.

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

나는 그것을 localhost에서 실행하고 있으므로 그것을 보내기 위해 어떤 실수를하고 있는지.

버튼을 보내면 다음과 같은 오류가 발생합니다.

SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. 서버 응답 : 5.5.1 인증 필요.

Web.config 파일의 코드

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

이 오류를 해결하고 메일을 보내려면 어떻게해야합니까 ??



: 난 당신이 너무,이 대답에서 볼 필요가 있다고 생각 stackoverflow.com/a/9572958/1136253
— mrbengi

나는 같은 문제가 있었다. check [this post] [1] [1] : stackoverflow.com/a/20186909/709340
— Moslem Hady 2013

당신은 config 파일에서 SMTP 구성 데이터를 지정하는 데 고려해야하고 코드를 덮어 쓰지 않습니다 -에서 SMTP 구성 데이터를 볼 수 systemnetmail.com/faq/4.1.aspx
— 마이클 Freidgeim

답변:


62

먼저 Gmail의 보안 관련 문제를 확인하세요. Gmail에서 이중 인증을 사용하도록 설정했을 수 있습니다. 또한 보안 경고를 받으면 Gmail받은 편지함을 확인하십시오. 이 경우 아래 @mjb의 다른 답변을 확인하십시오.

다음은 이러한 문제에 대해 항상 먼저 확인하는 매우 일반적인 것입니다.

client.UseDefaultCredentials = true;

false로 설정하십시오.

@Joe King의 대답을 참고하십시오-client.UseDefaultCredentials 를 설정 하기 전에 client.UseDefaultCredentials를 설정 해야합니다.


2
이 경우 코드를 공유해야합니다. 위 답변은 문제의 코드입니다
— Ronak 파텔

7
@Joe 왕의 답변을 참고 - client.UseDefaultCredentials을 설정해야합니다 전에 당신이 client.Credentials 설정
— 아론

1
이 답변은 작동하지 않습니다. 대부분의 사람들은 Gmail 측면에서 보안에 직면했다고 생각합니다. 적절한 솔루션에 대한 mjb의 답변 참조
— Jerry Liang

2
또한 "Captcha"가 비활성화되어 있는지 확인합니다. 원격 서버에서 스크립트를 실행하는 경우 필요할 수 있습니다 (로컬 시스템에서 실행할 때는 필요하지 않음). accounts.google.com/DisplayUnlockCaptcha
— Jens

3
client.UseDefaultCredentials 설정 = false; client.Credentials 이전 및 설정 client.EnableSsl = true; 제 경우에는 트릭을했습니다.
— 스택 :

139

나도 같은 문제가있어.

이 솔루션을 찾았습니다.

Google은 최신 보안 표준을 사용하지 않는 일부 앱이나 기기의 로그인 시도를 차단할 수 있습니다. 이러한 앱과 기기는 침입하기가 더 쉽기 때문에 차단하면 계정을 더 안전하게 유지할 수 있습니다.

최신 보안 표준을 지원하지 않는 앱의 예는 다음과 같습니다.

  • iOS 6 이하가 설치된 iPhone 또는 iPad의 Mail 앱
  • 8.1 릴리스 이전의 Windows Phone의 메일 앱
  • Microsoft Outlook 및 Mozilla Thunderbird와 같은 일부 데스크톱 메일 클라이언트

따라서 Google 계정에서 보안 수준이 낮은 로그인 (또는 보안 수준이 낮은 앱 액세스 ) 을 활성화 해야합니다.

Google 계정에 로그인 한 후 다음으로 이동하십시오.

https://www.google.com/settings/security/lesssecureapps
또는
https://myaccount.google.com/lesssecureapps

C #에서는 다음 코드를 사용할 수 있습니다.

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
아래 댓글 영역에서 Michael Freidgeim이 공유 한 정보 :
스크린 샷과 유사한 답변 https://stackoverflow.com/a/32457468/52277


1
이것은 코드에서 SSL이 활성화되었는지 확인하는 것과 함께 놀라운 일이되었습니다. 감사합니다
— Crouch

1
답변을 공유해 주신 @mjb보다. 그것은 내 인생 :) 저장
— Mayeed

3
이 선택한 답변해야한다
— thatOneGuy

2
이것은 내 문제였습니다. 문제를 겪고 더 설명적인 답변을 해주셔서 감사합니다.
— Bojan 2015

나를 위해 일했습니다. 감사 @mjb
— Rajbir Jawanda

44

SmtpClient.Credentials 을 호출 한 후 설정하십시오 SmtpClient.UseDefaultCredentials = false.

설정 SmtpClient.UseDefaultCredentials = false이 SmtpClient.Credentialsnull로 재설정 되므로 순서가 중요합니다 .


2
나는 이것에 대한 해결책을 30 분 동안 찾고 있었다. 당신의 것은 내가 이것의 순서를 언급하는 인터넷상의 유일한 작은 포스트이다. 고마워 친구.

4
@Joe King 당신은 단지 굉장한 친구입니다 ..... 3 시간 이후에 이것을 찾고 있었다 :)
— Jatin

1
MS 문서에서 누락 된 중요한 정보 인 @Joe King에게 감사합니다. 이것은 사용자 이름과 암호로 보내는 문제에 대한 해결책이었습니다.
— Aaron

1
이것은 쉽게 간과되지만 방금 알아 낸대로 순서가 중요합니다.
— GatesReign

1
네. 내 하루를 구했습니다. 자격 증명을 설정하기 전에 UseDefaultCredentials = false를 호출해야합니다.
— Rendel

33

몇 시간 동안 여러 가지를 검색하고 시도했습니다. 요약하면 다음 사항을 고려해야합니다.

  1. smtp.gmail.com대신 사용smtp.google.com
  2. 포트 587 사용
  3. client.UseDefaultCredentials = false;자격 증명을 설정 하기 전에 설정
  4. 보안 수준이 낮은 앱 에 대한 액세스 켜기
  5. 세트 client.EnableSsl = true;

이 단계가 도움이되지 않았다면이 답변을 확인하세요 .
이 System.Net.Mail FAQ 에서도 유용한 정보를 찾을 수 있습니다.


1
이 답변은 매우 유용합니다 ... 내 문제를 해결했습니다. 고마워요
— 하리

1
여전히 작동하지 않는 경우,이 링크에 가서 g.co/allowaccess 액세스 할 수
— Portekoi

1
"보안 수준이 낮은 앱 액세스"로 하루를 절약했습니다.
— Romil Kumar Jain

1
이 부분은 "보안 수준이 낮은 앱에 대한 액세스를 켜십시오"라는 부분을 해주었습니다. 감사!
— Tadej

11

Gmail 계정에 로그인 해보십시오. Gmail SMTP를 사용하여 이메일을 보내면 잠 깁니다. 잠기기 전에 보낼 수있는 이메일의 한도는 모르겠지만 한 번 로그인하면 코드에서 다시 작동합니다. webconfig 설정이 올바른지 확인하십시오.


참으로 최고의 답변입니다! 다시 로그인했는데 작동했습니다! 추신 : Google에서 보안 문자를 제공해야했습니다
— Bellash

내 Google 계정이 이중 인증으로 보호되기 때문에이 오류가 발생했습니다. 결국 이메일을 보낼 전용 계정을 만들었습니다.
— MvdD 2014

8

이런 식으로 시도해 보겠습니다. 약간의 변경 사항을 적용했습니다.

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

또한 메일 설정이있는 경우 app.config 파일을 표시하십시오.


아직 구성하지 않았습니다. 거기에 무엇을 써야합니까?
— Abhay Andhariya 2013-08-30

내 mvc 응용 프로그램에 app.config 파일이 없습니다.
— Abhay Andhariya

다른 많은 솔루션을 시도했지만이 방법 만 작동했습니다. 감사합니다
— Adil Malik


3

"UseDefaultCredentials"를 false로 설정해도 동일한 문제가 발생했습니다. 나중에 근본 원인이 내 계정에서 "2 단계 인증"을 설정했기 때문이라는 것을 알게되었습니다. 전원을 끄면 문제가 사라집니다.


4
2 단계 인증을 끄지 마십시오. 이유가 있습니다. Gmail 설정에서 애플리케이션 비밀번호를 생성하고 SmtpClient에서 사용할 수 있습니다. 일반 암호를 노출하는 대신에 상관없이 그렇게해야합니다.
— Daniel Dyson


2

여기에 이미지 설명 입력 보안 수준이 낮은 앱 액세스가 허용되는지 확인합니다.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

1
"액세스 보안 수준이 낮은 응용 프로그램"에 대한 설정 토글에 대한 링크는 여기에있다 - google.com/settings/security/lesssecureapps 설정을 변경 나 오류 해결에 도움이되지 않았다
— mvark

1

아래는 내 코드입니다. 동일한 오류가 발생했지만 문제는 비밀번호를 잘못 입력했다는 것입니다. 아래 코드는 완벽하게 작동합니다.

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";

            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";

            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";

            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

메일 보내기 에서 회신하실 수 있습니다.


1

새 Google 계정 인 경우 일반 사용자 인터페이스를 통해 이메일 (첫 번째)을 보내야합니다. 그 후에 애플리케이션 / 로봇을 사용하여 메시지를 보낼 수 있습니다.


1

구성 파일에 SMTP 구성 데이터를 지정하는 것을 고려해야하며 코드에서 덮어 쓰지 마십시오. http://www.systemnetmail.com/faq/4.1.aspx 에서 SMTP 구성 데이터를 참조하십시오.

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>

1

동일한 문제가 여러 번 발생했습니다. 보안 수준이 낮은 앱 옵션을 활성화 한 후 문제가 해결되었습니다. https://myaccount.google.com/lesssecureapps 에서 보안 수준이 낮은 앱을 사용 설정하세요.

이것이 도움이되기를 바랍니다.



0

일부 smtp 서버 (보안 서버)에서는 사용자 이름과 이메일을 모두 제공해야합니다. gmail이 해결해야 할 '보안 수준이 낮은 로그인'문제 일 가능성이 가장 높으면 다음을 시도해보세요.

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

이메일에서 보낸 이메일과 사용자 이름은 동일한 것으로 참조하는 일부 구현과는 다릅니다.

이 메서드를 호출하는 방법은 다음과 같습니다.

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

전원을 켜면 에 덜 안전한 옵션을 당신은 여전히 같은 문제에 직면하는 경우이 오버로드를 사용하려고, 다른 솔루션을 시도 :

client.Credentials = new NetworkCredential("mymailid", "mypassword");

대신에:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

0

내가 만든 마이크로 소프트 365 개발자 가입 (E5) 오늘 아침 다음과 같은 설정을 사용하여 테스트 이메일을 전송하는 데 사용

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

이 코드에서 발생한 예외와 함께이 오류 메시지가 계속 표시 되었기 때문에 처음에는 작동하지 않았습니다. 그런 다음 Microsoft 365 관리 센터 설정을 사용하고 문제를 파악하기 위해 기사를 읽는 데 약 4 시간 이상을 보냈습니다. 궁극적으로 Microsoft 365 관리 센터 암호를 변경했는데 매력처럼 작동했습니다. 따라서 고급 솔루션에 대해 생각하기 전에이 메시지를 받으면 암호를 변경해 보는 것이 좋습니다.

문제없이 내 Microsoft 365 계정에 로그인했기 때문에 암호가 유효하지 않은 것이 확실합니다. 그러나 암호 변경으로 문제가 해결되었습니다.


-1

또한 'SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. 서버 응답은 5.5.0 인증 필요 '였고 인터넷 자료를 너무 많이 살펴 보았지만 완전히 도움이되지 않았습니다. 내가 어떻게 해결했는지

step1 : smtp.gmail.com은 Gmail 서버이므로 계정 Gmail 설정으로 이동하여 모든 설정보기-> 전달 및 IMAP / POP-> 팝을 확인하고 imap을 사용하도록 설정하지 않은 경우 변경 사항 저장을 클릭합니다. 2 단계 : Gmail 프로필 사진 클릭-> Google 계정 관리 클릭-> 보안 탭으로 이동-> 보안 수준이 낮은 앱에 대한 액세스 확인 (2 단계 인증을 선택하지 않은 경우이 옵션을 사용할 수 있음)-> 기본적으로 Google은 이메일을 보내는 데 실제 Gmail 비밀번호를 사용할 수 있도록 비활성화로 설정합니다. 참고 :-보안 수준이 낮은 앱에 대해 Gmail 액세스를 활성화하면 위험 할 수 있으므로 권장하지 않습니다.

3 단계 :-계정에 2 단계 인증이 활성화되어 있거나 앱 비밀번호를 사용하여 Gmail Real 비밀번호가 아닌 다른 비밀번호를 사용하려는 경우 다음을 시도해보세요.-Gmail 프로필 사진을 클릭하고 Google 계정 관리를 클릭하세요-> 보안으로 이동 탭-> 앱 비밀번호 검색-> 주어진 앱 이름 선택-> 장치 이름 선택-> 생성을 클릭-> 16 자리 비밀번호를 복사하고 대신 Gmail 비밀번호를 입력 해야하는 앱에 붙여 넣으십시오. 실제 Gmail 비밀번호.

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