用indy收邮件的问题,怎么样把邮件存放到本地,最好是存到数据库

本文详细介绍了如何使用Delphi中的Indy组件来接收邮件,并将邮件及其附件保存到本地目录的方法。通过解析邮件头部和正文,以及处理附件的下载和存储,实现了邮件的完整保存。
用indy收邮件的问题,怎么样把邮件存放到本地,最好是存到数据库 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiNetwork/html/delphi_20061215094636123.html
现在用indy收邮件,邮件是可以收了,但是不知道怎么样最好的保存方法,也不知道foxmail怎么保存的,也   不知道怎么样把他保存到数据库中,感觉他的数据库类型比较麻烦,附件的话是不是一般都不存到数据库中的?  
  请高手指教

可以实现的     等等写个列子给你看~~

//****************************收取指定的邮件************************************  
  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;  
 

多谢高手,我先研究一下,稍后给分

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

zuoansuifeng好人

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

转载于:https://www.cnblogs.com/delphi2007/archive/2008/10/28/1321002.html

Delphi2010 实现邮件附件发功能 TIdPOP3组件简介 TIdPOP3 是用来接邮件服务器的邮件信息到用户端的一个组件。它实现了RFC 1939协议。 在使用TIdPOP3组件时需设置它的几个成员属性。 Host :指定邮件服务器,一般为pop3邮件服务器的地址,如 pop3.126.com。 Username :用户名,也就是邮箱名,如billanking2002@126.com。 Password :邮箱密码,在进行邮件时组件需要凭密码进行登录。 其它成员属性 Connected:返回它与邮件服务器的连接状态,这true表示已经连接。 CheckMessages:邮件数,如果连接服务器成功,则可以获得服务器端的邮件数。 成员函数 procedure Connect(const ATimeout: Integer = IdTimeoutDefault); 与服务器连接函数。参数为无效连接时等待的毫秒数。 function RetrieveHeader(const MsgNum: Integer; AMsg: TIdMessage): Boolean; 接邮件头信息,它有两个参数,MsgNum表示在接第几个邮件,从1开始,AMsg为邮件消息组件实例。 function Retrieve(const MsgNum: Integer; AMsg: TIdMessage): Boolean; 接邮件主体信息,它与 RetrieveHeader的参数是一样的。接邮件内容将保存在AMsg中。 function Delete(const MsgNum: Integer): Boolean; 删除邮件服务器中第几个邮件。从1开始。 procedure Disconnect; override; 关闭连接。 TIdMessage组件简介 TIdMessage用来支持邮件消息协议,如POP3,SMTP,NNTP等。TIdMessage支持多用途Internet邮件扩展(MIME)协议。 常用的TIdMessage的属性: Subject:邮件主题,这个字符串经过BASE64编码的。所以在使用时需对它进行解码。 MessageParts:这是TIdMessageParts类的一个实例,它用来存储邮件的信息。如邮件内容及附件信息。在进行解析时需要判断它是否为附件或文本,如果为附件时,其文件名是经过BASE64编码的。判断常量分别为TIdText , TIdAttachment。 Body:这是个字符串列表,包含构成该邮件的正文内容。 Form:发送邮件者的地址信息。 Recipients:件人地址信息。 BccList:抄送地址列表。 CharSet:指示邮件信息中使用的字符集。 ContentType:指定MIME媒体数据类型,描述正文中包含的数据,使用户代理决定如何显示数据,常用的有text/html,text/xml。 TIdSMTP组件简介 TIdSMTP是TIdMessageClient派生出的一个简单邮件传输协议和SMTP客户端。 它的主要功能是发送邮件信息。 常用的属性: Host :SMTP邮件服务器的地址,如smtp.126.com。它与上面的POP3地址不一样。 AuthenticationType:服务器认证类型,它有atNone,atLogin两种,即不需要认证和需要凭用户名和密码进行认证。 Username:用户名,这里与TIdPOP3 有点不一样,即它不需要后缀,如billanking2002 Password:邮箱登录密码。如果AuthenticationType设置了atLongin则必须设置密码和用户名。
***************************** * GRG-Mail V1.0 * ***************************** /****************************************************/ 一.帐户设置: 在程序第一次运行时,会提示您设置第一个帐户,请按下例设置 如一个帐户为ppp(帐户名最好用英文),电子信箱为pan@163.com 则有 帐户名:ppp 用户名:null 密码:******* POP服务器地址:pop.163.com SMTP服务器地址:smtp.163.com 用户电子信箱:null@163.com 注意:帐户名与用户名无关,仅是为了便于管理,密码就是你的电子邮箱密码 POP服务器地址,SMTP服务器地址具体设置请登陆邮件服务供应商相关网页 二.邮件 选择一个帐户,确认你的Internet连接,点击邮件的相关按钮及菜单,当 登陆成功后,便开始邮件,并在最后显示新邮件的数目。 三.地址管理 您可以进入地址簿对其进行添加,删除,修改,回复操作,也可 选择邮件将其自动加入地址簿。 四.发邮件 1.选择一个帐户,点击写新邮件的相关按钮和菜单,进入发邮件窗口 写主题,及件人地址(也可从地址簿加入),然后加入附件(最好 不要太大!),单击发送。 /****************************************************/ 其他功能: 1.数据库管理 2.支持浏览器/文本模式阅读 3.附件管理 /****************************************************/ 本人在邮件开发过程中寻找了很多关于邮件发的例子程序,始终没有找到完整合适的delphi代码,好不容易找到一个,不仅错误很多,而且却连基本的邮件功能都没有实现,最后在参考各位网友的作品的基础上重新编写程序,经过近半个月的努力,总算写出了一个能实现完整邮件发的邮件客户端发程序,由于时间仓促,虽然功能不是很多,但基本的功能可以完整地实现,现在网上发布编译好的程序,请各位批评指正,想要学习邮件发的,兄弟可以提供源代码,请发邮件给我 电子邮件:37711201@qq.com /****************************************************/ 2007.1.1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值