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?

¿Fue útil?

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
scroll top