2009-02-19 15 views
37

मैं अनुलग्नक के साथ एक ईमेल भेजने के लिए SmtpClient का उपयोग कर रहा हूँ। हालांकि एक निश्चित बैच के लिए हमें उन्हें भेजने के बजाय MailMessage को किसी भी तरह से सहेजने की आवश्यकता है। हम तब उपयोगकर्ताओं को ड्राफ्ट फ़ोल्डर में संदेशों को मैन्युअल रूप से अपलोड करने की सोच रहे हैं/उम्मीद कर रहे हैं।SmtpClient का उपयोग करते समय भेजने के बजाय मैं एक ईमेल कैसे सहेज सकता हूं?

क्या इन संदेशों को अनुलग्नक के साथ सहेजना संभव है (असंभव, मैंने सोचा होगा)। या वैकल्पिक रूप से संदेशों को उपयोगकर्ता खाते में किसी फ़ोल्डर में अपलोड करें?

अगर किसी के पास इसका कोई अनुभव है, तो मैं थोड़ा सा मदद या सूचक की सराहना करता हूं।

+0

"भेजने के बजाय।" – Avram

उत्तर

57

एएसपी.नेट में परीक्षण करते समय हम अपने ईमेल को फ़ोल्डर में सहेजते हैं बल्कि उन्हें ईमेल सर्वर के माध्यम से भेजते हैं। हो सकता है कि आप अपने बैच के लिए अपनी web.config सेटिंग बदल सकें?

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="SpecifiedPickupDirectory"> 
     <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/> 
    </smtp> 
    </mailSettings> 
</system.net> 

अतिरिक्त जानकारी:

+0

धन्यवाद एक इलाज किया। इसके अलावा अव्राम (नीचे देखें) ने एक उपयोगी लिंक पोस्ट किया है जो ऑटो जेनरेट किए गए GUID से ईमेल संदेश नाम को अपने मूल्य पर बदलता है। – user17510

+0

मैंने इस विधि को आजमाया है, और मुझे एक त्रुटि मिलती है कि "प्रेषक" पता निर्दिष्ट नहीं है। Web.config में निर्दिष्ट PickupDirectory के लिए इसे निर्दिष्ट करने का कोई तरीका है? जब आप नेटवर्क सेटिंग्स करते हैं तो – codeMonkey

-6

यह ई-मेल क्लाइंट और इसकी स्वचालन API पर अत्यधिक निर्भर है। एसएमटीपी एक मेल भेज रहा है और प्रोटोकॉल स्थानांतरित कर रहा है। ई-मेल को सहेजने या यहां तक ​​कि पुनर्प्राप्त करने के लिए इसका कोई संकाय नहीं है।

6

आप इसे अपने /app.config फ़ाइल में system.net सेटिंग के साथ कॉन्फ़िगर कर सकते हैं।

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="Network"> 
     <network host="mail.mydomain.com" port="25" /> 
    </smtp> 
    <!-- Use this setting for development 
    <smtp deliveryMethod="SpecifiedPickupDirectory"> 
     <specifiedPickupDirectory pickupDirectoryLocation="C:\Temp" /> 
    </smtp> 
    --> 
    </mailSettings> 
</system.net> 

इसके अलावा, यहां migrating from System.Web.Mail to System.Net.Mail पर जानकारी के साथ एक लिंक है।

7

यह मदद कर सकते हैं - Adding Save() functionality to Microsoft.Net.Mail.MailMessage
मुख्य ideia, MailMessage के लिए एक विस्तार करते हैं, कि प्रतिबिंब बनाने से एक बचत विधि।

+0

धन्यवाद, यह देखना दिलचस्प होगा कि मैं यहां संलग्नक भी जोड़ सकता हूं या नहीं। – user17510

7

साथ ही साथ SpecifiedPickupDirectory अन्य उत्तरों की जानकारी, यदि आप यह सुनिश्चित करना चाहते हैं कि आपके ईमेल साइट रूट के सापेक्ष किसी फ़ोल्डर में भेजे गए हैं - बिल्ड सर्वर पर परीक्षण में आसान जहां आप पथ नहीं जानते हैं - आप कर सकते हैं अपना ईमेल कोड भेजने में एक त्वरित जांच जोड़ें:

SmtpClient client = new SmtpClient(); 
    ... 

    // Add "~" support for pickupdirectories. 
    if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && client.PickupDirectoryLocation.StartsWith("~")) 
    { 
     string root = AppDomain.CurrentDomain.BaseDirectory; 
     string pickupRoot = client.PickupDirectoryLocation.Replace("~/", root); 
     pickupRoot = pickupRoot.Replace("/",@"\"); 
     client.PickupDirectoryLocation = pickupRoot; 
    } 

और अपने परीक्षण कुछ इस तरह (सुनिश्चित करें कि आप App_Data उपयोग करती हैं इसलिए आईआईएस फ़ोल्डर में लिख सकते हैं बनाने के) दिखेगा: भी

// Arrange - get SitePath from AppDomain.Current.BaseDirectory + ..\ 
    string pickupPath = Path.Combine(SitePath, "App_Data", "TempSmtp"); 
    if (!Directory.Exists(pickupPath)) 
     Directory.CreateDirectory(pickupPath); 

    foreach (string file in Directory.GetFiles(pickupPath, "*.eml")) 
    { 
     File.Delete(file); 
    } 

    // Act (send some emails) 

    // Assert 
    Assert.That(Directory.GetFiles(pickupPath, "*.eml").Count(), Is.EqualTo(1)); 
+0

धन्यवाद दोस्त। यही वह था जिसे मैं ढूंढ रहा था! –

1

एक बग एफ के कुछ संस्करणों में एक वर्कअराउंड के रूप में जोड़ने की आवश्यकता है ramework। तो पूरा संस्करण इस तरह दिखता है:

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="SpecifiedPickupDirectory"> 
     <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/> 
     <network host="localhost" /> 
    </smtp> 
    </mailSettings> 
</system.net> 
संबंधित मुद्दे

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