我想从我的应用程序发送一封电子邮件,我写了以下代码来发送邮件
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);
Run Code Online (Sandbox Code Playgroud)
我在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>
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个错误并发送邮件?
mjb*_*mjb 93
我也有同样的问题.
我找到了这个解决方案:
Google可能阻止某些不使用现代安全标准的应用或设备尝试登录.由于这些应用和设备更易于破解,因此阻止它们有助于确保您的帐户更安全.
一些不支持最新安全标准的应用程序示例包括:
因此,您必须在Google帐户中启用Less Secure Sign-In.
登录Google帐户后,请转到:
https://www.google.com/settings/security/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);
}
}
Run Code Online (Sandbox Code Playgroud)
-------------------
Michael Freidgeim在以下评论区分享的信息:
类似的答案与截图/sf/answers/2272022791/
Ron*_*tel 45
首先检查gmail的安全相关问题.您可能已在gmail中启用了双重身份验证.如果您收到任何安全警报,请检查您的Gmail收件箱.在这种情况下,请检查@mjb的其他答案,如下所示
以下是我总是首先检查这些问题的一般事项
client.UseDefaultCredentials = true;
Run Code Online (Sandbox Code Playgroud)
将其设置为false.
注意@Joe King的答案 - 你必须在设置client.Credentials 之前设置client.UseDefaultCredentials .
Joe*_*ing 35
确保SmtpClient.Credentials 在通话后设置SmtpClient.UseDefaultCredentials = false.
顺序很重要,因为设置SmtpClient.UseDefaultCredentials = false将重置SmtpClient.Credentials为null.
Rom*_*n O 35
应用程序密码帮助了我。
您还可以使用直接链接https://myaccount.google.com/apppasswords
Sta*_*ked 17
我已经搜索并尝试了几个小时不同的事情.总而言之,我必须考虑以下几点:
smtp.gmail.com而不是smtp.google.comclient.UseDefaultCredentials = false;设置证书之前client.EnableSsl = true;如果这些步骤没有帮助,请检查此答案.
也许,你也可以在这个System.Net.Mail FAQ上找到有用的东西.
Fra*_*nco 15
自 2022 年 5 月 30 日起,Google 不再支持安全性较低的应用程序,因此您必须使用应用程序密码。
以下是通过 google 设置应用程序密码的步骤: https://support.google.com/accounts/answer/185833 ?authuser=1
然后,您需要使用 16 个字符的应用程序密码作为 smtpClient 的凭据:
smtpClient = new SmtpClient(emailHost)
{
Port = port,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential(fromEmail, emailPassword),
EnableSsl = true,
};
Run Code Online (Sandbox Code Playgroud)
emailpassword 应该是生成的 16 个字符的App Password。
港口:587
电子邮件主机:smtp.gmail.com
然后剩下的代码:
var mailMessage = new MailMessage{
From = new MailAddress(fromEmail),
Subject = "Yoursubject",
Body = $"Your body",
IsBodyHtml = true,
};
mailMessage.To.Add(newEmail);
if (smtpClient != null)
smtpClient.Send(mailMessage);
Run Code Online (Sandbox Code Playgroud)
小智 8
尝试登录您的Gmail帐户.如果您使用gmail SMTP发送电子邮件,它将被锁定.我不知道您可以在锁定之前发送的电子邮件的限制,但如果您登录一次,那么它将再次从代码中运行.确保您的webconfig设置良好.
试试这种方式,我做了一些轻微的改变:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果您有邮件设置,请显示您的app.config文件.
出于安全原因,Google 已停止为不太安全的应用程序启用访问权限,自 2021 年 5 月 30 日起生效。因此,此处强调启用不太安全的应用程序访问权限的一些答案已过时。
这是我在 VB 论坛上找到的答案,它对我有用。我能够成功发送邮件。
“请执行以下步骤。在 Google 帐户中激活两步验证。在 Google 帐户中选择应用程序密码 => 安全 => 登录 Google。在选择应用程序组合中选择其他并将名称命名为 Windows 应用程序,然后单击生成。复制密码并使用它可以代替电子邮件密码。它会起作用的。”
查看链接以查看更多答案。 https://www.vbforums.com/showthread.php?895413-通过-Gmail-changing-for-May-30发送电子邮件
向下滚动并查看 microbrain 发布的答案
请参阅下面我发送邮件所用的代码:
Dim emailTo As String = TxtEmail.Text.Trim()
If emailTo.Length > 10 Then
Try
Dim Smtp_Server As New SmtpClient
Dim e_mail As New MailMessage()
Smtp_Server.UseDefaultCredentials = False
Smtp_Server.Credentials = New Net.NetworkCredential("myemail@gmail.com", "***16-digit-code***")
Smtp_Server.Port = 587
Smtp_Server.EnableSsl = True
Smtp_Server.Host = "smtp.gmail.com"
e_mail = New MailMessage()
e_mail.From = New MailAddress("myemailaddress@gmail.com")
e_mail.To.Add(emailTo)
e_mail.Subject = "Login OTP"
e_mail.IsBodyHtml = False
e_mail.Body = "some text here"
Smtp_Server.Send(e_mail)
MessageBox.Show("Your login OTP has been sent to " & emailTo)
LblOTPSuccess.Visible = True
TxtOTP.Visible = True
BtnVerifyOTP.Visible = True
TxtOTP.Focus()
Catch error_t As Exception
MessageBox.Show(error_t.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Else
MessageBox.Show("Email address is invalid or too short", "Invalid Email", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Run Code Online (Sandbox Code Playgroud)
请记住更改代码中的参数以适合您。
小智 5
即使我将“UseDefaultCredentials”设置为 false,我也遇到了同样的问题。后来我发现根本原因是我在账户中开启了“两步验证”。我把它关掉后,问题就消失了。
小智 5
尝试启用允许不太安全的应用程序访问。
在这里,您可以在使用 Gmail 登录后启用安全性较低的应用程序。
https://myaccount.google.com/lesssecureapps
谢谢。
| 归档时间: |
|
| 查看次数: |
252737 次 |
| 最近记录: |