ActionMailer失败,"值不能为空。参数名称:uriString"

时间:2012-02-15 20:57:58

标签: asp.net-mvc-3 c#-4.0 actionmailer

我正在尝试使用ActionMailer 0.7.0从我的MVC 3项目发送电子邮件。

我已经按照项目网站上发布的样本跟着这封信。

但是当我尝试发送电子邮件时,始终会发生以下错误:

“值不能为null。参数名称:uriString”

它出现在电子邮件正文中的@ Url.AbsoluteAction。

@using ActionMailer.Net
@model User

@{
    Layout = null;
}

Welcome to My Cool Site, @Model.FirstName

We need you to verify your email.  Click this nifty link to get verified!

// The error happens in the line bellow
@Url.AbsoluteAction("Verify", "Account", new { code = @Model.EmailActivationToken.ToString() })

Thanks!

有人可以帮助我吗?我错过了什么?

2 个答案:

答案 0 :(得分:1)

在尝试使用我放弃的示例中提出的代码来解决问题几天之后挣扎。

我已经下载了源代码,发现当RouteCollection不是标准时会发生问题(这是我的情况)。

所以我找到了一个优雅的工作,对我有用。

而是将令牌发送到视图并使用Url.AbsoluteAction方法,我在控制器中使用了Url.Action和protocol参数,并在视图模型中发送了完整的URL。像这样:

new EmailsController().ActivationMail(new ActivationMailViewModel { Email = data.Email, FirstName = data.Name, ActivationLink = Url.Action("VerifyEmail", "Mail", new { code = data.ActivationToken.ToString() }, "http") }).Deliver();

观点变为:

@using ActionMailer.Net
@model User
@{ Layout = null; }
Welcome to My Cool Site, @Model.FirstName

We need you to verify your email.  Click this nifty link to get verified!

@Model.ActivationLink

Thanks!

关于SMTP主机问题,我发现即使你为“SpecifiedPickupDirectory”设置了传递,你也需要在Web.Config中添加一个空的主机标签。它没有在任何ActionMailer示例中指定。这是最终配置:

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="SpecifiedPickupDirectory">
        <network host="none" />
        <specifiedPickupDirectory pickupDirectoryLocation="C:\temp\" />
      </smtp>
    </mailSettings>
  </system.net>

我希望它有所帮助。

祝大家好运。

答案 1 :(得分:0)

我刚刚花了几个小时将ActionMailer实现到我的MVC项目中。

我发现斯科特的截屏确实帮助了我。

http://www.youtube.com/watch?v=QQRzYo7k9Vs&hd=1

它解释了如何解决SMTP主机问题,以及如何设置用户模型等。

我仍然遇到用户电子邮件验证问题,如果我将其解决,我会尽力通知您。

但是,您无需发送“普通”电子邮件。因此,我的建议是暂时将其保留,直到您可以使电子邮件正常工作。

希望有所帮助,当我整理电子邮件验证时,我会回复你!<​​/ p>

干杯

Chewie