Delphi中怎样监视POP3信箱

东方小小吴

东方小小吴

2016-01-29 14:02

Delphi中怎样监视POP3信箱,Delphi中怎样监视POP3信箱
 

---- 本 文 将 向 大 家 介 绍 怎 样 编 写自 己 的 信 箱 监 视 程 序, 程 序 将 直 接 调 用WinSock 函 数 来 进 行网 络 通 信。 除 了 具 备WinSock 编 程 知 识 之 外, 还 必 须 了 解POP3 协 议。 下 面 是 对POP3 的 一 个 粗 略 的 介 绍, 读 者 可 以 参 看RFC 1225 更 为 详 细 地 了 解 该 协 议。 一、 关 于POP3 协 议 
  POP3 服 务 器 程 序 通 常 在TCP 端 口110 提 供 服 务。 当 客 户 想 要 使 用 服 务 时, 它 便 与 服 务 器 建 立 一个TCP 连 接。 一 旦 连 接 建 立,POP3 服 务 器 就 向 客 户 发 送 一 条欢 迎 消 息。 然 后 客 户 开 始 给 服 务 器 发 送 命 令, 服 务 器 则 给出 相 应 的 回 答。POP3 的 命 令 由 一 个 关 键 词 或 者 关 键 词 加 参数 组 成。 每 个 命 令 以 回 车 换 行(0xD0xA) 作 为 结 束 标 志。 对于 所 有 的 命 令,POP3 服 务 器 都 会 提 供 一 个 回 答。 服 务 器 的回 答 由 一 个 状 态 标 志 加 一 些 附 加 信 息 组 成。 目 前 使 用 的两 个 标 志 是“ +OK” 和“ -ERR”, 分 别 表 示 客 户 的 命 令 是 否合 法。 所 有 的 回 答 也 是 以 回 车 换 行 结 束。   与 本 文 讨 论 的 话 题 相 关 的 四 个POP3 命 令 是USER、PASS、LIST 和QUIT。 

USER 命 令 
格 式USER name 

  其 中name 是 用 户 在 该POP3 服 务器 上 的 用 户 标 识。 客 户 应 该 在 接 到 服 务 器 的 欢 迎 消 息 后或 者 在 上 一 个 USER 或 者PASS 失 败 之 后 可 以 发 送 此 命 令。 

PASS 命 令 
格 式PASS string 

  其 中string 为 该 用 户 的 密 码。客 户 在 发 送 了USER 命 令 并 且 收 到 了 +OK 的 回 答 之 后 方 可 发送 此 命 令。 如 果 用 户 名 和 密 码 都 正 确, 服 务 器 回 答 +OK,否 则 -ERR。 

LIST 命 令 
格 式LIST 

  如 果 该 用 户 有 邮 件, 则LIST 命令 会 回 答 +OK, 并 列 出 所 有 邮 件 的 标 识 符 和 大 小( 每 个 邮件 一 行), 最 后 一 个 仅 包 含 一 个 句 点 的 行(0xD0xA0x2E) 表 示整 个 回 答 的 结 束。 如 果 该 用 户 没 有 邮 件, 有 些 服 务 器 会 返回 -ERR, 有 些 在 可 能 返 回 一 个 +OK 和 一 个 仅 包 含 一 个 句 点的 行。 当 然, 客 户 必 须 在PASS 命 令 通 过 之 后 客 户 程 序 才 能给 服 务 器 发 送LIST 命 令。 

QUIT 命 令 

  从POP3 服 务 器 上 退 出 登 录。 

二、 实 现 相 关 函 数 
  接 下 来 我 们 按 照POP3 协 议 所 定 义的 通 信 规 则 来 实 现 一 个 名 叫POP3CheckMail 的 函 数, 只 要 调 用此 函 数, 我 们 就 可 以 检 测 信 箱 了。 
  下 面 的 代 码 是 用 与Delphi 4 兼 容的Pascal 语 言 实 现 的, 我 们 必 须 包 含WinSock 单 元, 并 且 在 调用 下 列 函 数 之 前 初 始 化 好WinSock 动 态 连 接 库。 初 始 化WinSock 动 态 连 接 库 的 代 码 如 下: 

  if WSAStartup( $002, wsadata)<0 then Halt; 

  POP3CheckMail 的 原 型 如 下: 

  function POP3CheckMail(Email,Password:String;var MailList:TStringList;var ErrorMsg:String):Bool; 

  参 数 说 明: 

  Email 和Password 分 别 为 用 户 的email 信 箱 名 和 口 令。 

  变 量 参 数MailList 用 于 返 回 邮件 的 标 识 和 大 小,MailList.Count 表 示 邮 件 的 封 数。 

  变 量 参 数ErrorMsg 返 回 出 错 消息。 

  以 下 是POP3CheckMail 及 其 它 所 用到 的 函 数 的 实 现 代 码。 

Connect_Server 函 数 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/)

  功 能: 与 指 定 的 主 机 建 立 一个TCP 连 接, 返 回 一 个Socket 描 述 符。 参 数host 指 定 主 机 的 名字,Port 指 定 端 口 号。 

function Connect_Server(host:string;Port:integer):integer; 

var i:integer; 

  p:^LongInt; 

  phe:pHostEnt; 

  sin:sockaddr_in; 

begin 

sin.sin_family:=AF_INET; 

sin.sin_port:=htons(Port); 

//Get the IP for host, allowing for dotted decimal 

phe:=gethostbyname(pchar(host)); 

if phe<nil 

then begin 

   p:=Pointer(phe^.h_addr_list^); 

   sin.sin_addr.s_addr:=p^; 

   end 

else begin 

   i:=inet_addr(PChar(Host)); 

   if i< -1 then sin.sin_addr.S_addr:=i 

   end; 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/)

//create a socket 

展开更多 50%)
分享

猜你喜欢

Delphi中怎样监视POP3信箱

Delphi
Delphi中怎样监视POP3信箱

C# Builder实现POP3信箱的监视

编程语言 网络编程
C# Builder实现POP3信箱的监视

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

POP3/SMTP开关如何开启_QQ邮箱里的POP3/SMTP什么开启

电脑入门
POP3/SMTP开关如何开启_QQ邮箱里的POP3/SMTP什么开启

怎样接收电子邮件(POP3协议简介)

编程语言 网络编程
怎样接收电子邮件(POP3协议简介)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

pop3邮件收取一例

PHP
pop3邮件收取一例

Foxmail如何设置POP3邮箱

电脑网络
Foxmail如何设置POP3邮箱

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Delphi快速入门(五)

Delphi快速入门(五)

Delphi图形图像编程(二)

Delphi图形图像编程(二)
下拉加载更多内容 ↓