【发布时间】:2015-10-31 02:55:29
【问题描述】:
我在 SMTPClient 上看到很多帖子,但我仍然卡住了。 我正在创建一个针对 .NET 4.0 框架并在 Windows 2008 R2 数据中心(服务器)上运行的 C# 控制台应用程序。
我想从我刚刚创建的 gmail 帐户使用 SSL 发送电子邮件。
如果我使用端口 587,我会得到一个异常:
SMTP 服务器需要安全连接或客户端未通过身份验证
如果我使用端口 465,我会得到另一个:
无法从传输连接读取数据:阻塞操作被 WSACancelBlockingCall 调用中断。
我知道这个问题过去已经被问过好几次了。我看到的所有答案都与设置 UseDefaultCredentials 的顺序有关。它必须设置为 false BEFORE 设置真实凭据。我已经遵循了这个建议(根据下面的代码),但我仍然失败了。
其他答案包括将端口从 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 生成两步验证,但仍然失败。
【问题讨论】:
-
您的凭据不需要来自 gmail 帐户吗?
-
我不相信它是重复的,因为上面的代码遵循提供的解决方案:在我设置凭据之前,'UseDefaultCredentials' 设置为 false,但它仍然失败。这就是我问的原因。
-
me@me.com 只是placeolders,所以我不会在这个公共论坛上发布我的凭据。 “...@gmail.com”处的凭据。编辑我的帖子以反映。
标签: c# .net gmail smtpclient