Pergunta

Eu tenho uma função dentro de uma asmx página que precisa enviar um e-mail, mas SPUtility.SendEmail retorna false. SPContext.Current é nulo, então eu criar um SPSite objeto com a url do site, e com isso, eu fico rootWeb, que é o que eu passo para SPUtility.SendEmail.Se eu chamar esse código exato (é encapsulado em uma função auxiliar) como o resultado de um postback, usando SPContext.Current.Web, ele funciona.Examinando o SPWeb objeto de ambas as chamadas, eles parecem idênticos.

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);
    }
}

Alguma idéia de como enviar o e-mail?

Foi útil?

Solução

Esta não é uma solução ideal, no entanto, se o código funciona quando há uma SPContext, você pode criar um falso SPContext quando não existir:

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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top