Delphi中怎样通过pop3读取邮件中的内

发布网友 发布时间:2022-04-06 06:48

我来回答

1个回答

热心网友 时间:2022-04-06 08:17

delphi的Indy控件包中的TIdPOP3接收邮件功能,由于有些邮件服务器必须支持加密方式,所以,本测试直接使用的是加密方式(SSL),如果不需要加密方式,只需要更改服务端口以及断开POP3控件的IOHandler即可。

使用中应该先连接服务器,然后在进行读取或者删除处理,之后要断开服务器。
程序代码如下:

{新的POP3邮件接收函数包,使用POP3的协议
对于没有加密(SLL)的端口为:110
如果使用SSL加密协议,端口号:995

函数包提供 连接,读取,删除,断开 四个函数
在使用前一定要先连接,连接好以后才可以进行读取,删除等操作,最后需要断开

直接使用加密的协议SSL.}unit uPOP3_Email;interfaceuses
IdPOP3,IdMessage,IdBaseComponent,SysUtils,
IdAttachment, Classes, IdSSLOpenSSL,
IdText,Windows,IdExplicitTLSClientServerBase;//连接POP3服务器函数//入口参数:// Host : POP3服务器的地址,采用SLL加密,端口默认为995//Account: 邮件账户(邮件地址)
//PSW : 账户密码
//出口参数:连接成功,返回True,失败返回Falsefunction ConnectPOP3Server(Host,Account,PSW : string; var ErrMsg : string) : Boolean;//断开POP3邮件服务器procere DisconnectPOP3Server;//取得邮件数量,返回当前邮件的数量function Mail_GetCount : Integer;//删除邮件//入口参数:// Index : 邮件索引号//出口参数:成功True,失败Falsefunction Mail_Delete(Index : integer) : Boolean;{取得邮件标题信息函数
入口参数:
Index      : 对应的邮件索引号,从1开始
EmailTime  : 邮件发送时间
EmailSubject: 邮件标题
EmailBody  : 邮件的正式内容
EmailSendAddress : 发送者地址
ErrMsg : 返回错误信息
返回参数:
True : 表示返回成功,False : 表示返回失败}function Mail_GetEmailInfo(Index : integer; var EmailTime : TDateTime; var EmailSubject, EmailBody, EmailSendAddress, EmailAttachFileName, ErrMsg : string) : Boolean;var
POP3 : TIdPOP3;
OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
IdMessage : TIdMessage;
ConnectOK : Boolean;implementationfunction ConnectPOP3Server(Host,Account,PSW : string; var ErrMsg : string) : Boolean;begin
if POP3.Connected then
POP3.Disconnect;
POP3.Host := Host;
POP3.Username := Account;
POP3.Password := PSW;  try
POP3.Connect;    if POP3.Connected then Result := True;  except on E: Exception do
begin
Result := False;
ErrMsg := E.Message;    end;  end;
ConnectOK := Result;end;//断开POP3邮件服务器procere DisconnectPOP3Server;begin
POP3.Disconnect;
ConnectOK := False;end;//取得邮件数量,返回当前邮件的数量function Mail_GetCountA : Integer;begin
Result := 0;  if not ConnectOK then Exit;  try
Result := POP3.CheckMessages;  //取得邮件数量
except on E: Exception do
Result := -10;   //出现错误
end;end;//删除邮件//入口参数:// Index : 邮件索引号//出口参数:成功True,失败Falsefunction Mail_Delete(Index : integer) : Boolean;begin
Result := False;  if not ConnectOK then Exit;  try
POP3.Delete(Index);
Result := True;  except on E: Exception do
end;end;{取得邮件标题信息函数
入口参数:
Index      : 对应的邮件索引号,从1开始
EmailTime  : 邮件发送时间
EmailSubject: 邮件标题
EmailBody  : 邮件的正式内容
EmailSendAddress : 发送者地址
EmailAttachFileName : 附件文件名称,附件直接保存在当前目录下的TMP目录中
ErrMsg : 返回错误信息
返回参数:
True : 表示返回成功,False : 表示返回失败}function Mail_GetEmailInfo(Index : integer; var EmailTime : TDateTime; var EmailSubject, EmailBody, EmailSendAddress, EmailAttachFileName, ErrMsg : string) : Boolean;var
Count,i : integer;
FileName : string;begin
Result := False;  if not ConnectOK then Exit;  try
IdMessage.Clear;    //读取内容
EmailBody := '';    if POP3.Retrieve(Index,IdMessage) then
begin
EmailSubject := IdMessage.Subject;     //标题
EmailSendAddress := IdMessage.Sender.Text;   //发送邮件地址
EmailTime := IdMessage.Date;           //邮件发送时间
EmailSendAddress := IdMessage.From.Address;        //取得当前邮件的附件数量
Count := IdMessage.MessageParts.Count;        if Count = 0 then //说明没有附件
begin
EmailBody := IdMessage.Body.Text         end
else     //说明有附件
begin
for i := 0 to Count- 1 do
begin
if (IdMessage.MessageParts.Items[i] is TidText) then
begin
EmailBody := TidText(IdMessage.MessageParts.Items[1]).Body.Text;                end;               if (IdMessage.MessageParts.Items[i] is TIdAttachment) then
begin
EmailAttachFileName := TIdAttachment(IdMessage.MessageParts.Items[i]).FileName;  //附件文件名称
FileName := ExtractFilePath(ParamStr(0));
ForceDirectories(FileName + '\TMP');
FileName := FileName + '\TMP\' + EmailAttachFileName;
TIdAttachment(IdMessage.MessageParts.Items[i]).SaveToFile(FileName); //保存附件
Continue;                end;             end;         end;
Result := True;      end;  except on E: Exception do
end;end;initialization
POP3 := TIdPOP3.Create(nil);
OpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
OpenSSLHandler.SSLOptions.Method := sslvTLSv1; //sslvSSLv23 ;//sslvSSLv3;
POP3.IOHandler := OpenSSLHandler;
POP3.Port := 995;  //加密的端口号
POP3.UseTLS := utUseImplicitTLS;
POP3.ReadTimeout := 1000 * 60 * 5; //5分钟
POP3.ConnectTimeout := 1000 * 60 * 5; //连接超时5分钟
IdMessage := TIdMessage.Create(nil);
ConnectOK := False;finalization
IdMessage.Free;
POP3.Free;
OpenSSLHandler.Free;end.

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com