【问题标题】:Can't send Email with SMTP and gmail account on C# .NET无法在 C# .NET 上使用 SMTP 和 gmail 帐户发送电子邮件
【发布时间】:2022-12-15 18:29:36
【问题描述】:

我正在尝试发送电子邮件以确认帐户,但我在 SMTP 端遇到了问题。

我之前看到有人遇到过这个问题,他们通过启用“安全性较低的应用程序登录”来解决这个问题,但谷歌将其作为一项功能删除了。

EmailSender.cs


public bool SendEmail(string userEmail, string confirmationLink)
        {
            MailMessage mailMessage = new MailMessage();
            mailMessage.From = new MailAddress("employmentlyy@gmail.com");
            mailMessage.To.Add(new MailAddress(userEmail));

            mailMessage.Subject = "Confirm your email";
            mailMessage.IsBodyHtml = true;
            mailMessage.Body = confirmationLink;

            var emailPass = _config["emailPassword"];

            SmtpClient client = new SmtpClient();
            client.Credentials = new System.Net.NetworkCredential("employmentlyy@gmail.com", emailPass);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.Host = "smtp.gmail.com";
            client.UseDefaultCredentials = true;
            client.EnableSsl = true;
            client.Port = 587;
            

            try
            {
                client.Send(mailMessage);
                Console.WriteLine("Sent email!");
                return true;
            }
            catch (SmtpFailedRecipientException ex)
            {
                // log exception
            }
            return false;
        }

我试图将 UseDefaultCredentials 更改为 false 并更改端口,但似乎没有任何效果。

【问题讨论】:

  • 您看到documentation 中的“重要”提示了吗?不应再使用 SmtpClient。
  • @Flydog57 是的,还是不行。
  • 顺便说一句,包含指向support.google.com/accounts/answer/6010255 的链接会很好吗? (上面粉红色框的可能来源)。这样,我们就可以在上下文中阅读它,而无需输入您发布的图片的内容。您可能还提到您已经尝试了我的建议但没有帮助(并展示您尝试过的)

标签: c# .net smtp


【解决方案1】:

尝试以下操作:

public bool SendEmail(string userEmail, string confirmationLink)
{
    MailMessage mailMessage = new MailMessage();
    mailMessage.From = new MailAddress("employmentlyy@gmail.com");
    mailMessage.To.Add(new MailAddress(userEmail));

    mailMessage.Subject = "Confirm your email";
    mailMessage.IsBodyHtml = true;
    mailMessage.Body = confirmationLink;

    var emailPass = _config["emailPassword"];

    SmtpClient client = new SmtpClient();
    client.Credentials = new System.Net.NetworkCredential("employmentlyy@gmail.com", emailPass);
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.EnableSsl = true;

    try
    {
        client.Send(mailMessage);
        Console.WriteLine("Sent email!");
        return true;
    }
    catch (SmtpFailedRecipientException ex)
    {
        // log exception
    }
    return false;
}

client.UseDefaultCredentials = true;已删除,因为它不是必需的并且可能会导致问题。 client.EnableSsl = true;在设置 client.Port 属性后移动到。

【讨论】:

    【解决方案2】:

    使用以下代码:

    using System;
    using System.Net;
    using System.Net.Mail;
    
    namespace EmailApp
    {
        internal class Program
        {
            public static void Main(string[] args)
            {
                String SendMailFrom = "Sender Email";
                String SendMailTo = "Reciever Email";
                String SendMailSubject = "Email Subject";
                String SendMailBody = "Email Body";
    
                try
                {
                    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com",587);
                    SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
                    MailMessage email = new MailMessage();
                    // START
                    email.From = new MailAddress(SendMailFrom);
                    email.To.Add(SendMailTo);
                    email.CC.Add(SendMailFrom);
                    email.Subject = SendMailSubject;
                    email.Body = SendMailBody;
                    //END
                    SmtpServer.Timeout = 5000;
                    SmtpServer.EnableSsl = true;
                    SmtpServer.UseDefaultCredentials = false;
                    SmtpServer.Credentials = new NetworkCredential(SendMailFrom, "Google App Password");
                    SmtpServer.Send(email);
    
                    Console.WriteLine("Email Successfully Sent");
                    Console.ReadKey();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    Console.ReadKey();
                }
    
            }
        }
    }
    

    SmtpServer.UseDefaultCredentials设置为 false,此外,您可以在此处阅读更多步骤:https://www.techaeblogs.live/2022/06/how-to-send-email-using-gmail.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-03
      • 2011-04-06
      • 2021-07-06
      • 2014-12-24
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多