第 十 三 章 使 用 PO P 控 件
C+
- Bu i ld e r 3 从 N e t M a n a g e 公 司 引 进 了 PO P 控 件 用 于 从 支 持 PO P 3 协 议 的 服务 器 包 括 运 行 UN IX 的 主 机 检 索 邮 件 PO P 控 件 支 持 身 份 验 证 登 录 能 够 检索 用 户 邮 箱 信 息 如 邮 箱 中 有 几 封 信 等 PO P 控 件 还 能 够 直 接 在 服 务 器 上 删 除邮 件
1 3. 1 PO P 控 件 的 特 性
A tta c h F ile P a th 特 性
声 明 p ro p e r ty A tta c h F ile P a th : s tr in g ;
这 个 特 性 用 于 指 定 存 放 附 件 的 路 径 如 果 设 为 空 表 示 是 当 前 目 录
B y te s R ecv d 特 性
声 明 prope r ty B y te s R e c vd: long in t;
这 个 特 性 返 回 已 接 收 了 多 少 个 字 节 与 B y te s T o ta l特 性 配 合 使 用 可 以 显 示 传输 的 进 度
B y te s Tota l 特 性
声 明 prope r ty B y te s T o ta l : long in t;
这 个 特 性 返 回 本 次 传 输 总 共 有 多 少 个 字 节
C o n n ecte d 特 性
声 明 prope r ty C onne c te d : boo le a n ;
如 果 已 经 与 PO P3 服 务 器 连 接 这 个 特 性 就 返 回 T ru e 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t∗ Se n d e r )
{
if ( N M P O P 31-> C o n n e c te d != true )
{
N M P O P 31-> P ort = 110;
N M P O P 31-> U s e r ID = " E d" ;
N M P O P 31-> P a s s w o rd = " S m i th " ; N M P O P 31-> C on n e c t( ) ;
L a be l 1 0-> C a p t ion = " # of M e ss a g e s : " + In t T o S tr ( N M P O P 31-> M a i l C ou n t) ;
}
}
D e le te O n R e a d 特 性
声 明 prope r ty D e le te O n R e a d : boo le a n ;
如 果 这 个 特 性 设 为 T ru e 当 邮 件 被 下 载 后 就 从 服 务 器 中 删 掉
H o s t 特 性
声 明 prope r ty H o s t: S tr ing;
这 个 特 性 用 于 指 定 PO P 3 服 务 器 的 主 机 名 或 IP 地 址 如 206 .155 .164 .2 0
Lo c a l I P 特 性
声 明 prope r ty L o c a l IP : S tr ing ;
这 个 特 性 返 回 客 户 计 算 机 的 IP 地 址 ( 点 分 法 ) 如 果 计 算 机 有 多 个 IP 地 址 这个 特 性 返 回 其 中 第 一 个 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : B u tton9C l ic k ( TO b je c t ∗ Se n d e r )
{
S h o w M e s sag e(" Y o u r lo c a l IP A d d ress is " + N M P O P 3 1 -> L o cal IP ) ;
}
M a il C o u n t 特 性
声 明 p ro p e r ty M a ilC o u n t: S m a llin t;
这 个 只 读 的 特 性 返 回 用 户 邮 箱 中 有 几 封 信 注 意 此 特 性 只 有 在 通 过 了 身份 验 证 之 后 才 是 有 效 的 此 前 访 问 这 个 特 性 是 非 法 的
M a il M e s s a g e 特 性
声 明 prope r ty M a il M e s s a ge : T M a il M e s s a ge ;
调 用 了 G e tM a ilM e s s a g e 函 数 后 这 个 特 性 返 回 检 索 到 的 邮 件 信 息
T M ail M es s a g e 是 一 个 类 其 中
-
A
tta c h m e n ts 这 是 个 T S trin g L is t对 象 包 含 接 收 到 的 附 件 名 称
-
Bo
d y 这 是 个 T S trin g L is t对 象 包 含 接 收 到 的 邮 件 正 文
-
F ro
m 这 是 发 件 人 的 E - M a i l地 址
-
H
ead 这 是 个 T S trin g L is t对 象 包 含 接 收 到 的 邮 件 头 标
-
M e ssa g e Id 这 是 邮 件 的 识 别 号 如
3587A 72E . 8928F 0D 5@ pub lic .e a s t.c n .n e t
- S
ub je c t 这 是 邮 件 的 主 题程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 3 C lic k ( T O b je c t ∗ Se n d e r )
{
N M P O P 3 1 -> G e t M a ilM e s sa g e ( S tr T o In t( E d it5 -> T e x t) ) ; E d i t 6 -> T e xt = N M P O P 31-> M a i l M e s sa ge -> F rom ;
E d i t 7 -> T e xt = N M P O P 31-> M a i l M e s sa ge -> S u b je c t ;
E d i t 9 -> T e xt = N M P O P 31-> M a i l M e s sa ge -> M e s s a g e ID ;
M e m o2-> L in e s -> A s s ign ( N M P O P 31-> M a i l M e s sa ge -> H e a d ) ; M e m o1-> L in e s -> A s s ign ( N M P O P 31-> M a i l M e s sa ge -> B ody ) ; if ( N M P O P 3 1 -> M a ilM e s s a g e -> A tta c h m e n ts -> T e x t != " " )
S how M e s sa g e (" A t ta c h m e n ts \ n" + N M P O P 31-> M a i l M e s sa ge -> A t ta c h m e n ts -> T e x t) ;
}
Pa s sw o r d 特 性
声 明 prope r ty P a s s w ord: W ide S tr ing;
这 个 特 性 用 于 设 置 登 录 到 PO P 3 服 务 器 时 的 口 令
Po r t 特 性
声 明 prope r ty P o r t: L ong in t;
这 个 特 性 用 于 指 定 要 连 接 的 PO P 3 服 务 器 的 端 口 号 默 认 是 110
R e m o te I P 特 性
声 明 prope r ty R e m o te IP : s tr ing ;
这 个 特 性 返 回 PO P3 服 务 器 的 IP 地 址 ( 点 分 法 ) 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : B u tton9C l ic k ( TO b je c t ∗ Se n d e r )
{
S how M e s sa g e (" C urre n tly c o n n e c te d to : " + N M P O P 31-> R e m o te IP ) ;
}
R e p o r t L e v e l 特 性
声 明 prope r ty R e po r t L e ve l : in te ge r ;
这 个 特 性 用 于 指 定 状 态 信 息 的 详 细 程 度 可 以 设 为 以 下 值 S ta tu s _N one S ta tu s _In form a t iona l S tatu s _ B as ic S ta tus _R ou tin e s S ta tu s _D e bug S ta tu s _ T ra c e
S ta tu s 特 性
声 明 prope r ty S ta tus : S tr ing;
这 个 特 性 返 回 当 前 的 状 态 信 息
Su m m a r y 特 性
声 明 prope r ty S u m m a r y : T S u m m a r y ;
调 用 了 G e t S u m m a r y 函 数 后 这 个 特 性 包 含 了 邮 件 的 统 计 信 息 TS u m m a r y 是一 个 类 其 中
-
B y
te s 这 是 邮 件 的 字 节 数
-
F ro
m 这 是 发 件 人 的 E - M a i l地 址
-
M e
ssa g e Id 这 是 邮 件 的 编 号 如 3587A 72E . 8928F 0 D 5 @ pub lic . e a s t. c n . n e t
-
S
ub je c t 这 是 邮 件 的 主 题程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : B u tton6C l ic k ( TO b je c t ∗ Se n d e r )
{
N M P O P 31-> G e t S u m m a ry ( S tr T oIn t( E d it 5 -> T e x t) ) ; E d i t 6 -> T e xt = N M P O P 31-> S um m a ry -> F rom ;
E d i t 7 -> T e xt = N M P O P 31-> S um m a ry -> S ubje c t ;
E d i t 8 -> T e x t = In t T o S tr(N M P O P 3 1 -> S u m m a r y -> B y te s ); E d i t 9 -> T e xt = N M P O P 31-> S um m a ry -> M e s s a g e ID ;
}
T im e o u t 特 性
声 明 prope r ty T im e O u t: In te ge r ;
这 个 特 性 用 于 指 定 一 个 毫 秒 数 如 果 超 过 规 定 的 时 间 S o ck et没 有 响 应 就 触 发异 常
Tra n s a c tio n R e p ly 特 性
声 明 prope r ty T ra n s a c tionR e p ly : S tr ing;
这 个 特 性 返 回 上 一 次 命 令 的 执 行 结 果 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t ∗ Se n d e r )
{
N M P O P 31-> T im e O ut = 20 00 0;
N M P O P 31-> C on n e c t( ) ;
S how M e s sa g e ( N M P O P3 1-> T ra nsa c t io nR e p ly ) ;
}
U s erI d 特 性
声 明 prope r ty U s e r Id : W ide S tr ing;
这 个 特 性 用 于 设 置 用 户 名 与 Pa ss w o rd 特 性 一 起 用 于 身 份 验 证
1 3.2 PO P 控 件 的 方 法
Ab o r t 函 数
声 明 proc e dure A bort;
这 个 函 数 用 于 中 止 此 次 发 送 并 且 断 开 与 PO P3 服 务 器 的 连 接
C o n n ec t 函 数
声 明 proc e dure C o n n e c t;
这 个 函 数 很 重 要 用 于 登 录 到 PO P 3 服 务 器 H o s t Po r t U s e rID 和 Pa ss w o rd
特 性 必 须 事 先 已 设 置 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t ∗ Se n d e r )
{
N M P O P 3 1 -> A tta c h F ile P a th = " ." ;
N M P O P 3 1 -> D eleteO n R ea d = fa ls e; N M P O P 31-> T im e O ut = 20 00 0;
N M P O P 31-> H os t = " m a i l .m y s e rv e r .c om " ; N M P O P 31-> P ort = 110;
NM P O P 3 1 -> U s e r ID = " E d " ;
N M P O P 31-> P a s s w o rd = " S m i th " ; N M P O P 31-> C on n e c t( ) ;
L a be l 1 0-> C a p t ion = " # o f M e ss a g e s : " + In t T oS tr ( N M P O P 31 -> M a i l C ou n t) ;
}
D e le te M a ilM e s s a g e 函 数
声 明 proc e dure D e le te M a i l M e s s a ge ( M a il N u m be r : in te ge r ) ;
这 个 函 数 从 PO P3 服 务 器 中 删 除 一 个 邮 件 M a il N um be r 参 数 指 定 要 删 除 的 邮
件 的 编 号 注 意 调 用 D e le te M a ilM e s s a g e 函 数 实 际 上 并 没 有 真 正 删 除 邮 件除 非 断 开 了 连 接 在 断 开 连 接 之 前 您 可 以 调 用 R e s e t函 数 恢 复 被 删 除 的 邮件
D is c o n n ec t 函 数
声 明 proc e dure D is c onne c t;
这 个 函 数 断 开 与 PO P 3 服 务 器 的 连 接
G e t M a il M e s s ag e 函 数
声 明 proc e dure G e t M a il M e s s a ge ( M a il N u m be r : in te ge r ) ;
这 个 函 数 用 于 从 PO P 3 服 务 器 下 载 一 个 邮 件 M a il N um be r 参 数 指 定 邮 件 的 编号
G e t S u m m a r y 函 数
声 明 proc e dure G e t S um m a r y ( M a il N u m b e r : in te ge r ) ;
这 个 函 数 将 返 回 一 个 邮 件 的 统 计 信 息 M a il N um be r参 数 指 定 邮 件 的 编 号
L is t 函 数
声 明 proc e dure L is t;
这 个 函 数 从 PO P3 服 务 器 检 索 一 个 列 表 该 列 表 中 包 含 每 一 个 邮 件 的 编 号 和字 节 数 列 表 中 的 每 一 个 项 将 触 发 一 次 O n L is t事 件
R e s e t 函 数
声 明 proc e dure R e s e t;
这 个 函 数 将 恢 复 服 务 器 中 所 有 标 记 为 已 删 除 的 邮 件
1 3.3 PO P 控 件 的 事 件
PO P 控 件 的 事 件 往 往 是 与 调 用 某 个 方 法 相 关 联 的 如 果 事 件 被 触 发 通 常 表示 调 用 成 功 您 可 以 在 处 理 事 件 的 句 柄 中 得 到 PO P 服 务 器 的 返 回 信 息
O n A u th e n tic a tio n F a ile d 事 件
声 明 prope r ty O n A u th e n tic a t ionF a i le d : T H a nd le r E v e n t;
其 中 T H an d ler E v en t是 这 样 声 明 的
T H a nd le r E v e n t = P roc e dure ( va r ha nd le d : boo le a n ) o f O b je c t ;
当 登 录 到 PO P3 服 务 器 时 如 果 没 有 事 先 给 出 用 户 名 和 口 令 或 者 用 户 名 和口 令 是 非 法 的 将 会 触 发 这 个 事 件 更 正 了 错 误 后 如 果 把 H a nd le d 参 数 设为 T ru e 将 再 登 录 一 遍
O n A u th en tica tio n N eed e d 事 件
声 明 prope r ty O n A u th e n tic a t ionN e e d e d : T H a nd le r E v e n t;
如 果 某 个 操 作 需 要 验 证 用 户 的 身 份 就 会 触 发 这 个 事 件
O n C o n n ec t 事 件
声 明 prope r ty O n C onne c t: T N o tif y E v e n t;
当 客 户 已 经 成 功 地 连 接 到 PO P 3 服 务 器 时 将 触 发 这 个 事 件
O n C o n n ectio n F a ile d 事 件
声 明 prope r ty O n C onne c tionF a ile d: T N o tify E ve n t;
当 客 户 试 图 登 录 到 PO P 3 服 务 器 失 败 时 将 触 发 这 个 事 件
O n C o n n e c tio n R e q u ire d 事 件
声 明 prope r ty O n C onne c tionR e q u ire d : T H a nd le r E v e n t;
PO P 控 件 的 大 部 分 函 数 只 能 在 已 连 接 到 PO P3 服 务 器 上 时 才 是 有 意 义 的 如果 调 用 函 数 时 没 有 连 接 到 PO P 3 服 务 器 将 触 发 这 个 事 件 在 处 理 这 个 事 件的 句 柄 中 您 应 当 调 用 C onne c t 函 数 连 接 PO P3 服 务 器 然 后 把 H a nd le d 参 数设 为 T ru e 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M P O P 31C o n n e c t io nR e q u ire d( b ool & h a nd le d )
{
A n s i S tr ing B o xC a p t ion = " C o nne c t io n R e q u ire d " ;
A n s i S tr ing B o xM s g = " C on ne c t ion R e qu ire d. C o nne c t? " ;
if ( M e s s a ge B o x ( 0, & B ox M sg [ 1 ], & B ox C a p tio n [ 1 ], M B _Y E S N O + M B _ IC ONE XC L A M A T IO N ) = = IDYE S )
{
ha n d le d = true ;
}
}
O n D is c o nne c t 事 件
声 明 prope r ty O n D is c onne c t: T N o tif y E v e n t;
当 客 户 断 开 与 PO P3 服 务 器 的 连 接 时 将 触 发 这 个 事 件 注 意 在 处 理 这 个 事件 的 句 柄 中 如 果 需 要 访 问 VC L 元 件 的 话 最 好 先 判 断 VC L 元 件 是 否 存 在
O n F a ilu re 事 件
声 明 prope r ty O n F a ilure : T N o tif y E v e n t;
如 果 删 除 邮 件 时 出 错 将 触 发 这 个 事 件
O n I n v a lid H o s t 事 件
声 明 prope r ty O n Inva l idH os t: T H a nd le r E v e n t;
当 H o s t特 性 所 指 定 的 主 机 名 是 非 法 的 就 触 发 这 个 事 件
O n L is t 事 件
声 明 prope r ty O n L is t : T L is t E ve n t;
其 中 TL is t Ev e n t是 这 样 声 明 的
T L is t E v e n t = pro c e dure ( M s g, S iz e : in te ge r ) of ob je c t ;
当 程 序 调 用 L is t函 数 时 每 检 索 到 一 个 项 就 会 触 发 一 次 O n L is t 事 件 M s g 参数 是 邮 件 的 编 号 S iz e 参 数 是 邮 件 的 字 节 数 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 -> N M P O P 3 1 L is t( in t M s g , S iz e )
{
M e m o 3 -> L in e s -> A d d ( In t T o S tr(M s g )+ " / /" + In t T o S tr(S iz e ));
}
O n P a ck et R e c v d 事 件
声 明 prope r ty O n P a c k e t R e c vd: T N o tif y E ve n t ;
每 收 到 一 个 数 据 块 就 会 触 发 这 个 事 件 在 处 理 这 个 事 件 的 句 柄 中 您 可 以用 B y te s T o ta l特 性 和 B y te s R e c v d 特 性 显 示 接 收 的 进 度
O n R e s e t 事 件
声 明 prope r ty O n R e s e t : T N o tif y E ve n t;
当 程 序 调 用 R e s e t函 数 恢 复 了 标 记 为 已 删 除 的 邮 件 后 将 触 发 这 个 事 件
O n R e triv e S ta r t 事 件
声 明 p ro p e r ty O n R e triv e S ta r t : T N o tif y E v e n t ;
当 程 序 调 用 G e tM a ilM e s s a g e 函 数 或 G e t S u m m a r y 函 数 检 索 数 据 时 将 触 发 这 个事 件 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::N M P O P 3 1 R e tr iv e S ta r t( T O b je c t ∗ Se n d e r )
{
F o rm 1-> C urs o r = c r H o u r G la ss ;
S tatu s B a r 1 -> S im p le T e x t = " R etriev al s tart" ;
}
O n R e tr iv e E n d 事 件
声 明 prope r ty O n R e tr iv e E nd: T N o tif y E ve n t;
当 程 序 调 用 G e tM a ilM e s s a g e 函 数 或 G e t S u m m a r y 函 数 已 成 功 地 检 索 到 数 据 就触 发 这 个 事 件 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M P O P 31R e tr iv e E n d ( T O b je c t ∗ Se n d e r )
{
F o rm 1 -> C u rs o r = c r D e fa u l t ;
S tatu s B a r 1 -> S im p le T e x t = " R etriev al end " ;
}