SmtpClient无法使用SSL连接到Gmail
本文关键字:连接 Gmail SSL SmtpClient | 更新日期: 2023-09-27 18:06:57
我在SMTPClient上看到了很多帖子,但我仍然卡住了。我正在创建一个c#控制台应用程序,目标是。net 4.0框架,并运行在Windows 2008 R2数据中心(服务器)上。
我想从我刚刚创建的gmail帐户使用SSL发送电子邮件。
如果我使用端口587,我得到一个异常:
SMTP服务器需要安全连接或客户端未通过身份验证
如果我使用端口465,我得到另一个:
我意识到这个问题在过去已经被问过好几次了。我看到的所有答案都与设置UseDefaultCredentials的顺序有关。在设置真实凭据之前,必须设置为false。我遵循了这个建议(按照下面的代码),但我仍然失败了。无法从传输连接读取数据:阻塞操作被调用WSACancelBlockingCall中断。
其他答案包括将端口从465切换到587…我已经尝试过了,只是导致了一个不同的错误(如上所述)。
下面是我的代码:
NetworkCredential credentials = new NetworkCredential("something@gmail.com", "2-step-auth-Password");
MailAddress address = new MailAddress("something@gmail.com");
SmtpClient client = new SmtpClient("smtp.gmail.com", 465); // or 587
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = credentials;
client.Timeout = 10000; // 10 seconds.
client.Host = "smtp.gmail.com";
//client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
MailMessage message = new MailMessage("example@gmail.com", recipients);
message.Subject = "Hello";
message.Body = "Goodbye";
message.BodyEncoding = Encoding.UTF8;
try
{
client.Send(message);
}
catch (Exception ex)
{
Console.WriteLine("Exception caught in CreateTestMessage2(): {0}", ex.ToString());
}
message.Dispose();
更新2:我看到另一个答案,这可能是我的问题:gmail需要一个应用程序特定的密码(这显然是不可用我目前的gmail帐户。还不确定原因)。但这可能是我的问题。
更新3:我已经遵循了所有的指示。使用Gmail生成两步认证,但仍然失败
下面的代码为我工作,你可以试试这个:
SmtpClient smtp = new SmtpClient("smtp.office365.com");
//Your Port gets set to what you found in the "POP, IMAP, and SMTP access" section from Web Outlook
smtp.Port = 587;
//Set EnableSsl to true so you can connect via TLS
smtp.EnableSsl = true;
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("Username", "Password");
smtp.Credentials = cred;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("Sender Email Address", "Sender Name");
StringBuilder mailBody = new StringBuilder();
mail.To.Add("ToEmailAddress");
mail.Subject = "Subject";
mail.IsBodyHtml = true;
mail.Body = "Body Text";
try
{
smtp.Send(mail);
}
catch (Exception ex)
{
}