[英]How do I send an email from my C# windows application?
我正在开发一个 Windows 应用程序,用户必须在其中输入密码。 我还有一个“忘记密码”链接。 在 window 上。单击后,我让用户输入他们的 email 地址,然后单击“提交”按钮。 每次他们输入 email 地址并单击按钮时,我都会收到错误消息:
发生 SmtpException:SMTP 服务器需要安全连接或客户端未通过身份验证。 服务器响应为:5.7.0 需要身份验证。
我正在使用的代码是:
try
{
Cursor = Cursors.WaitCursor;
MailAddress from = new MailAddress("bgatt64@gmail.com", "Bob Gatto");
MailAddress to = new MailAddress("bgatto64@yahoo.com", "Bob Gatto");
MailMessage eMsg = new MailMessage(from, to);
eMsg.Subject = "Your Password Renewal Request";
eMsg.IsBodyHtml = true;
eMsg.Body = "This is the body.";
SmtpClient eClient = new SmtpClient("smtp.gmail.com", 587);
eClient.EnableSsl = true;
eClient.UseDefaultCredentials = true;gmail
// The following email and password used is that of my own gmail email
// that I use for my own personal email.
eClient.Credentials = new System.Net.NetworkCredential("<MyOwnEmail@gmail.com>", "<MyPassword>");
eClient.Send(eMsg);
}
catch (SmtpException ex)
{
throw new ApplicationException("SmtpException has occurred: " + ex.Message);
}
catch (Exception ex)
{
throw ex;
}
还有什么需要做的?
您不能再使用普通的谷歌帐户密码来验证 Gmail SMTP 服务器,因为谷歌现在需要两步验证。 您需要改用应用密码:
您将获得包含 4 组字符的字符串。 现在您需要在代码中使用它:
eClient.Credentials = new System.Net.NetworkCredential("<MyOwnEmail@gmail.com>", "<App Password>");
您可以在此处找到更多信息
删除安全性较低的应用程序后,您将无法再使用实际的谷歌密码连接到您需要创建应用程序密码的 smpt 服务器。
如何创建用于连接到 Google 的 SMTP 服务器的 Apps 密码。
using System;
using System.Net;
using System.Net.Mail;
namespace GmailSmtpConsoleApp
{
class Program
{
private const string To = "[redacted]@gmail.com";
private const string From = "[redacted]@gmail.com";
private const string GoogleAppPassword = "";
private const string Subject = "Test email";
private const string Body = "<h1>Hello</h1>";
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var smtpClient = new SmtpClient("smtp.gmail.com")
{
Port = 587,
Credentials = new NetworkCredential(From , GoogleAppPassword),
EnableSsl = true,
};
var mailMessage = new MailMessage
{
From = new MailAddress(From),
Subject = Subject,
Body = Body,
IsBodyHtml = true,
};
mailMessage.To.Add(To);
smtpClient.Send(mailMessage);
}
}
}
注意:如果您尝试连接用户,那么您也可以使用 Xoauth2,但使用应用程序密码是更简单的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.