SPUtility.SendEmail renvoie false lorsqu'il est invoqué dans asmx
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 ?
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