SPUtility.SendEmail gibt beim Aufruf in asmx false zurück
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?
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;
}
}