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


260

이메일을 보내려면 다음 코드를 사용하고 있습니다. 코드가 로컬 컴퓨터에서 올바르게 작동합니다. 그러나 프로덕션 서버에서 오류 메시지가 나타납니다.

var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

그리고 내 Gmail A / C에서 프로덕션 서버에서 코드를 실행 한 후 다음 이메일을 받았습니다.

안녕하세요 ,

누군가 최근에 비밀번호를 사용하여 Google 계정 mymailid@gmail.com에 로그인하려고했습니다. 이 사람은 이메일, 클라이언트 또는 모바일 장치와 같은 응용 프로그램을 사용하고있었습니다.

하이재커가 계정에 액세스하려는 경우 로그인 시도를 방지했습니다. 로그인 시도의 세부 사항을 검토하십시오.

2014 년 1 월 3 일 금요일 13:56:08 UTC IP 주소 : xxx.xx.xx.xxx (abcd.net.) 위치 : Philadelphia PA, PA, USA, PA

이 로그인 시도를 인식하지 못하면 다른 사람이 귀하의 계정에 액세스하려고 할 수 있습니다. 계정에 로그인하고 비밀번호를 즉시 재설정해야합니다.

암호를 재설정

귀하의 계정이고 계정에 액세스하는 데 문제가있는 경우 http://support.google.com/mail?p=client_login에 나열된 문제 해결 단계를 완료 하십시오.

감사합니다. Google 계정 팀


프로덕션 서버에 액세스 할 수 있습니까
Arshad

프로덕션 서버에 액세스 할 수 없습니다
vcs

2 단계 인증을 해제합니다.
Mangesh


1
또한 Google "Captcha"가 사용 중지되어 있는지 확인합니다. 원격 서버에서 스크립트를 실행중인 경우 (로컬 컴퓨터에서 실행할 때는 필요하지 않음) accounts.google.com/DisplayUnlockCaptcha
Jens

답변:


197

일반적으로 다른 시간대 나 IP 주소 컴퓨터에서 로그인을 시도 할 때 발생합니다. 사용중인 프로덕션 서버와 메일 ID가 서로 다른 시간대에 있습니다. 다음 두 가지 솔루션 중 하나를 선택하십시오.

1) 원격 액세스를 통해 프로덕션 서버에 로그인하고 자격 증명으로 gmail에 한 번 로그인하십시오. 확인을 요청하고 확인한 후 로그 아웃합니다.

또는 2), 로컬 컴퓨터의 Gmail 로그인이 따라 링크를 선택 이 활동을 검토 하고 적절한 조치를 취할.


21
약간의 의견 : security.google.com/settings/security/activity 로 이동하면 코드에서 연결이 차단 된 것을 볼 수 있습니다. 그들을 허용하면이 경우 도움이됩니다.
Alex Zhukovskiy

68
이 또한 많은 도움이 될 것입니다 google.com/settings/security/lesssecureapps을
조지

예, 이유는 Gmail 계정에 2 단계 인증이 사용 설정되어 있기 때문입니다. 앱 / 기기를 선택하고 생성 버튼을 클릭하십시오. support.google.com/accounts/answer/185833
smily


8
또한 Google "Captcha"가 사용 중지되어 있는지 확인합니다. 원격 서버에서 스크립트를 실행중인 경우 (로컬 컴퓨터에서 실행할 때 필요하지 않음) accounts.google.com/DisplayUnlockCaptcha
Jens

301

코드에서 메일을 보내려고 할 때 "SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. 서버 응답 : 5.5.1 인증 필요"오류가 다음과 같은 경우에 발생할 수있는 오류보다 발견되었습니다.

사례 1 : 비밀번호가 잘못되었을 때

사례 2 : 일부 앱에서 로그인하려고 할 때

사례 3 : 시간대 / 도메인 / 컴퓨터 이외의 도메인에서 로그인을 시도 할 때 (코드에서 메일을 보낼 때 대부분의 경우에 해당)

각각에 대한 해결책이 있습니다

사례 1에 대한 해결책 : 올바른 비밀번호를 입력하십시오.

사례 2의 해결 방법 1 : 다음 링크 ( https://www.google.com/settings/security/lesssecureapps) 에서 보안 설정으로 이동하여 덜 안전한 앱을 활성화 하십시오 . 모든 앱에서 로그인 할 수 있습니다.

사례 2의 솔루션 2 :( https://stackoverflow.com/a/9572958/52277 참조 ) 2 단계 인증 (일명 2 단계 인증)을 활성화 한 다음 애플리케이션 비밀번호를 생성합니다. 새로 생성 된 비밀번호를 사용하여 SMTP를 통해 인증하십시오.

사례 3에 대한 해결 방법 1 : (이것이 도움이 될 수 있습니다) 활동을 검토해야합니다. 그러나 최신 보안 표준으로 인해 활동을 검토하는 것은 도움이되지 않습니다. 링크는 유용하지 않습니다. 아래의 경우를 시도하십시오.

사례 3에 대한 해결 방법 2 : 프로덕션 서버 어딘가에 코드를 호스팅하고 프로덕션 서버에 액세스 할 수있는 경우 프로덕션 서버에 원격 데스크톱 연결을 수행하고 프로덕션 서버의 브라우저에서 한 번 로그인하십시오. 이것은 구글에 로그인하기 위해 excpetioon을 추가하고 코드에서 로그인 할 수 있습니다.

그러나 프로덕션 서버에 액세스 할 수 없으면 어떻게해야합니까? 해결책을 시도 3

사례 3의 해결책 3 : Google 계정에 다른 시간대 / ip에서 로그인을 활성화해야합니다.

이렇게하려면 링크 https://g.co/allowaccess를 따르고 계속 버튼을 클릭하여 액세스를 허용 하십시오 .

그리고 그게 다야. 여기 요 이제 어느 컴퓨터에서나 앱을 통해 Google 계정에 로그인 할 수 있습니다.


10
해결책 2! 당신은 작은 아름다움!
George Harnwell

2
lesssecureapps 위 : 도움 정보 링크
가우 탐 자이나교에게

와우, 이것은 허용 된 답변으로 표시되어야합니다. 감사합니다.
Nic

5
azure에서 호스팅되는 사이트는 사례 3의 경우 솔루션 3을 따라야합니다. g.co/allowaccess
Ravi Anand

1
사례 3의 솔루션 2-저에게 매력처럼 작용했습니다. 감사.
ss_mj

106

보안 문제인 Gmail은 기본적으로 맞춤 애플리케이션에서 이메일 계정에 액세스 할 수 없도록합니다. 애플리케이션에서 로그인을 수락하도록 설정할 수 있습니다.

이메일에 로그인 한 후 여기를 클릭하십시오

다음 페이지로 이동합니다

덜 안전한 앱 페이지


1
또한 사용자 지정 도메인이있는 경우 보안 수준이 낮은 앱에 대한 액세스를 허용하려면 먼저 도메인 관리자가 사용자를 활성화해야합니다. 도메인 관리자 인 경우 다음 링크로 이동하여이 admin.google.com/AdminHome#ServiceSettings/…
user551113

2
이 답변은 훌륭합니다. 그것은 매력처럼 작동합니다. 감사합니다.
Thomas. 벤츠

24

오늘 여기에서 모든 솔루션을 시도하면서 몇 시간을 보낸 후에도 여전히이 정확한 오류를 극복 할 수 없었습니다. 나는 이런 식으로 gmail을 여러 번 사용하여 그것이 바보 같은 것을 알았지 만 문제를 해결 한 것은 아무것도 없었습니다. 나는 마침내 내 경우에 해결책을 우연히 발견 했으므로 공유 할 것이라고 생각했다.

첫째, 위의 대부분의 답변도 필요하지만 제 경우에는 SmtpClient클래스 를 만드는 동안 코드를 정렬하는 것이 간단했습니다 .

아래의 첫 번째 코드 스 니펫에서 Credentials = creds줄이 어디에 있는지 확인하십시오 . 이 구현은 다른 모든 것이 올바르게 설정되어 있어도이 질문에서 참조되는 오류를 생성합니다.

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

그러나 신임 정보 설정 기 호출을 맨 아래로 이동하면 이메일이 오류없이 전송됩니다. 나는 즉, 주변의 코드 ... ... 사용자 이름 / 암호 등을 분명히을 변경하지, 중 하나는 EnableSSL, UseDefaultCredentials, or the DeliveryMethod온 의존 Credentials내가 비록이었다 하나 알아 내기 위해 모든 테스트를하지 않았다 ... 첫번째 존재 세트 .

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

앞으로 다른 사람이 두통을 덜어 줄 수 있기를 바랍니다.


2
제 경우에는 자격 증명이 마지막으로 작동하도록 코드를 재정렬하여 귀하와 동일한 문제가있었습니다.
Dev

1
나는 그것을 믿을 수 없지만 효과가 있었다! 덜 안전한 플래그를 활성화하고 싶지 않기 때문에 2 단계를 활성화했지만 Send 전에 자격 증명을 마지막에 놓을 때까지 작동하지 않았습니다. 놀랄 만한!
Čikić Nenad

6
문제는 UseDefaultCredentialssetter 에이 코드 가 있다는 것입니다 .seter가 set this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;을 재정의 credentials합니다 Credentials. 나를 위해 그것은 SmtpClient버그 처럼 보인다
Tomasz Madeyski

@TomaszMadeyski 이것은 의견 대신 답이되어야합니다! 그것은 내 문제입니다 ... 어떻게 내가 생성자에 자격 증명을 설정하고 다시 잘못된 값을 할당하면 UseDefaultCredentials = false가 자격 증명을 재정의한다고 생각할 수 있습니까? 하지만 그런 일이 .... 고마워요
FabianSilva


12

안녕하세요. 같은 문제가있었습니다.

내가 해결하기 위해 한 일. 덜 안전한 앱을 켜는 것입니다. 내 Gmail 계정에 연결 한 후 https://www.google.com/settings/security/lesssecureapps 링크에 들어갔습니다

그런 다음 안전한 앱을 켜고 작동했습니다. 그것은 또한 위에 말했다


의 답변에 대한 귀하의 답변과의 차이점은 무엇 입니까? 1 월 12 '15의 10:36에 동일한 답변이 제공됩니다.
Dush

11

지금이 오류가 발생하는 이전 코드가 있습니다. 비밀번호에 문제가 없습니다. 메시지를 base64로 변환 할 필요가 없습니다. 판명, 나는 다음을 수행해야합니다.

  1. 2 단계 인증 끄기
  2. "보안 수준이 낮은 앱 허용"을 ON으로 설정
  3. 프로덕션 서버에서 Gmail 계정에 로그인
  4. 로그인 활동을 승인하려면 여기 로 이동 하십시오.
  5. 프로덕션 서버에서 앱 실행

작업 코드

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

2 단계 인증 끄기 2 단계 인증 끄기

"보안 수준이 낮은 앱 허용"을 ON으로 설정하십시오 (동일한 페이지, 맨 아래로 스크롤해야 함) 덜 안전한 앱 허용


9

Google 이메일의 단계를 따르고 덜 안전한 앱을 활성화하십시오.


6

나는 같은 문제에 직면했다. 2 단계 인증 (MFA)을 켜면 발생합니다. 2 단계 인증을 끄면 문제가 해결됩니다.


이 계정에 2 단계를 사용하도록 설정하지 않았으며이 문제가 발생했습니다.
Shiv

4

아래는 내 코드입니다. 또한 같은 오류가 있었지만 문제는 암호를 잘못 입력 한 것입니다. 아래 코드는 완벽하게 작동합니다.

            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);

내 블로그 에서 참조 할 수 있습니다


로컬 컴퓨터에서 작동하지만 서버에서는 작동하지 않는 동일한 코드를 사용하고 있습니다. 오류 가져 오기 SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. 서버 응답은 다음과 같습니다. 5.5.1 인증 필요. .
Akshay Chawla 2016 년

1
나는 호스팅 업체에 연락했다 : 우리는 공유 서버 환경에서 지원하지 않는 제 3의 SMTP (smtp.gmail.com)를 구성한 것을 볼 수 있었다. 메일 기능의 과도한 남용 또는 스팸 문제로 인해 메일 기능이 지원되지 않습니다. 매우 인기 있고 자주 사용되는 PHPMailer를 사용하여 이메일을 보낼 수 있습니다. 하지만 내 사이트는 mvc c #으로 빌드되었으므로 어떻게 phpmailer를 사용할 수 있습니까?
Akshay Chawla 2016 년


2

Microsoft Azure에 배포 된 응용 프로그램에 대해 동일한 문제가있었습니다.

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

먼저 다음 페이지 (gmail 사용자로 로그인)에서 알 수없는 모든 장치 (아일랜드에서 시작한 일부 IP 주소)를 승인했습니다. https://security.google.com/settings/u/1/security/secureaccount

클라이언트에 다음 설정을 사용했습니다.

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

smtp-client에서 다음 속성을 설정 한 후에 만 ​​작동하기 시작했습니다.

client.TargetName = "STARTTLS/smtp.gmail.com";

2

나를 위해 일한 것은 덜 안전한 앱을위한 옵션을 활성화하는 것이 었습니다 (VB.NET을 사용하고 있습니다)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

계정에 로그인 한 다음 google.com/settings/security/lesssecureapps이동하십시오.


2

Tomasz Madeyski의 의견은 내 문제를 해결 한 것입니다 ... 그는 SetDefaultCredential에 버그가 있다고 말합니다.

"문제는 UseDefaultCredentials setter에 다음 코드가 있다는 것입니다 : this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null; Credentials setter가 설정 한 자격 증명을 재정의합니다.

당신이 넣을 경우 smtpClient.UseDefaultCredentials = false자격 증명 설정 후 ...이 라인 세트는 해당 자격 증명을 null로 ...


2

2018 년 11 월, 성공하지 않고 위의 모든 것을 시도했습니다.

아래는 마지막으로 작동 한 솔루션입니다. 불행히도 SSL을 사용하지 않지만 작동합니다 !!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

1

덜 안전한 앱 사용에서 포트 587 시도에 이르기까지 여기에서 찾은 모든 제안을 시도했지만 아무것도 작동하지 않았습니다. 마침내 나는 방금 그 라인을 주석 처리했다 UseDefaultCredentials = false. 내가 그 부울을 만지지 않으면 모든 것이 효과가있었습니다.


1
여기에서 .. 나는 단 하나 선이 나에게서 1 시간 걸렸다는 것을 믿을 수 없다!
Wahid Masud 2018 년

0

나는 실제로 많은 아이디어를 보았으며 유일한 해결책은 다음과 같습니다 (다른 이메일 제공 업체와 함께 작동).

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...

0

저는 비즈니스 구독자를위한 Google 앱이며 올바른 설정 (smtp, port, enableSSL 등)을 모두 설정 한 후에도이 문제를 처리하기 위해 지난 몇 시간을 보냅니다. 이메일을 보내려고 할 때 5.5.1 오류가 발생하는 웹 사이트와 저에게 효과적인 것은 다음과 같습니다.

  1. admin.google.com에 로그인
  2. 보안 <-이 보이지 않으면 '제어기'를 클릭하고 목록에서 추가하십시오.
  3. 기본 설정을 클릭하십시오
  4. 기본 설정 상자 하단으로 스크롤하여 '보안 수준이 낮은 앱 설정으로 이동'링크를 클릭하십시오.
  5. 옵션 # 3 : 모든 사용자에게 덜 안전한 앱에 대한 액세스를 시행하십시오 (권장하지 않음).
  6. 창의 맨 아래에있는 저장을 누르십시오

이 작업을 수행 한 후 웹 사이트의 전자 메일 양식이 다시 작동했습니다. 행운을 빕니다!


0

Gmail에서 특정 APP 비밀번호를 생성 / 생성해야 할 수도 있습니다. 그런 다음 앱 또는 스크립트에서 일반 비밀번호 대신이 새 비밀번호를 사용합니다. 일반 비밀번호는 여전히 잘 작동합니다.

그것이 나를 위해 한 일입니다. 나는 여전히 동일한 이메일 계정을 사용했지만 새로운 앱 비밀번호를 생성해야했습니다.

https://support.google.com/accounts/answer/185833?hl=ko

스크린 샷

기본적으로 여기에서 할 수 있습니다 : https://security.google.com/settings/security/apppasswords




0

대기하기 전에 중단 점을 두지 마십시오 smtp.SendMailAsync (mail);

:)

중단 점을 제거 할 때이 오류가 발생하는 중단 점으로 기다릴 때 작동했습니다.


-1

위에서 언급 한 모든 솔루션을 사용했지만 Gmail 설정에서 IMAP 액세스를 활성화 한 후에 만 ​​작동했습니다. Gmail 설정 에서 IMAP 액세스 활성화 링크

물론 다른 솔루션의 요점도 필요했습니다.


이것은 나에게 도움이되지 않았다. IMAP을 활성화하면 Outlook, Thunderbird와 같은 다른 메일 클라이언트에서 Gmail 이메일 메시지를 읽을 수 있습니다.
kimbaudi

-5

호스트를 변경 해보십시오, 이것은 새로운 것입니다, 나는이 구성 mozilla thunderbird를 얻었다

Host = "smtp.googlemail.com"

저를위한 일

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