어떤 이유로 든 ” Gmail을 통해 .NET에서 이메일 보내기 “에 대해 허용 된 답변이나 다른 어떤 것도 나를 위해 일하지 않습니다 . 그들은 왜 작동하지 않습니까?
업데이트 : 다른 질문에 대한 모든 대답 (수락 및 기타)을 시도했지만 그중 아무것도 작동하지 않습니다.
다른 사람에게도 효과가 있는지 알고 싶습니다. 그렇지 않으면 Google이 이전에 일어난 일을 변경했을 수 있습니다.
를 사용하는 코드를 시도하면 SmtpDeliveryMethod.Network
Send (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 계정을 설정하십시오.
- 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");
이 도움을 바랍니다 !!! 🙂