SPUtility。SendEmail在asmx中调用时返回false
题
我有一个asmx页面内的功能,需要发送电子邮件,但 SPUtility.SendEmail
返回false。 SPContext.Current
是null,所以我创建一个 SPSite
对象与网站url,并从中,我得到rootWeb,这是我传递给 SPUtility.SendEmail
.如果我调用这个确切的代码(它封装在一个帮助函数中)作为回发的结果,使用 SPContext.Current.Web
, ,它的工作原理。检查 SPWeb
从两个调用对象,他们看起来相同。
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);
}
}
任何想法如何发送电子邮件?
解决方案
这不是一个理想的解决方案,但是如果您的代码在存在SPContext时工作,则可以在不存在时创建假SPContext:
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;
}
}