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

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

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 계정 팀



답변

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

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

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


답변

코드에서 메일을 보내려고 할 때 “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 계정에 로그인 할 수 있습니다.


답변

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

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

다음 페이지로 이동합니다

덜 안전한 앱 페이지


답변

오늘 여기에서 모든 솔루션을 시도하면서 몇 시간을 보낸 후에도 여전히이 정확한 오류를 극복 할 수 없었습니다. 나는 이런 식으로 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
}

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


답변

https://myaccount.google.com/lesssecureapps 에서 ‘보안 수준이 낮은 앱 허용’을 켜야합니다.


답변

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

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

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


답변

지금이 오류가 발생하는 이전 코드가 있습니다. 비밀번호에 문제가 없습니다. 메시지를 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으로 설정하십시오 (동일한 페이지, 맨 아래로 스크롤해야 함)
덜 안전한 앱 허용