我正在尝试使用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!
有人可以帮助我吗?我错过了什么?
答案 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