2012-05-04 28 views
5

Xin chào, tôi phải đọc tệp đính kèm và hình ảnh nội dòng riêng trong thư mục cục bộ từ triển vọng 2010 bằng C#. Tôi đã sử dụng khái niệm ID nội dung và thuộc tính cho việc này. Tôi đang sử dụng mã sau đây để làm điều đó nhưng nó hiện đang làm việc.Cách phân biệt giữa hình ảnh nội tuyến và tệp đính kèm trong triển vọng 2010 [C#]

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); 
     } 
    } 
} 

xin vui lòng giúp công việc đang tiến ....

+0

Chuỗi SchemaPR_ATTACH_CONTENT_ID = @ "http://schemas.microsoft.com/mapi/proptag/0x3712001E"; – zytham

Trả lời

2

Tôi đến đây tìm kiếm giải pháp nhưng không thích ý tưởng tìm kiếm "cid:" trong toàn bộ HTMLBody. Thứ nhất, nó làm chậm điều đó cho mỗi tên tập tin và thứ hai, nếu "cid:" xuất hiện trong phần nội dung, tôi sẽ nhận được một kết quả dương tính giả. Ngoài ra, thực hiện ToLower() trên HTMLBody không phải là một ý tưởng hay.

Thay vào đó, tôi đã sử dụng cụm từ thông dụng một lần trên HTMLBody để tìm kiếm bất kỳ phiên bản nào của thẻ <img>. Vì vậy, không có cách nào để kết hợp sai "cid:" trong văn bản nội dung (tuy nhiên không chắc là có thể).

 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")); 
    } 

Tôi khá chắc chắn rằng tôi có thể viết cụm từ thông dụng để chỉ trả lại tên tệp và có thể hiệu quả hơn. Nhưng tôi muốn có thêm chi phí vì lợi ích của khả năng đọc cho những người không phải là rất kinh nghiệm Regex phải duy trì mã.

+0

Điều này sẽ không hoạt động nếu Thư có chữ ký với một số loại hình ảnh trong đó. Outlook sẽ không bao gồm trong thẻ . – Steinfeld

+0

Có, điều này không hoạt động khi hình ảnh được nhúng được tham chiếu từ thuộc tính css. Ngoài ra, tôi nhận thấy việc truy cập HtmlBody và RtfBody đặt thư bị bẩn (yêu cầu lưu khi đóng) như một tác dụng phụ: / – Yaurthek

Các vấn đề liên quan