【问题标题】:new MailAddress() Exits out of methodnew MailAddress() 退出方法
【发布时间】:2016-11-19 04:00:11
【问题描述】:

我有一个相当奇怪的问题,我无法解决。所以这里是代码:

[HttpGet]
[AllowAnonymous]
public ActionResult SendEmail()
{
    SendRegisterEmail("Test", "Testagain", "lastTest");
    return View("Index");
}

public async Task<bool> SendRegisterEmail(string subject, string message, string to)
{
    var email = new Email();
    var mailAddress = new MailAddress(to);
    email.Subject = subject;
    email.Body = message;
    var mailAddressCollection = new MailAddressCollection();
    mailAddressCollection.Add(mailAddress);
    email.To = (mailAddressCollection);

    return await Send(email);
}

现在为了证明我的问题,我将代码分解为单行,以便查看它在哪一行中断。这是我发现的:

当我调试它并进入SendRegisterEmail 方法时,var mailAddress = new MailAddress(to); 行开始运行,然后它退出函数并运行return View("Index"); 行并加载页面。奇怪的是我在最后添加了一个日志方法到发送,并且日志永远不会被命中。我在 Send 上放了一个断点,它从未被击中。就好像电子邮件的创建崩溃了,决定退出到调用者函数并继续执行代码。

我不知道为什么。

【问题讨论】:

  • 您分配给“to”的值不是有效的电子邮件地址。这可能会导致它退出函数,并且由于它是异步的,它会运行 return View 语句

标签: c# email asp.net-mvc-5 mailaddress


【解决方案1】:

SendRegisterEmail 方法是异步的,您无需等待。

当前,您启动了一个即发即弃的操作,并在您创建一个新的 MailAddress 实例时执行了 return View 指令。 很可能是throwsFormatException,因为异常是在另一个线程中引发的,所以您无法捕获。

将您的操作方法更新为

public async Task <ActionResult> SendEmail()
{
    await SendRegisterEmail("Test", "Testagain", "lastTest");
    return View("Index");
}

同样在return之前等待也不是真的需要,可以改成

public Task<bool> SendRegisterEmail(string subject, string message, string to)
{
    var email = new Email();
    // ... 
    return Send(email);
}

但这与你遇到的问题无关。

【讨论】:

  • 啊,它现在不起作用的原因是它不喜欢"lastTest" 作为值,它想要一个正确的电子邮件地址。
  • 你为什么要这样做?发送返回真或假。
猜你喜欢
  • 2016-11-12
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多