现在用indy收邮件,邮件是可以收了,但是不知道怎么样最好的保存方法,也不知道foxmail怎么保存的,也 不知道怎么样把他保存到数据库中,感觉他的数据库类型比较麻烦,附件的话是不是一般都不存到数据库中的?
请高手指教

解决方案 »

  1.   

    //****************************收取指定的邮件************************************
    function Trec_mail.Get_Receive(lett_index: OleVariant): OleVariant;
    var
      nmm_strUidl,nmm_strAttachFileName:string;
      nmm_strDirName,nmm_strUrlPath:string;
      nmm_strAttachFileUrl,nmm_strAttachFilePath:widestring;
      nmm_index:integer;
      nmm_strbody:widestring;
      nmm_strdecode:string;
    begin
    try
        nmg_intLetterIndex :=strtoint(lett_index); //全局变量邮件id
        nmm_strUidl := trim(get_uid);
        nmg_msgBody.clear;
        nmg_msgBody.NoDecode := false;
        nmg_msgBody.IsEncoded := true;
        try
           nmg_pop.Retrieve(nmg_intLetterindex,nmg_msgBody);
        except
           result:='';
           exit;
        end;
        nmg_msgHead.clear;
        nmg_msgHead.NoDecode := false;
        nmg_msgHead.IsEncoded := true;
        try
          nmg_pop.RetrieveHeader(nmg_intLetterIndex,nmg_msgHead);
        except
          result:='';
          exit;
        end;
        if nmg_strMailUserDir='' then
           begin
             nmm_strDirName := nmg_strRootDir+nmm_strUidl;
             nmm_strUrlPath := nmg_strRootUrlPath+nmm_strUidl;
           end
        else
           begin
             nmm_strDirName := nmg_strRootDir+nmg_strMailUserDir+'\'+nmm_strUidl;
             nmm_strUrlPath := nmg_strRootUrlPath+nmg_strMailUserDir+'/'+nmm_strUidl;
           end;
        ForceDirectories(nmm_strDirName);
        FormAttachHtm;
        nmg_blnHasAttOut := false;
        //*************************正文的下载***************************************
        try
          if nmg_msgBody.messageparts.Count=0 then nmg_stsContent :=nmg_msgBody.Body
          else begin
             for nmm_index:=0 to pred(nmg_msgBody.messageparts.Count) do
             if nmg_msgBody.MessageParts.Items[nmm_index] is TIdText then nmg_stsContent := TIdText(nmg_msgBody.MessageParts.Items[nmm_index]).Body;
          end;
        except
           result:='';
           exit;
        end;
        if (pos('HTML>',nmg_stsContent.text))or(pos('html>',nmg_stsContent.text))<1 then  nmg_stsContent.text:='<pre>'+nmg_stsContent.text+'</pre>';
        //*************************附件的下载***************************************
        for nmm_index:=0 to pred(nmg_msgBody.messageparts.Count) do
            begin
                if (nmg_msgBody.MessageParts.Items[nmm_index] is TIdAttachment) then
                    begin
                        nmm_strAttachFileName :=DecodeHeader(TIdAttachment(nmg_msgBody.MessageParts.Items[nmm_index]).Filename);
                        nmm_strAttachFileUrl := nmm_strUrlPath;
                        nmm_strdecode:=(tidattachment(nmg_msgBody.MessageParts.Items[nmm_index]).ContentDisposition);
                        if trim(nmm_strdecode)<>'' then
                           begin
                              nmm_strAttachFilePath := nmm_strDirName + '\attachment\'+inttostr(nmm_index);
                              ForceDirectories(nmm_strAttachFilePath);
                              nmm_strAttachFileUrl := nmm_strAttachFileUrl+'/attachment/'+inttostr(nmm_index)+'/'+nmm_strAttachFileName;
                              nmm_strAttachFilePath := nmm_strAttachFilePath+'\'+nmm_strAttachFileName;
                              try
                              if not fileexists(nmm_strAttachFilePath) then
                              tidattachment(nmg_msgBody.MessageParts.Items[nmm_index]).SaveToFile(nmm_strAttachFilePath);
                              except
                              continue;
                              end;
                              nmg_stsAttach.add('<a href="'+ nmm_strAttachFileUrl+'" target=_blank> '+nmm_strAttachFileName+'</a><BR><br>');
                              nmg_blnHasAttOut := true ;
                           end
                        else
                           begin
                              nmm_strAttachFilePath := nmm_strDirName+'\Image\'+inttostr(nmm_index);
                              nmm_strAttachFileUrl := nmm_strAttachFileUrl+'\Image\'+inttostr(nmm_index)+'\'+nmm_strAttachFileName;
                              ForceDirectories(nmm_strAttachFilePath);
                              nmm_strAttachFilePath := nmm_strAttachFilePath+'\'+nmm_strAttachFileName;
                              try
                              if not fileexists(nmm_strAttachFilePath) then
                              tidattachment(nmg_msgBody.MessageParts.Items[nmm_index]).SaveToFile(nmm_strAttachFilePath);
                              except
                              continue;
                              end;
                              //*************************替换图片src****************
                              nmg_Reg.Expression :='src\s*=\s*"?[^\s]*@[^\s]*"?';
                              nmm_strbody :=nmg_stsContent.text;
                              if nmg_reg.Exec(nmm_strbody) then
                                 begin
                                   nmm_strbody:=StringReplace(nmm_strbody,nmg_reg.Match[0],
                                               'src='+nmm_strAttachFileUrl,[rfReplaceAll, rfIgnoreCase]);
                                   nmg_stsContent.Text := nmm_strbody;
                                 end;
                              //****************************************************
                           end;
                    end;
            end;
        if nmg_blnHasAttOut =true then FinishAttachHtm(nmm_strDirName+'\mailatt.htm');
        FinishContentHtm(nmm_strDirName+'\mailcont.htm');
        //******************************收取完成************************************
        nmg_reRunTimeErr:=reSuccess;
        nmg_arrAllErrString[Ord(reGetReceiveErr)] := '收取指定邮件成功.';
    except
        ON E:Exception do
        begin
           Result := '';
           nmg_reRunTimeErr:=reGetReceiveErr;
           nmg_arrAllErrString[Ord(nmg_reRunTimeErr)] := E.Message;
        end;
    end;
      Result := nmg_reRunTimeErr;
    end;
      

  2.   

    to:zuoansuifeng,你代码中的以下几个函数的代码能再给一下啊。
    FormAttachHtm,DecodeHeader,FinishAttachHtm,FinishContentHtm,nmg_stsAttach
    先谢了
      

  3.   

    我自己已经搞定了 
    不过还是谢谢  zuoansuifeng(左岸)散分结贴了