需要能够解析从outlook中导出的邮件
如:*.eml(outlook邮件),*.msg(Exchange邮件)用组件做的也可以,非常着急
需要DEMO注:不需要能接发邮件
只要能把*.eml或*.msg解码成:发件人、收件人、抄送人、时间、
标题、邮件内容、附件数、附件标题、附件内容等内容即可!好像delphi的outlook组件可以,不过从没用过:(   

解决方案 »

  1.   

    function GetMsgData(FileName: String; Stream: TMemoryStream): Boolean;
    function GetEmlData(FileName: String; Stream: TMemoryStream): Boolean;implementationfunction GetEmlData(FileName: String; Stream: TMemoryStream): Boolean;
    begin  Stream.Clear;
      try
         Stream.LoadFromFile(FileName);
         result:=True;
      except
         result:=False;
      end;end;function GetMsgData(FileName: String; Stream: TMemoryStream): Boolean;
    var  pvStg:      IStorage;
         pvStm:      IStream;
         stat:       TStatStg;
         dwSize:     Integer;
    const
      StgFlags       =  STGM_READ or STGM_SHARE_EXCLUSIVE;
      StmName        =  '__substg1.0_1000001E';
    begin  // Set default result
      result:=False;  // Open storage file
      if (StgOpenStorage(PWideChar(WideString(FileName)), nil, StgFlags, nil, 0, pvStg) = S_OK) then
      begin
         // Attempt to get the stream
         if (pvStg.OpenStream(PWideChar(WideString(StmName)), nil, StgFlags, 0, pvStm) = S_OK) then
         begin
            // Stat the stream to get the size
            if (pvStm.Stat(stat, STATFLAG_NONAME) = S_OK) then
            begin
               // Clear memory stream
               Stream.Clear;
               Stream.Size:=stat.cbSize;
               // Write contents of stream to memory stream
               result:=(pvStm.Read(Stream.Memory, stat.cbSize, @dwSize) = S_OK);
            end;
            // Release the stream
            pvStm:=nil;
         end;
         // Release the storage interface
         pvStg:=nil;
      end;end;-----
    Example of usagevar
     ms: TMemoryStream;
    begin ms:=TMemoryStream.Create;
     if GetMsgData('c:\mypath\myfile.msg', ms) then 
        MessageBox(0, ms.Memory, nil, MB_OK);
     if GetEmlData('c:\mypath\myfile.eml', ms) then
        MessageBox(0, ms.Memory, nil, MB_OK);end;