51CTO技术论坛_中国领先的IT技术社区's Archiver

皮皮勒 发表于 2006-8-29 01:05

用C++BUILDER实现POP3电子邮件的接收

通过对C++BUILDER的组件设置,我们可以创建一个自己的POP3电子邮件接收程序。 M?r5H)MtP

]/Gi3eXI*S 一、建立一个工程文件
_1R~'`ep9D
'fj.~`W3?r 二、建立一个新的表单,设置它的caption属性为Getmail,在上面放置一个TpageControl控件,单击右键创建三个TabSheet(1,2,3)。在TabSheet1上放置四个Edit(1,2,3,4)控件并清除它们的Text属性及两个Botton(1,2),其中Edit1用以输入POP3服务器的名称;Edit2用以设置访问端口号,我们设置它为110,并将它的Text属性设为110;Edit3用以输入用户名;Edit4用以输入口令。设Botton1的caption为“连接”,Botton2的caption为“断开连接”。在TabSheet2上放置五个Edit(5,6,7,8,9)控件、两个Memo控件和三个Botton(3,4,5),Edit5用来显示邮件的编号;Edit6、Edit7、Edit8和Edit9分别用来显示邮件的发送者、邮件的主题、大小及ID号;Memo1用来显示邮件的正文;Memo2用来显示邮件头;Botton3、Botton4、Botton5的caption属性分别设置为“删除”、“邮件”和“邮件信息”。在TabSheet3上放置两个Botton和一个Memo控件,其中Botton6的caption属性为“邮件列表”;Botton7的caption为“清除列表”;Memo的用途自然为显示邮件列表。在表单的底部放置一个StatusBar控件用以显示工作状态。最后,最重要的是在表单上放置一个NMPOP3控件,在这个程序里,它是我们与POP3服务器通讯的核心。 :[ pW#`Y6v7U/be

g"WG&RK)] 三、编写代码 LdZr"n

tyL!_ gT ],z 为Botton1的OnClick事件编写代码: 8sZ5Ub9m@3JWz
0F3vfm3Zt'e
   NMPOP31-〉AttachFilePath = ″.″;  //设定邮件的存储目录
4l+F3`h4Mk
(T;~h'Ci    NMPOP31-〉DeleteOnRead = false;    //读完邮件后是否删除 g;_$L&K%G }%G
;O!Od6Bt6tiG
   NMPOP31-〉ReportLevel = Status_Basic; //控制OnStatus事件和Status属性报告的资料的数量 NY2k E s%x d,X,_N
USP"L `K4]U b
   NMPOP31-〉TimeOut = 20000;          //设置超时的时间 -tY`UjVB1?
+T7Q_G%g
   NMPOP31-〉Host = Edit1-〉Text;    //设置pop3服务器的主机名
t8?6KC0PG6m?4}
7b1Fi B q    NMPOP31-〉Port = StrToInt(Edit2-〉Text); //设置pop3服务器的端口号
7Jh9^MC V
sKd!l8o%GQ    NMPOP31-〉UserID = Edit3-〉Text;   //取得用户名
%Co]w3^v[@? k([#@s"MDr H
   NMPOP31-〉Password = Edit4-〉Text; //得到口令 Fc a8Du:t)oz2u

\[nNg    NMPOP31-〉Connect(); //开始连接
!P2BI'T}[ X`$j Z x5pG1c}5k
   Label10-〉Caption = ″# of Messages: ″+IntToStr(NMPOP31-〉MailCount); //显示邮件的数量
%_LFa"t$VJ_
.xIP\-{ 为Botton2的OnClick事件编写代码: ~ Ra[S!ZSc2~
V~$AH~ C,u+V#X
   NMPOP31-〉Disconnect();  //使之能够与服务器断开连接 C&DU1v$yeQIw
-e6C qI*?&j9x-Hs8G U
为Botton3的OnClick事件编写代码,当点击它时可以删除邮件:
SmL+eH
,IeYf*P3Sqx}    NMPOP31-〉DeleteMailMessage(StrToInt(Edit5-〉Text));
&Q;[7CmRw5NI.b&l W.|s k~YdNN
为Botton4的OnClick事件编写代码,当点击它时显示整个邮件: -O6gO.tO/c
)x*E%gq l.L @
   NMPOP31-〉GetMailMessage(StrToInt(Edit5-〉Text));
`{)N5KTN7_
}nokgb    Edit6-〉Text = NMPOP31-〉MailMessage-〉From; //通过MailMessage的From属性得到发信人
'ou`'Lirhc x ?k)c6_Mp6O
   Edit7-〉Text = NMPOP31-〉MailMessage-〉Subject; //通过MailMessage的Subjecet属性得到主题
~u b'Q h;R/Y3EZ e/{ Nb _7~ [+a
   Edit9-〉Text = NMPOP31-〉MailMessage-〉MessageId; //通过MailMessage的MessageIds属性得到Id
(X,`#Tv.i#K6K'zng
hJ9AK UXl6n1] y    Memo2-〉Lines-〉Assign(NMPOP31-〉MailMessage-〉Head);
gRN;S.f\
4n)o-c&~2R,A%Tm*M2H i    Memo1-〉Lines-〉Assign(NMPOP31-〉MailMessage-〉Body); pv_ZbRQ,E@
k.S&N&j&KJb2_ @M
   if (NMPOP31-〉MailMessage-〉Attachments-〉Text != ″″) 4OiFL*X

Tg z8m.I2frq1F       ShowMessage(″Attachments:\n″+NMPOP31-〉MailMessage-〉Attachments-〉Text); |bD9xh3h/Zk@

Xm T'@ Ax C:h 为Botton5的OnClick事件编写代码,点击它时将在Memo中显示邮件的概要信息:
4BQ$p)u(V eK z 9H.y H(y&t"p
   NMPOP31-〉GetSummary(StrToInt(Edit5-〉Text));
3ejw(d$rV
2` H([H.|6vN    Edit6-〉Text = NMPOP31-〉Summary-〉From; [^~2B4X s"I.L3c#g

%a Y/P ?/g8O&N    Edit7-〉Text = NMPOP31-〉Summary-〉Subject; B:| U'[RRB"q|

Y.]V])T ~Hlt_[    Edit8-〉Text = IntToStr(NMPOP31-〉Summary-〉Bytes); 7|P'm`$V5]2D,j|O

v6r4s u Dsq    Edit9-〉Text = NMPOP31-〉Summary-〉MessageId; m8Hv-NRH"s1r)`

)h|SQ lo$h,C 为Botton6的OnClick事件编写代码,点击它时将在Memo3中显示邮件列表: 6K%PYfUdMP MV%ep
$BOSz5itN
   NMPOP31-〉List(); //得到邮件的数量和大小的列表 $Mu_P%k:i&k6B
W#Xv Cg8Y
为Botton7的OnClick事件编写代码,点击它时将清除Memo3中的邮件列表:
-l\X%H&T&Fp E Q p/M@[!tl:J2F
   Memo3-〉Clear(); #N/x&B p'ebi

2\3W!Z uO;?A2o+f 为NMPOP3的事件编写代码
1\f)d,f,m2b 1_1mxk2z1[4YD
1. 为它的OnConnect事件编写代码
8Y p!nv9Fp
?0gn4Qx(L    StatusBar1-〉SimpleText = ″Connected″; //连接后在状态栏显示已连接
:A![$q(]`` Z
b3ZW,jE%h 2. 为它的OnConnectionFailed事件编写代码
(|(snT7_:\#C
a/B`#p'Ty    ShowMessage(″Connection Failed″); //若连接失败则报告
o W,z'HZ%?
a W*P*BM:jw(E'` 3. 为它的OnConnectionRequired事件编写代码 %|1f7s u"v(f W7Z

P3l"\S`z    AnsiString BoxCaption;
5] L"]T!c.V]L
2hURJ9a1]6Y1N    AnsiString BoxMsg;
0{?7b5l[ LnaU
J'p(Fj7Q4AVR    BoxCaption = ″请求连接″; .nW9W,Em`S$O+o

!ucP)u4} T8ZB4Vu    BoxMsg = ″请求连接,连接吗?″; iBV&C){&rLD

1BQqj;wt9@!q*K    if (MessageBox(0, &BoxMsg[1], &BoxCaption[1], MB_YESNO + MB_ICONEXCLAMATION) == IDYES) .|P/Q6K|'_L
&d9v]3Th/}1kX
      { handled = TRUE;
Qc5d(Mr1}-Ji
6\-s'v+{y:B6O4L         Form1-〉Button1Click(this); jvW A-l_
      }
0|2D A'z{t RL (CR9j9B1{U5TG
4.为它的OnDisconnect事件编写代码 N#a(cP$Q4vq\:N)]-f
#`1`9o*? n"i p
    if (StatusBar1 != 0) ~;p.g)f| V2F
?xR"D3F
       StatusBar1-〉SimpleText = ″Disconnected″; //断开连接后在状态栏显示已断开 uo'S6w0?%jWv9p0V9n:C
M)C:NpMHa'e
5. 为它的OnFailuer事件编写代码
;O\,Scks 5Q9E j:Zq*]M [wq
   ShowMessage(″操作失败!″);
/zr1MCNR3e!]*`#w 1\y s!mq[?^
6. 为它的OnHostResovled事件编写代码 s)i o:Jn.IDkH

)dj9].arU    StatusBar1-〉SimpleText = ″Host Resolved″; wi2X*PDDD/r A
)W7vV Y:x
7.为它的OnInvailidHost事件编写代码
5a/w9@s'Xk U/n ;C ]S XR!V
  AnsiString NewHost; .f8q&H7\e5h0s
?h1x l7tc#m4m
  if (InputQuery(″非法主机名!″, ″请重新输入新的主机名″,NewHost)) ~\.v)rw"a n2H%u6q/A

2z&f7a:mg"W^{PXv     { NMPOP31-〉Host = NewHost;
(o QpM6o M-H h TVlS/fX
      handled = true;
:Xpy)^n     }
8d azMv I4BE j?qb
8. 为它的OnList事件编写代码 &y$]]Yd
n5\:m7y8B.K
   if (Msg 〈 2) 3}v@!iHI$r
+q9}'\V$_0aG1hI1B-S%N
     { Memo3-〉Clear();
Y` n[_5Ds E\r#wp0o.eyU
       Memo3-〉Lines-〉Add(″Message Number / Message Size″); BE_:KMjv
      }
2l IO4u?C)dX |2kQ-b5v0ov-u
    Memo3-〉Lines-〉Add(IntToStr(Msg)+″/ ″+IntToStr(Size));
"`T$FqC7au3{:fc LZa;p&|0`
9. 为它的OnListPacketRecvd事件编写代码
/r _u%a,jlS;b/zD a ._,e$F{!N4S&T%XD
   StatusBar1-〉SimpleText = IntToStr(NMPOP31-〉BytesRecvd)+″ bytesof ″+IntToStr(NMPOP31-〉BytesTotal)+″ Received″;
:T Q sf2lXGr-q0rh
ecK$A2W8i0s0tA 10. 为它的OnReset事件编写代码
Ck'V4h.x }'H-KT
?bx8q0Y.K     ShowMessage(″重置删除标志″);
1_-W0Kv5c
5i)Nv!t{A!J 11. 为它的OnRetrieveEnd事件编写代码
7] W+c/ye
#rn Zw!J A@ _o"V_Um     Form1-〉Cursor = crDefault;
r!Vuzt)]Q:I"X
#UBS?/H1M9P7BX\     StatusBar1-〉SimpleText = ″恢复完成″;
-@'BO4X,I#sFNj&v d:s9aO&|
12. 为它的OnRetrieveStart事件编写代码
+YC*MI1[ Xp7UW2W   '{i^qFW
    Form1-〉Cursor =crHourGlass;
.H&v})?5Gk-u] X[;K*[2d _v
    StatusBar1-〉SimpleText = ″恢复开始″; {CA1y:i1Pm^7J

I8s+R*X&Z6[b"q-z JZ.[ 13. 为它的OnStatus事件编写代码 /Z6om |'XP:j

$o7bI?o'_ `2Y     if (StatusBar1 != 0)
8fgk_J,\G ?1y &pF+|yUnI`
      StatusBar1-〉SimpleText = Status; m J$ewH6[/A
{q:|o GD,d
14. 为它的OnSuccess事件编写代码
6g k.|$le8~^ C 3Mp0]]:s.qY
    StatusBar1-〉SimpleText = ″操作成功″。 y5m`4^:kB*Q
*b@c a c ^ s3s
    至此,我们的电子邮件程序就完成了,编译运行后,输入你的pop3服务器名,你就可以接收到你的电子邮件了,怎么样?试一试吧。

azhuiguai 发表于 2008-5-4 14:44

看看

amyhang 发表于 2008-5-5 16:15

关注一下

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.