SPUtility.SendEmail retorna false quando invocado em asmx
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?
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