تقوم SPUtility.SendEmail بإرجاع خطأ عند استدعائها في asmx

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/81218

  •  10-12-2019
  •  | 
  •  

سؤال

لدي وظيفة داخل صفحة asmx والتي تحتاج إلى إرسال بريد إلكتروني، ولكن SPUtility.SendEmail يعود كاذبة. SPContext.Current فارغة، لذلك أقوم بإنشاء 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 مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top