2011-03-29 206 views
1

我继承了一个迁移到不同服务器的.NET 3.5 MVC(看起来像MVC版本1)网站。我安装了SMTP功能(IIS 7),并在IIS 6中启动了虚拟服务器。回到IIS 7,我确定SMTP电子邮件设置已交付给本地主机,并检查了防火墙上的端口。仍然收到此消息。由于我以前从未使用过MVC,因此无法找到应发送此邮件的代码。我不知道在哪里看。“SendUsing”配置值无效

任何帮助表示赞赏,谢谢!

HttpException (0x80004005): The "SendUsing" configuration value is invalid. 
] 
    System.Web.Mail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) +99 
    System.Web.Mail.CdoSysHelper.Send(MailMessage message) +1738 
    System.Web.Mail.SmtpMail.Send(MailMessage message) +273 
    IPS.Controllers.AccountController.OnAfterResetPassword(String email, String userName, String newPassword) in B:\IPS\Controllers\AccountController.cs:207 
    IPS.Controllers.AccountController.ForgotPassword(String userName) in B:\IPS\Controllers\AccountController.cs:192 
    lambda_method(ExecutionScope , ControllerBase , Object[]) +85 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24 
    System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258 
    System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382 
    System.Web.Mvc.Controller.ExecuteCore() +123 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23 
    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144 
    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54 
    System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

好了,找到了控制器代码:

[NonAction] 
protected virtual void OnAfterResetPAssword(string email, string userName, string newPassword) 
{ 
    System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage(); 
    mail.To = email; 
    mail.From = "[email protected]"; 
    mail.Subject = "New Password"; 
    mail.Body = "Here is your new password"; 

    System.Web.Mail.SmtpMail.Send(mail). 
} 

我把它改为:

[NonAction] 
protected virtual void OnAfterResetPAssword(string email, string userName, string newPassword) 
{ 
    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); 
    mail.To.Add(email); 
    mail.From = new System.Net.Mail.MailAddress("[email protected]"); 
    mail.Subject = "New Password"; 
    mail.Body = "Here is your new password"; 

    System.Net.Mail.SmtpMail.Send(mail). 
} 

而且我的web.config:

<system.net> 
    <mailSettings> 
     <smtp> 
     <network host="<FULL HOST IP ADDRESS>" port="25" userName="" password="" /> 
     </smtp> 
    </mailSettings> 
</system.net> 

运行与网站这些变化使得EXACT同样成功CK痕迹......甚至部分地方说,

System.Web.Mail.LateBoundAccessHelper.CallMethod(obj对象,字符串methodName的,对象[]参数)+99
System.Web.Mail.CdoSysHelper。发送(消息MAILMESSAGE)1738
System.Web.Mail.SmtpMail.Send(消息MAILMESSAGE)+273

心不是很奇怪,它仍然说System.Web.Mail ???我不确定MVC是如何工作的。我必须重新编译或者类似的东西吗?我甚至使用标准的telnet请求测试了端口25上的SMTP服务器,它工作正常。

感谢您的帮助。

+0

您需要重建该项目,但是您处于正确的轨道上。 – Kev 2011-03-30 09:37:49

回答

2

AccountController中的OnAfterResetPassword方法/操作正在使用已弃用的System.Web.Mail命名空间。您无法像配置System.Net.Mail那样将此配置为在web.config文件中使用system.net/mailSettings/smtp中的邮件设置,但它不知道它们。

如果你的源代码,然后更新使用System.Net.Mail代替:

System.Net.Mail Namespace
System.Net.Mail FAQ

如果你不能这样做,那么检查以下内容:

  • System.Web.MailSmtpMail.SmtpServer属性是不要设置本地SMTP服务没有运行
  • SmtpMail.SmtpServer属性设置,但服务器无法访问SMTP服务器
  • 这可能是因为工作进程帐户(如果你不使用模拟)不有权访问SMTP服务
+0

我必须检查,看看我是否有这个源代码。今晚我会回到家,回到这里回应。 – 2011-03-29 17:56:23

0

看起来像是在账户控制器中。 FWIW,我认为System.Net.Smtp是现在这样做的“正确”方式(我认为System.Web.Mail已被弃用)。您可能想查看codeplex上的Email Sender项目,还有:http://emailsender.codeplex.com/,它使事情变得更简单。