SPUtility.SendEmail devuelve falso cuando se invoca en asmx
Pregunta
Tengo una función dentro de una página asmx que necesita enviar un correo electrónico, pero SPUtility.SendEmail
devuelve falso. SPContext.Current
es nulo, entonces creo un SPSite
objeto con la URL del sitio, y de ahí, obtengo el rootWeb, que es a lo que le paso SPUtility.SendEmail
.Si llamo a este código exacto (está encapsulado en una función auxiliar) como resultado de una devolución de datos, usando SPContext.Current.Web
, funciona.examinando el SPWeb
objeto de ambas llamadas, parecen 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);
}
}
¿Alguna idea de cómo enviar el correo electrónico?
Solución
Esta no es una solución ideal; sin embargo, si su código funciona cuando hay un SPContext, puede crear un SPContext falso cuando no existe:
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 bajo: CC-BY-SA con atribución
No afiliado a sharepoint.stackexchange