تقوم SPUtility.SendEmail بإرجاع خطأ عند استدعائها في asmx
سؤال
لدي وظيفة داخل صفحة 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;
}
}
لا تنتمي إلى sharepoint.stackexchange