[C#] C #을 사용하여 Gmail SMTP 서버를 통해 이메일 보내기

어떤 이유로 든 ” Gmail을 통해 .NET에서 이메일 보내기 “에 대해 허용 된 답변이나 다른 어떤 것도 나를 위해 일하지 않습니다 . 그들은 왜 작동하지 않습니까?

업데이트 : 다른 질문에 대한 모든 대답 (수락 및 기타)을 시도했지만 그중 아무것도 작동하지 않습니다.

다른 사람에게도 효과가 있는지 알고 싶습니다. 그렇지 않으면 Google이 이전에 일어난 일을 변경했을 수 있습니다.

를 사용하는 코드를 시도하면 SmtpDeliveryMethod.NetworkSend (message)에서 SmtpException이 신속하게 수신됩니다. 메시지는

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

서버 응답은 다음과 같습니다.

5.5.1 인증이 필요합니다. “<-에서 자세히 알아보십시오.

최신 정보:

이것은 오래 전에 물었던 질문이며 허용되는 답변은 다른 프로젝트에서 여러 번 사용했던 코드입니다.

이 게시물과 다른 EmailSender 프로젝트의 아이디어 중 일부 를 Codeplex에서 EmailSender 프로젝트를 만들었습니다 . 테스트 용으로 설계되었으며 GoDaddy 및 Gmail과 같은 즐겨 사용하는 SMTP 서비스를 지원합니다.



답변

CVertex에서 코드를 검토 한 후 공개되지 않으면 게시하십시오. 방금 작업중 인 테스트 ASP.NET 사이트 에서이 기능을 사용하도록 설정했습니다.

실제로 어느 시점에서 코드에 문제가있었습니다. 콘솔 프로그램에서 더 간단한 버전을 사용하고 작동하는 것을 알 때까지는 그것을 발견하지 못했습니다 (걱정할 때 Gmail 측에서는 변경되지 않았습니다). 아래 코드는 참조한 샘플과 동일하게 작동합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

또한 web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx 및 코드 의 조합을 사용하여 작업했습니다 ( EnableSsl구성 파일에 일치하지 않기 때문에 :()).


답변

다음은 것입니다 거의 확실하게 해답이 될 귀하의 질문에 모두 ELSE 실패한 경우 :

똑같은 오류가 발생했습니다 .Google의 새로운 비밀번호 강도 측정 알고리즘이 현재 비밀번호가 너무 약한 것으로 간주되어 변경되지 않았으며 (메시지 또는 경고조차 포함하지 않음) 나에게 알려주지 않았습니다. ? 글쎄, 나는 그것이 도움이되는지 확인하기 위해 비밀번호를 변경하기로 결정했다. (다른 모든 것을 시도하지 않았지만) 비밀번호를 변경했을 때 효과가 있었다!

그런 다음 실험을 위해 비밀번호를 이전 비밀번호로 다시 변경하여 어떻게되는지 확인하려고했지만 Gmail에서 ‘이 변경 사항을 선택한대로 저장할 수 없습니다. password is too weak “(이전 암호가 너무 약합니다.) 이전 암호로 돌아 가지 않습니다. 나는 a) x 개월마다 한 번씩 암호를 변경해야하거나 b) 때문에 오류가 발생했다는 것을 알았습니다. 내가 전에 말했듯이, 암호 강도 알고리즘이 변경되었으므로 아무 데나 로그인하려고 할 때 이것에 대해 아무 말도하지 않았지만 약한 암호가 허용되지 않았습니다! 이 비밀번호 (2 번)는 약한 비밀번호가 약 4 개월이되어 Gmail에서 사용할 수 있기 때문에 가장 가능성이 높은 시나리오입니다.

그들이 이것에 대해 아무 말도하지 않은 것은 꽤 나쁘지만 말이됩니다. 대부분의 도용 된 이메일은 Gmail 외부의 소프트웨어를 사용하여 로그인했기 때문에 Gmail 환경 외부에서 Gmail을 사용하려면 더 강력한 비밀번호가 필요합니다.

이게 도움이 되길 바란다!


답변

위의 다른 문제 해결 단계 외에도 Gmail 계정에서 2 단계 인증 ( 2 단계 인증 이라고도 함)을 사용하도록 설정 한 경우 응용 프로그램 비밀번호를 생성하고 새로 사용해야합니다. SMTP를 통해 인증하기 위해 생성 된 비밀번호 .

계정을 만들려면 https://www.google.com/settings/를 방문하십시오.계정 하여 애플리케이션 및 사이트 승인을 선택 하여 비밀번호를 생성하십시오.


답변

Turn On Access For Less Secure Apps and it will work for all no need to change password.

Gmail 설정에 연결

여기에 이미지 설명을 입력하십시오


답변

앞서 언급 한 여러 상황으로 인해 Gmail 계정에서 이메일을 보내는 데 문제가 있습니다. 다음은 작동 방식과 유연성을 동시에 유지하는 방법에 대한 요약입니다.

  • 먼저 Gmail 계정을 설정하십시오.
    • IMAP을 사용하도록 설정하고 올바른 최대 메시지 수를 지정하십시오 (여기서 가능).
    • 비밀번호는 7 자 이상이고 Google에 따라 강력한 비밀번호 여야합니다.
    • 보안 문자 코드를 먼저 입력하지 않아도됩니다. 브라우저에서 테스트 이메일을 보내면됩니다.
  • web.config (또는 app.config, 아직 시도하지는 않았지만 Windows 응용 프로그램에서 작동하게하는 것이 쉽다고 가정합니다)에서 변경하십시오.
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>
    </appSettings>

    <!-- other settings -->

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="yourusername@gmail.com" deliveryMethod="Network">
                <network
                    defaultCredentials="false"
                    host="smtp.gmail.com"
                    port="587"
                    password="stR0ngPassW0rd"
                    userName="yourusername@gmail.com"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
Add a Class to your project:

Imports System.Net.Mail

Public Class SSLMail

    Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)

        GetSmtpClient.Send(e.Message)

        'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
        e.Cancel = True

    End Sub

    Public Shared Sub SendMail(ByVal Msg As MailMessage)
        GetSmtpClient.Send(Msg)
    End Sub

    Public Shared Function GetSmtpClient() As SmtpClient

        Dim smtp As New Net.Mail.SmtpClient
        'Read EnableSSL setting from web.config
        smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
        Return smtp
    End Function

End Class

그리고 지금 당신이 이메일을 보내려고 할 때마다 당신이해야 할 일은 전화 SSLMail.SendMail:

예 : PasswordRecovery 컨트롤이있는 페이지에서 :

Partial Class RecoverPassword
Inherits System.Web.UI.Page

Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
    e.Message.Bcc.Add("webmaster@example.com")
    SSLMail.SendMail(e)
End Sub

End Class

또는 코드의 어느 곳에서나 전화 할 수 있습니다.

SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})

이것이이 게시물에 빠진 사람에게 도움이되기를 바랍니다. (VB.NET을 사용했지만 .NET 언어로 변환하는 것이 쉽지 않다고 생각합니다.)


답변

Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")

“SMTP 서버에 보안 연결이 필요하거나 클라이언트가 인증되지 않았습니다. 서버 응답 : 5.5.1 인증이 필요합니다. 자세히 알아보기”와 같은 오류가 표시되면 SMTPClientObj.UseDefaultCredentials = False이 줄과이 줄을 확인하십시오. 전에해야합니다 SMTPClientObj.Credentials.

이 두 줄을 반대로 바꾸려고 했지만 5.5.1 인증 필요 오류가 반환되었습니다.


답변

오 … 놀랍습니다 … 먼저 이메일을 보내지 못했습니다. 그러나이 두 줄의 순서를 아래와 같이 변경하면 완벽하게 작동합니다.

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");

이 도움을 바랍니다 !!! 🙂