【问题标题】:How to send mail gmail via smtp?如何通过 smtp 发送邮件 gmail?
【发布时间】:2021-03-21 00:22:26
【问题描述】:

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

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

我的代码:

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);
        }
    }

在我的 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 属性
  • 注释/取消注释 IsBodyHtml 和 BodyEncoding 属性

【问题讨论】:

    标签: c# smtp


    【解决方案1】:

    我建议你关注这个 - Sending email in .NET through Gmail 和 Cannot send mail from certain server

    -首先检查“Allowing less secure apps to access your account”是否在谷歌帐户设置中启用,然后检查以下代码:

    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);
                }
    

    可能有一些防火墙问题。

    参考资料:
    SendEmail in ASP.net shows me Syntax error, command unrecognized. The server response was: Dovecot ready
    Syntax error, command unrecognized. The server response was ''

    希望对您有所帮助。

    【讨论】:

    • 如果我没有注意到我的代码,您提供的代码与我的完全相同。是的,在我发布这个问题之前,我也阅读了这些答案,对此没有帮助。虽然我没有将任何 ip 与 gmail 关联,但只需设置我提到的设置
    • 您是否尝试过为 gmail 帐户中安全性较低的应用指定凭据并启用访问权限?
    • 我找不到可以选择允许访问帐户的类型的部分。我只激活了IMAP和POP,根据你给我的主题中的答案,已经不是他们说的地方了
    • 好的,我找到了。请使用链接更新您的答案:support.google.com/accounts/answer/6010255?hl=en 之后端口也应为 587。不接受这个答案
    • 我是否纠正了该代码设置smtpClient.Credentials 两次?如果这是必要的,那肯定很奇怪。
    猜你喜欢
    • 2021-05-08
    • 2014-08-27
    • 2018-11-13
    • 2019-05-30
    • 2012-12-13
    • 1970-01-01
    • 2017-05-12
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多