C# 如何通过smtp发送邮件gmail?

C# 如何通过smtp发送邮件gmail?,c#,smtp,C#,Smtp,我在尝试执行此邮件发送方法时收到异常 {“语法错误,无法识别命令。服务器响应为:”} 我的代码: public async static Task SendExceptionMail(Exception e) { try { //TODO: fill.. var message = new MailMessage(); message.To.Add("other_email

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

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

我的代码:

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。这一次我得到
    SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:需要5.5.1身份验证。有关详细信息,请访问
  • 注释/取消注释
    UseDefaultCredentials
    行,
    DeliveryMethod
    属性
  • 注释/取消注释
    IsBodyHtml
    BodyEncoding
    属性

我建议您遵循这一点,并且

-首先检查google帐户设置中是否启用“”,然后使用以下代码进行检查:

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);
            }
可能存在一些防火墙问题

参考文献:


希望这对你有所帮助。

我建议你遵循这个-并且

-首先检查google帐户设置中是否启用“”,然后使用以下代码进行检查:

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);
            }
可能存在一些防火墙问题

参考文献:


希望有帮助。

如果我没有注意到我的代码,您提供的代码与我的完全相同。是的,在我发布这个问题之前,我也阅读了这些答案,没有任何帮助。虽然我没有将任何ip链接到gmail,但只需设置我提到的设置。您是否尝试过在gmail帐户中指定凭据并打开对不太安全的应用程序的访问?我找不到可以选择允许访问该帐户的类型的部分。我只激活了IMAP和POP,根据你给我的主题中的答案,它不再是他们所说的“OK”,我在哪里找到了。请用链接更新您的答案:之后端口应为587。我将接受此回答我是否正确该代码设置了两次
smtpClient.Credentials
?如果这是必要的,那么它肯定很奇怪。如果我没有注意到我的代码,那么您提供的代码与我的完全相同。是的,在我发布这个问题之前,我也阅读了这些答案,没有任何帮助。虽然我没有将任何ip链接到gmail,但只需设置我提到的设置。您是否尝试过在gmail帐户中指定凭据并打开对不太安全的应用程序的访问?我找不到可以选择允许访问该帐户的类型的部分。我只激活了IMAP和POP,根据你给我的主题中的答案,它不再是他们所说的“OK”,我在哪里找到了。请用链接更新您的答案:之后端口应为587。我将接受此回答我是否正确该代码设置了两次
smtpClient.Credentials
?如果这是必要的,那么它肯定是奇怪的。