2012-05-04 11 views
5

हाय मुझे सी # का उपयोग करके Outlook 2010 से स्थानीय निर्देशिका में संलग्नक और इनलाइन छवि को अलग से पढ़ना होगा। मैंने इसके लिए संपत्ति और सामग्री आईडी अवधारणा का उपयोग किया है। मैं ऐसा करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूं लेकिन अब यह काम कर रहा है।आउटलुक छवि और आउटलुक 2010 में अनुलग्नक के बीच अंतर कैसे करें [सी #]

if (mailItem.Attachments.Count > 0) 
{ 
    /*for (int i = 1; i <= mailItem.Attachments.Count; i++) 
    { 
    string filePath = Path.Combine(destinationDirectory, mailItem.Attachments[i].FileName); 
    mailItem.Attachments[i].SaveAsFile(filePath); 
    AttachmentDetails.Add(filePath); 
    }*/ 

    foreach (Outlook.Attachment atmt in mailItem.Attachments) 
    { 
     MessageBox.Show("inside for each loop"); 
     prop = atmt.PropertyAccessor; 
     string contentID = (string)prop.GetProperty(SchemaPR_ATTACH_CONTENT_ID); 
     MessageBox.Show("content if is " +contentID); 

     if (contentID != "") 
     { 
      MessageBox.Show("inside if loop"); 
      string filePath = Path.Combine(destinationDirectory, atmt.FileName); 
      MessageBox.Show(filePath); 
      atmt.SaveAsFile(filePath); 
      AttachmentDetails.Add(filePath); 
     } 
     else 
     { 
      MessageBox.Show("inside else loop"); 
      string filePath = Path.Combine(destinationDirectoryT, atmt.FileName); 
      atmt.SaveAsFile(filePath); 
      AttachmentDetails.Add(filePath); 
     } 
    } 
} 

कार्य प्रगति पर कृपया मदद ....

+0

स्ट्रिंग SchemaPR_ATTACH_CONTENT_ID = @ "http://schemas.microsoft.com/mapi/proptag/0x3712001E"; – zytham

उत्तर

-1

यह वही मेरे लिए काम किया है - की जाँच करता है, तो लगाव नाम ईमेल का HTMLBody में मौजूद है

VB.NET

<i> 
For Each oAttachment In m_olMailItem.Attachments 
If m_olMailItem.HTMLBody.ToLower.Contains("cid:" & oAttachment.FileName) = True Then 
    Msgbox("Embedded") 

Else 
    Msgbox("Not Embedded ! ") 

End if 

http://www.outlookforums.com/threads/44155-detecting-if-attachement-is-embedded-or-not/

2

मैं यहां एक समाधान की तलाश में आया लेकिन पूरे HTMLBody में "cid:" की खोज करने का विचार पसंद नहीं आया। सबसे पहले, यह हर फ़ाइल नाम के लिए ऐसा करने में धीमा है और दूसरी बात, यदि शरीर पाठ में "cid:" मौजूद था तो मुझे झूठी सकारात्मक मिलेगी। साथ ही, HTMLBody पर ToLower() प्रदर्शन करना एक अच्छा विचार नहीं है।

इसके बजाय मैं HTMLBody पर <img> टैग के किसी भी उदाहरण को देखने के लिए एक बार नियमित अभिव्यक्ति का उपयोग कर समाप्त हुआ। इस प्रकार शरीर के पाठ में "cid:" से झूठा मिलान करने का कोई तरीका नहीं है (हालांकि यह संभव नहीं है)।

 Regex reg = new Regex(@"<img .+?>", RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); 
    MatchCollection matches = reg.Matches(mailItem.HTMLBody); 

    foreach (string fileName in attachments.Select(a => a.FileName) 
    { 
     bool isMatch = matches 
      .OfType<Match>() 
      .Select(m => m.Value) 
      .Where(s => s.IndexOf("cid:" + fileName, StringComparison.InvariantCultureIgnoreCase) >= 0) 
      .Any(); 

     Console.WriteLine(fileName + ": " + (isMatch ? "Inline" : "Attached")); 
    } 

मुझे पूरा यकीन है कि मैं केवल फाइल नामों को वापस करने के लिए नियमित अभिव्यक्ति लिख सकता था और यह शायद अधिक कुशल होगा। लेकिन मैं उन लोगों के लिए पठनीयता के लिए अतिरिक्त खर्च करना चाहता हूं जो रेगेक्स गुरु नहीं हैं जिन्हें कोड बनाए रखना है।

+0

यह मेल नहीं करेगा अगर मेल में किसी प्रकार की तस्वीर के साथ हस्ताक्षर है। आउटलुक टैग के तहत शामिल नहीं होगा। – Steinfeld

+0

हां, यह काम नहीं करता है जब एम्बेडेड छवि को सीएसएस संपत्ति से संदर्भित किया जाता है। साथ ही, मैंने देखा कि एचटीएमएलबीडी और आरटीएफबीडी ने मेल गंदी सेट किया है (करीब से बचाने के लिए पूछें) साइड इफेक्ट के रूप में: / – Yaurthek

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