发送电子邮件 C# 时出错

本文关键字:出错 电子邮件 | 更新日期: 2023-09-27 17:56:37

我尝试用C#发送电子邮件(使用gmail)。我检查了我可以在谷歌上找到的解决方案,但它对我不起作用,我总是有错误:

SMTP 服务器需要安全连接或客户端不是 认证。来自服务器的响应是:5.5.1 身份验证 必填。

这是代码的检查:

string smtpAddress = "smtp.gmail.com";
int portNumber = 587;
bool enableSSL = true;
string emailFrom = "*****@gmail.com";
string password = "*****";
string emailTo = "******@gmail.com";
string subject = "Hello";
string body = "Hello, I'm just writing this to say Hi!";
using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress(emailFrom);
    mail.To.Add(emailTo);
    mail.Subject = subject;
    mail.Body = body;
    mail.IsBodyHtml = true;
    using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
    {
        smtp.Credentials = new NetworkCredential(emailFrom, password);
        smtp.EnableSsl = enableSSL;
        smtp.Send(mail);
    }
}

发送电子邮件 C# 时出错

MSDN说:某些SMTP服务器要求客户端 在服务器代表它发送电子邮件之前进行身份验证。设置此项 属性为 true 时,如果此 SmtpClient 对象应由 服务器,使用 当前登录的用户。对于客户端应用程序,这是所需的 在大多数情况下的行为。

所以你需要在分配Credentials之前设置smtp.UseDefaultCredentials = false;,所以你的代码会看起来像下面这样:

using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
{
    smtp.UseDefaultCredentials = false;
    smtp.Credentials = new NetworkCredential(emailFrom, password);
    smtp.EnableSsl = enableSSL;
    smtp.Send(mail);
}

我找到了适合我的解决方案。倒霉提出的解决方案很好,但我需要配置gmail帐户。

所以代码是:

        string smtpAddress = "smtp.gmail.com";
        int portNumber = 587;
        bool enableSSL = true;
        string emailFrom = "****@gmail.com";
        string password = "*****";
        string emailTo = "****@gmail.com";
        string subject = "Hello";
        string body = "Hello, I'm just writing this to say Hi!";
        using (MailMessage mail = new MailMessage())
        {
            mail.From = new MailAddress(emailFrom);
            mail.To.Add(emailTo);
            mail.Subject = subject;
            mail.Body = body;
            using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
            {
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new NetworkCredential(emailFrom, password);
                smtp.EnableSsl = enableSSL;
                smtp.Send(mail);
            }
        }

此外,在您的Gmail帐户中,您必须进行此更改。

Gmail 帐户更改