SPUtility.SendEmail возвращает false при вызове в asmx
Вопрос
У меня есть функция внутри страницы asmx, которой нужно отправить электронное письмо, но SPUtility.SendEmail
возвращает ложь. SPContext.Current
имеет значение null, поэтому я создаю SPSite
объект с URL-адресом сайта, и из него я получаю rootWeb, который я передаю SPUtility.SendEmail
.Если я вызову именно этот код (он инкапсулирован во вспомогательную функцию) в результате обратной передачи, используя SPContext.Current.Web
, оно работает.Изучение SPWeb
объект из обоих вызовов, они выглядят одинаково.
if (string.IsNullOrEmpty(siteUrl))
success = SPUtility.SendEmail(SPContext.Current.Web, headers, message);
else
{
using (SPSite site = new SPSite(siteUrl))
{
success = SPUtility.SendEmail(site.RootWeb, headers, message);
}
}
Есть идеи, как отправить письмо?
Решение
Это не идеальное решение, однако, если ваш код работает при наличии SPContext, вы можете создать поддельный SPContext, когда он не существует:
using (var site = new SPSite("url"))
{
using (var web = site.OpenWeb())
{
HttpContext newContext = null;
if (HttpContext.Current == null)
{
var request = new HttpRequest("", web.Url, "");
newContext = new HttpContext(request, new HttpResponse(TextWriter.Null));
HttpContext.Current = newContext;
}
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
HttpContext.Current.Items["HttpHandlerSPSite"] = site;
// Do your code here
if (newContent != null)
HttpContext.Current = null;
}
}
Не связан с sharepoint.stackexchange