Delphi中怎样监视POP3信箱

2016-01-29 14:02 0 1 收藏

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

【 tulaoshi.com - Delphi 】

 

---- 本 文 将 向 大 家 介 绍 怎 样 编 写自 己 的 信 箱 监 视 程 序, 程 序 将 直 接 调 用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 信 箱 名 和 口 令。 

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

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

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

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

Connect_Server 函 数 

  功 能: 与 指 定 的 主 机 建 立 一个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; 

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

//create a socket 

来源:https://www.tulaoshi.com/n/20160129/1492320.html

延伸阅读
谷歌Gmail邮箱pop3/imap开启图文教程   1、登录您的Gmail,点击右上角的齿轮图标,选择设置。 2、,进入设置页面,并选择转发和POP/IMAP设置项。未开启POP服务会显示状态:POP已禁用。从对所有邮件启用POP和仅从现在起收到的邮件启用POP中任选一项。 对所有邮件启用POP表示将通过POP收取您的Gmail邮箱中所有邮件。 ...
本文通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理。 首先我向大家介绍邮件接收的基本原理: 一开始便是客户端与服务器的连接。不过,在客户端连接到服务器之前,注意把端口设为POP3协议默认的110号。 客户端连接服务器成功后,服...
//希望通过这篇文章,你可以用C#写出自己的Email客户端程序 This is a follow up to my SMTP example that shows how to access your POP3 server. This program connects and logs on to your POP3 server, and checks to see how many new messages you have. The instantiation of the POP is in Main() like this: POP pop = new POP(...
标签: 电脑入门
一直以来,QQ邮箱的所有用户都可免费享受POP3和SMTP服务。有使用邮件客户端习惯的网友,或者当您在受到网络限制不能登录WEB的情况下,同样可以通过POP3/SMTP功能来使用QQ邮箱。 有些网友可能还对QQ邮箱的POP3/SMTP相关设置不熟悉,今天我们就一起来了解一下。 用POP3/SMTP服务收发QQ邮件 请进入邮箱“设置”,在“帐...
  一: 概述  本文旨在介绍如何使用开放源软件Procmail和Qpopper来配置一台可供大量用户使用的POP3服务器,重点在于如何保持最佳的服务器性能。  二: 步骤  软件环境为RedHat Linux 7.1  1. 下载最新版的Procmail和Qpopper  Procmail 最新版本现在是3.21 可从 http://www.procmail.org/procmail-3.21.tar.gz...