使用 Gmail 发送邮件

Mil*_*nki 1 .net c# windows gmail smtp

public static bool SendMail(string toList, string from, string ccList, string subject, string body)
{
    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();

    try
    {
        MailAddress fromAddress = new MailAddress(from);
        message.From = fromAddress;
        message.To.Add(toList);
        if (ccList != null && ccList != string.Empty)
            message.CC.Add(ccList);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;

        smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtpClient.EnableSsl = true;
        smtpClient.Timeout = 30000;
        smtpClient.Host = "smtp.gmail.com";   // We use gmail as our smtp client
        smtpClient.Port = 587;
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypassword");


        smtpClient.Send(message);
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码看起来没问题,但仍然不起作用,我不明白为什么?任何其他方式使用 gmail 的 smtp 发送邮件。

Dam*_*ith 5

尝试

var client = new SmtpClient("smtp.gmail.com", 587)
{
  Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
  EnableSsl = true
};

client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
Run Code Online (Sandbox Code Playgroud)

如果该UseDefaultCredentials 属性设置为false,则在连接到服务器时,该属性中设置的值Credentials 将用作凭据。您在这里设置UseDefaultCredentialstrue然后它将忽略您提供的凭据。