如何通过smtp发送邮件gmail?

Ori*_*ael 1 c# smtp

我在尝试执行此邮件发送方法时收到异常。

{"语法错误,命令无法识别。服务器响应为:"}

我的代码:

public async static Task SendExceptionMail(Exception e)
    {
        try
        {
            //TODO: fill..

            var message = new MailMessage();
            message.To.Add("other_email_than_my_email@gmail.com");
            message.From = new MailAddress("my_email_in_gmail@gmail.com");

            message.Subject = "Server Exception Occured";

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Exception occured. Stack trace:");
            sb.AppendLine(e.StackTrace);
            sb.AppendLine("");
            sb.AppendLine("Time: " + DateTime.UtcNow);

            message.Body = sb.ToString();
            message.IsBodyHtml = false;
            message.BodyEncoding = UTF8Encoding.UTF8;

            using (var smtpClient = new SmtpClient())
            {
                smtpClient.Credentials = new System.Net.NetworkCredential("my_email_in_gmail@gmail.com", "very_very_complicated_password_with_numbers_and_signs");
                smtpClient.Host = "smtp.gmail.com";
                smtpClient.Port = 465;
                smtpClient.EnableSsl = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                //smtpClient.UseDefaultCredentials = false;
                
                
                await smtpClient.SendMailAsync(message);
            }
        }
        catch (Exception ex)
        {
            Console.Write(ex.StackTrace);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的 Gmail 帐户中,我允许在设置选项卡中使用 IMAP 和 POP。

我试过的:

  • 将端口更改为 587 和 25。这次我得到了 The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at
  • 注释/取消注释UseDefaultCredentials行,DeliveryMethod属性
  • 注释/取消注释IsBodyHtmlBodyEncoding属性

Nir*_*ngh 6

我建议你遵循这个 -通过 Gmail 在 .NET 中发送电子邮件并且无法从某些服务器发送邮件

-首先检查是否在谷歌帐户设置中启用了“允许安全性较低的应用程序访问您的帐户”,然后检查以下代码:

using (var smtpClient = new SmtpClient())
            {
                smtpClient.Credentials = new System.Net.NetworkCredential("my_email_in_gmail@gmail.com", "very_very_complicated_password_with_numbers_and_signs");
                smtpClient.Host = "smtp.gmail.com";
                smtpClient.Port = 587; // Google smtp port
                smtpClient.EnableSsl = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.UseDefaultCredentials = false;// disable it
                /// Now specify the credentials 
smtpClient.Credentials = new NetworkCredential(message.From.Address, fromPassword)

                await smtpClient.SendMailAsync(message);
            }
Run Code Online (Sandbox Code Playgroud)

可能有一些防火墙问题。

参考:
ASP.net 中的 SendEmail 显示语法错误,命令无法识别。服务器响应是:Dovecot 就绪
语法错误,命令无法识别。服务器响应为 ''

希望这有帮助。

  • 我是否正确地认为该代码将 `smtpClient.Credentials` 设置了两次?如果这是必要的话,那肯定很奇怪。 (2认同)