Frage

Ich habe eine Funktion innerhalb einer ASMX-Seite, die eine E-Mail senden muss, aber SPUtility.SendEmail gibt false zurück. SPContext.Current ist null, also erstelle ich eine SPSite Objekt mit der Site-URL, und daraus erhalte ich das RootWeb, an das ich übergebe SPUtility.SendEmail.Wenn ich genau diesen Code (er ist in einer Hilfsfunktion gekapselt) als Ergebnis eines Postbacks aufrufe, verwende ich SPContext.Current.Web, Es klappt.Untersuchen der SPWeb Objekt aus beiden Aufrufen, sie sehen identisch aus.

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

Irgendwelche Ideen, wie man die E-Mail verschickt?

War es hilfreich?

Lösung

Dies ist keine ideale Lösung. Wenn Ihr Code jedoch funktioniert, wenn ein SPContext vorhanden ist, können Sie einen gefälschten SPContext erstellen, wenn dieser nicht vorhanden ist:

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top