使用 SmtpClient 从 Gmail 发送电子邮件

10

我正在尝试通过SmtpClient连接我的Gmail账户,但好像无法正常工作。我指定了465端口,启用SSL并定义了所有内容,但需要等待大约2分钟,然后就会显示一些错误,消息未发送。

我在这里做错了什么?

try
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress("myemail@gmail.com);
    msg.To.Add(new MailAddress("theiremil@email.com));
    msg.Subject = "This is the subject";
    msg.Body = "This is the body";
    SmtpClient sc = new SmtpClient("smtp.gmail.com", 465);
    sc.EnableSsl = true;
    sc.UseDefaultCredentials = false;
    sc.Credentials = new NetworkCredential("myemail@gmail.com", "pass");
    sc.DeliveryMethod = SmtpDeliveryMethod.Network;
    sc.Send(msg);
    erroremail.Text = "Email has been sent successfully.";
}
catch (Exception ex)
{
    erroremail.Text = "ERROR: " + ex.Message;
}

我做了,然后它显示“错误:SMTP服务器需要安全连接或客户端未经身份验证。”。 - HelloWorld
好的,这不是代码问题,而是 Gmail 设置阻止了连接。现在它可以工作了! - HelloWorld
1个回答

18

您需要允许“较不安全的应用程序”:

https://support.google.com/accounts/answer/6010255

代码:

try
{
    new SmtpClient
    {
        Host = "Smtp.Gmail.com",
        Port = 587,
        EnableSsl = true,
        Timeout = 10000,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential("MyMail@Gmail.com", "MyPassword")
    }.Send(new MailMessage {From = new MailAddress("MyMail@Gmail.com", "MyName"), To = {"TheirMail@Mail.com"}, Subject = "Subject", Body = "Message", BodyEncoding = Encoding.UTF8});
    erroremail.Text = "Email has been sent successfully.";
}
catch (Exception ex)
{
    erroremail.Text = "ERROR: " + ex.Message;
}

@Anatoly 他已经在他的回答中发布了一个链接。Less Secure App是谷歌账户设置,它允许您的应用代表您发送电子邮件。 - Sachin Trivedi
我想知道SmtpClient缺少哪些“现代安全标准”,以及是否有一种本地的.NET替代方案,不需要设置此帐户选项。 - Slight
你好,您能评论一下在这种情况下网络凭据是如何保护的吗?好的,我明白了 - 启用了SSL。但在我的情况下 - 我遇到了超时问题... - Prokurors

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接