2012-05-30 11 views
11

हम अपने एएसपी.नेट एमवीसी 3 रेजर वेब एप्लिकेशन से ईमेल भेजते हैं।क्या कोई एमवीसी ईमेल पैकेज है जो HTTP संदर्भ की आवश्यकता नहीं है?

वर्तमान में हम ActionMailer.NET का उपयोग कर रहे हैं।

मैंने एमवीसीमेलर को देखा है।

दोनों के साथ समस्या यह है कि उन्हें निष्पादित करने के लिए एक एचटीपी संदर्भ की आवश्यकता है।

इससे समस्या यह है कि मैं ईमेल को अतुलनीय रूप से भेजना चाहता हूं। अब मैं आप एसिंक्रोनस रूप से वास्तविक भेजने (जैसे एसएमटीपी कॉल) कर सकते हैं पता है, लेकिन मैं एक ईमेल भेजने की पूरी प्रक्रिया चाहते अतुल्यकालिक, जैसे होने के लिए:

public ActionResult DoSomething(Something something) 
{ 
    _db.Save(something); 

    Task.Factory.StartNew(() => { 
     new MailController().DoSomething().Send(something); 
    }); 

    return RedirectToAction("Index"); 
} 

"DoSomething" विधि में, मैं क्वेरी डेटाबेस फिर से, अन्य सामान, इत्यादि .... मैं यह सब एसिंक्रोनस होना चाहता हूं - इसलिए पूरी कॉल एक कार्य में लपेटा गया है, केवल .SendAsync() करने का विरोध है। उम्मीद है कि समझ में आता है।

उपर्युक्त उदाहरण एक्शनमेलर है, और यह टूट जाता है - क्योंकि HTTP संदर्भ स्प्रेड किए गए धागे में चला गया है।

क्या कोई जानता है कि मैं इसे कैसे काम कर सकता हूं, या वैकल्पिक रूप से एक और पैकेज जो HTTP संदर्भ के अस्तित्व पर निर्भर नहीं है?

मुझे यकीन नहीं है कि एक HTTP संदर्भ की आवश्यकता क्यों है - यहां कोई अनुरोध नहीं है, बस HTML सिस्टम में फ़ाइल सिस्टम पर एक दृश्य को पार्स करना।

+0

मूल RazorEngine https: // github भी है।कॉम/एंटारिस/रेजोरइंजिन :) (शुरुआत में अंतरीस और खुद द्वारा विकसित किया गया लेकिन एंटालिस ने इसे पूरी तरह से ले लिया है) – Buildstarted

उत्तर

1

आप postal जो RazorViewEngine का उपयोग करता चेकआउट हो सकता है:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     Task.Factory.StartNew(() => 
     { 
      Thread.Sleep(5000); 
      dynamic email = new Email("Example"); 
      email.To = "[email protected]"; 
      email.FunnyLink = "some funny link"; 
      email.Send(); 
     }); 

     return View(); 
    } 
} 

और ~/Views/Emails/Example.cshtml अंदर:

To: @ViewBag.To 
From: [email protected] 
Subject: Important Message 

Hello, 
You wanted important web links right? 
Check out this: @ViewBag.FunnyLink 

यह भी सुनिश्चित करें कि आप पढ़ लिया है और उत्पादन पर आपके आवेदन देने से पहले dangers of implementing background tasks in ASP.NET applications समझा।

+0

तब आप क्या सुझाव देते हैं? एक अलग ईमेल सेवा बहुत अच्छी होगी, लेकिन फिर इसे रेज़र व्यू इंजन, और मेरे डोमेन/रिपोजिटरी का उपयोग करने के लिए वास्तव में एक अलग एमवीसी वेब एप्लिकेशन होना चाहिए - क्या यह नहीं होगा? मैं ईमेल भेजने के लिए बस "वेब साइट" पर HTTP कॉल कर दूंगा। आपको इसे कैसे करना होगा? – RPM1984

+0

आप अपने विंडोज सेवा में RazorEngine पैकेज का उपयोग कर सकते हैं जो आपको एएसपी.नेट एमवीसी अनुप्रयोगों के बाहर रेजर दृश्य प्रस्तुत करने की अनुमति देता है। –

+0

और इसके बारे में क्या है यदि मुझे लिंक बनाने के लिए मुख्य साइट की रूटिंग तालिका तक पहुंचने की आवश्यकता है? क्या मुझे किसी भी तरह की आम सभा में रूटिंग टेबल को सार करना होगा? – RPM1984

1

एक्शनमेलर .NET अब एमवीसी के बाहर स्टैंड-अलोन का उपयोग किया जा सकता है।

जानकारी यहां कवर कर रहे हैं

http://geeksharp.com/2011/07/06/actionmailer-0-6-released/

+0

नोट: कुछ रेजर विशेषताएं पार्टियल जैसे काम नहीं करेंगे - जो मेरे लिए कोई अच्छा नहीं है :-( –

0

आप .NET 4.5 उपयोग कर रहे हैं (या Async CTP जो कुछ भी यह है) आप async ActionMethods पर गौर कर सकते हैं। स्पष्ट होने के लिए मुझे यकीन नहीं है कि वास्तव में क्या आवश्यकताएं हैं (एमवीसी 3/4) लेकिन उस लेख को मदद करनी चाहिए।

मुझे यह भी यकीन नहीं है कि आप डेटाबेस लुकअप के लिए किए गए समय के बारे में चिंतित क्यों हैं - क्या यह वास्तव में इतना कर रहा है? SendAsync से

बेहतर समाधान: मैं ऐसे IIS में एक जो मैं क्या उपयोग कर रहा हूँ (नोट के रूप में नियमित रूप से संदेश विधि के साथ SendAsync उपयोग करने के लिए नहीं है, लेकिन send through an SMTP server को पसंद करते हैं: क्या आप IIS6 का उपयोग करना कंसोल भले ही आप आईआईएस 7 का उपयोग अपने मुख्य आईआईएस को प्रशासित करने के लिए कर रहे हों)। एक बार आपकी स्थानीय मशीन ने ईमेल कतारबद्ध करने के बाद यह तत्काल वापस आ जाएगा और आपको इसे भेजने के लिए प्रतीक्षा करने की आवश्यकता नहीं है। शायद अधिक महत्वपूर्ण बात यह है कि अगर इसे भेजने में कोई त्रुटि है तो आपके लिए पुनः प्रयास जारी रहेगा। मानो या नहीं - कभी-कभी smtp.gmail.com प्रतिक्रिया नहीं देता है।

संबंधित मुद्दे