我有一个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;
    }
}
许可以下: CC-BY-SA归因
scroll top