Вопрос

У меня есть функция внутри страницы 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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top