Question

J'ai une fonction dans une page asmx qui doit envoyer un email, mais SPUtility.SendEmail renvoie faux. SPContext.Current est nul, donc je crée un SPSite objet avec l'URL du site, et à partir de là, j'obtiens le rootWeb, auquel je passe SPUtility.SendEmail.Si j'appelle ce code exact (il est encapsulé dans une fonction d'assistance) à la suite d'une publication, en utilisant SPContext.Current.Web, Ça marche.Examiner le SPWeb objet des deux appels, ils semblent identiques.

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

Des idées sur la façon d'envoyer l'e-mail ?

Était-ce utile?

La solution

Ce n'est pas une solution idéale, cependant si votre code fonctionne lorsqu'il y a un SPContext, vous pouvez créer un faux SPContext lorsqu'il n'existe pas :

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top