【问题标题】:getting timeout when sending a mail in cshtml在cshtml中发送邮件时超时
【发布时间】:2016-02-03 09:43:56
【问题描述】:

我正在尝试通过表单帖子发送邮件,但是当表单发布时它尝试发送邮件然后超时。超时的代码是这样的:

    MailMessage mail = new MailMessage();
    mail.From = new MailAddress("someone@example.com");
    mail.To.Add("someoneElse@example.com");

    SmtpClient smtp = new SmtpClient();
    smtp.Port = 465;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.UseDefaultCredentials = false;
    smtp.Host = "smtp.gmail.com";

    mail.Subject = "Hello";
    mail.Body = "World!";
    smtp.Send(mail);

【问题讨论】:

  • “超时”是什么意思?有例外吗?它的全文是什么,包括调用堆栈?它是 IIS 或电子邮件客户端的例外吗?您确定这些设置将允许您通过 gmail 发送吗?首先在单元测试中尝试此代码,直到您设法发送电子邮件,然后将其放入您的网页中
  • 另外,请查看有关通过 gmail 发送电子邮件的许多 SO 问题。我几乎可以肯定这已经得到了回答
  • @PanagiotisKanavos 这是错误:描述:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.Net.Mail.SmtpException:操作已超时。
  • 首先,这只是消息,而不是完整的异常(调用 ToString())。其次,网络超时通常是因为地址或端口错误。几年前,Gmail 放弃了对 TLS (587) 的 SSL(端口 465)支持

标签: c# html email razor gmail


【解决方案1】:

这几乎肯定是您的客户端设置的问题。

如果您使用端口 465,则需要使用 SSL - 见这里https://support.google.com/a/answer/176600?hl=en 在您当前的客户端设置中,这被省略了。

另外,我认为您缺少凭据。

尝试将您的客户端更改为

SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Port = 587;
client.EnableSsl = true; //ssl is required
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("your-email@gmail.com", "YourPassword");
client.Timeout = 20000; //increase the timeout

如 cmets 中所述,您可能还需要允许“不太安全的应用”访问您的帐户 -

这里有信息http://support.google.com/accounts/answer/6010255

【讨论】:

  • 这可能还不够as shown here,OP 可能不得不允许不太安全的应用程序连接
  • @PanagiotisKanavos 已将此添加到答案中,尽管我从来没有这样做过
  • 好吧,其他人 just found 他的帐户确实需要这个。
  • 嗯,虽然不同 - OP 正在超时,那个特定的问题是 Authentication failed
猜你喜欢
  • 2018-08-09
  • 2016-05-22
  • 2015-11-25
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2020-04-19
  • 2019-07-24
相关资源
最近更新 更多