Недопустимое значение конфигурации «SendUsing» - PullRequest
1 голос
/ 29 марта 2011

Я унаследовал сайт .NET 3.5 MVC (похоже на MVC версии 1), который я перенес на другой сервер.Я установил функцию SMTP (IIS 7), а также запустил виртуальный сервер в IIS 6. Вернувшись в IIS 7, я убедился, что настройки электронной почты SMTP доставляются на локальный хост, и проверил порты на брандмауэре.Все еще получаю это сообщение.И поскольку я никогда раньше не работал с 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) + 1738
Система.Web.Mail.SmtpMail.Send (сообщение MailMessage) + 273

Не странно ли, что он по-прежнему говорит System.Web.Mail ???Я не уверен, как работает MVC.Нужно ли перекомпилировать или что-то подобное?Я даже протестировал SMTP-сервер на порту 25 со стандартным запросом telnet, и он отлично работает.

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Метод / действие OnAfterResetPassword в вашем AccountController использует устаревшее пространство имен System.Web.Mail. Вы не можете настроить это для использования параметров почты в system.net/mailSettings/smtp в вашем файле web.config, как в System.Net.Mail, он не знает о них.

Если у вас есть исходный код, обновитесь, чтобы использовать System.Net.Mail вместо:

Пространство имен System.Net.Mail
FAQ по System.Net.Mail

Если вы не можете сделать это, проверьте следующее:

  • Свойство System.Web.Mail SmtpMail.SmtpServer либо не задано, а локальная служба SMTP не работает
  • SmtpMail.SmtpServer свойство установлено, но сервер не может получить доступ к SMTP-серверу
  • Возможно, что учетная запись рабочего процесса (если вы не используете олицетворение) не имеет разрешения на доступ к службе SMTP
0 голосов
/ 29 марта 2011

Похоже, это в контроллере учетной записи. FWIW, я думаю, что System.Net.Smtp - это «правильный» способ сделать это сейчас (я думаю, что System.Web.Mail устарела). Возможно, вы захотите проверить проект Email Sender на codeplex, а также: http://emailsender.codeplex.com/, это еще проще.

...