2016-06-23 3 views
0

나는 그것이 간단한 질문이지만 해결책을 찾을 수 없다는 것을 알고있다. 나는 이메일에서 첨부 파일을 추출하려고 노력했다. 그 후 어떤 디렉터 파일을 저장하기 위해 파일 스트림에 쓸 것이다. 하지만 내 fileAttachment.Content는 항상 null입니다. 전자 메일 주소에서 내 디렉토리를 저장하는 방법은 무엇입니까?왜 스트림을 쓰는 동안 attacment 콘텐츠를 추출하는 것이 항상 null입니까?

public static void ExtractAttachment(string targetDir) 
{ 

    SearchFilter.IsEqualTo ffrom = new SearchFilter.IsEqualTo(EmailMessageSchema.From, "[email protected]"); 
    SearchFilter.ContainsSubstring fsubject = new SearchFilter.ContainsSubstring(ItemSchema.Subject, "yyyyyyyy", ContainmentMode.Substring, ComparisonMode.IgnoreCaseAndNonSpacingCharacters); 
    SearchFilter.IsEqualTo fattach = new SearchFilter.IsEqualTo(EmailMessageSchema.HasAttachments, true); 
    SearchFilter.IsGreaterThanOrEqualTo fdate = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, DateTime.Now.Date); 
    SearchFilter.SearchFilterCollection mfilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, fdate, ffrom, fattach, fsubject); 

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); 
    service.Credentials = new WebCredentials(ConfigurationManager.AppSettings["Username"], ConfigurationManager.AppSettings["Password"]); 
    service.Url = new Uri(ConfigurationManager.AppSettings["ExchangeService"]); 
    ItemView view = new ItemView(24); 
    view.PropertySet = new PropertySet(ItemSchema.DateTimeReceived, ItemSchema.Subject, EmailMessageSchema.HasAttachments, EmailMessageSchema.From); 
    view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending); 
    view.Traversal = ItemTraversal.Shallow; 
    FindItemsResults<Item> searchitem = service.FindItems(WellKnownFolderName.Inbox, mfilter, view); 
    if (searchitem.TotalCount > 0) 
    { 
     for (int i = 0; i < searchitem.Items.Count; i++) 
     { 
      Console.WriteLine("loop is working"); 

      searchitem.Items[i].Load(PropertySet.FirstClassProperties); 

      foreach (Attachment part in searchitem.Items[i].Attachments) 
      { 
       if (part is FileAttachment && string.IsNullOrEmpty(part.Name) == false && Path.GetExtension(part.Name).Equals(".txt", StringComparison.InvariantCultureIgnoreCase)) 
       { 

        using (MemoryStream ms = new MemoryStream()) 
        { 
         FileAttachment fileAttachment = part as FileAttachment; 
         fileAttachment.Load(ms); 
         ms.Position = 0; 

         string fname = Path.Combine(targetDir, fileAttachment.Name); 
         string fdir = Path.GetDirectoryName(fname); 
         if (!Directory.Exists(fdir)) Directory.CreateDirectory(fdir); 

         using (FileStream fstream = new FileStream(fname, FileMode.Create)) 
         { 
          fstream.Write(fileAttachment.Content, 0, fileAttachment.Content.Length); 
         } 

        } 
       } 
       break; 
      } 
     } 
    } 

} 

답변

1

fstream.Write (fileAttachment.Content, 0, fileAttachment.Content.Length)를 교환하십시오; with ms.CopyTo (fstream, 0, ms.Length);

제대로 작동합니다.

fileAttachment.Load (ms) 줄에서 fileAttachment.Content를 읽은 것처럼 보이므로 나머지는 스트림이 eof이므로 null입니다.