Domanda

Ho una funzione all'interno di una pagina ASMX che ha bisogno di inviare un'e-mail, ma SPUtility.SendEmail restituisce false.SPContext.Current è NULL, quindi creo un oggetto SPSite con l'URL del sito, e da quello, ottengo il rootweb, che è ciò che passerò a SPUtility.SendEmail.Se chiamo questo codice esatto (è incapsulato in una funzione helper) come risultato di un postback, utilizzando SPContext.Current.Web, funziona.Esaminando l'oggetto SPWeb da entrambe le chiamate, sembrano identiche.

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

Qualche idea Come inviare l'email?

È stato utile?

Soluzione

This is not an ideal solution, however if your code works when there is an SPContext, you can create a fake SPContext when it does not exist:

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top