我继承了迁移到不同服务器的.NET 3.5 MVC(看起来像MVC版本1)站点。我安装了SMTP功能(IIS 7),并在IIS 6中启动了虚拟服务器。回到IIS 7,我确保SMTP电子邮件设置正在传送到localhost,我检查了防火墙上的端口。还是得到这个消息。由于我之前从未使用过MVC,因此无法找到应该发送此邮件的代码。我不知道在哪里看。
感谢任何帮助,谢谢!
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 = "admin@thisserver.com";
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("admin@thisserver.com");
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>
使用这些更改运行网站会呈现完全相同的堆栈跟踪...甚至是它所说的部分
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
它仍然说System.Web.Mail ???还不奇怪我不确定MVC是如何工作的。我是否需要重新编译或类似的东西?我甚至使用标准的telnet请求在端口25上测试了SMTP服务器,它工作正常。
感谢您的帮助。
答案 0 :(得分:2)
OnAfterResetPassword
中的AccountController
方法/操作正在使用已弃用的System.Web.Mail
命名空间。您无法将此配置为使用system.net/mailSettings/smtp
文件中web.config
中的邮件设置,就像System.Net.Mail
中一样,它不知道它们。
如果您有源代码,请更新为使用System.Net.Mail
代替:
如果您不能这样做,请检查以下内容:
System.Web.Mail
SmtpMail.SmtpServer
属性未设置且本地SMTP服务未运行SmtpMail.SmtpServer
属性已设置但服务器无法访问SMTP服务器答案 1 :(得分:0)
看起来像是在帐户控制器中。 FWIW,我认为System.Net.Smtp现在是“正确”的方式(我认为System.Web.Mail已被弃用)。您可能想要查看codeplex上的Email Sender项目,还有:http://emailsender.codeplex.com/,它使事情变得更简单。