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 = falseSmtpClient.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.