用Winsock发送电子邮件
以前的smtp服务器大多都支持匿名邮件的发送,因此我们只要用Winsock连上服务器25端口,然后再发送几个命令和邮件的相关信息,就能实现发送E-mail了(现在从网上下载的许多关于VB发送电子邮件的例子都是通过这种匿名的方式)。但是现在支持匿名发送电子邮件的Smtp几乎没有了(谁知道,请告诉我一个),现在的Smtp都需要身份验证(ESmtp),下面我就说一下用Winsock实现ESmtp的几个步骤:www.520diannao.com- I( p) g# p( c' @ h
打造最好的电脑自学交流论坛" V. Q6 E5 f1 y9 b& l" F1 I& g
1 设置Winsock控件的通信协议(TCP),远程主机ip,远程连接端口(通常为25)。然后连接远程主机。 eg, Winsock1.Protocol = sckTCPProtocol电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站% U9 G; L( D0 U
打造最好的电脑自学交流论坛4 Y! z h/ k5 }% r" R
Winsock1.RemoteHost = "smtp.126.com"
/ d, @4 s; ]' @1 ?8 P" }* }: Z Winsock1.RemotePort = 25
* a' J9 A4 X- r i/ f4 D, y& ~ Winsock1.Connect我爱电脑技术论坛3 s- C9 ~8 E5 Q) q) R0 e& h, [
& X+ [4 h3 D0 d我爱电脑技术社区--打造最好的电脑技术自学交流平台 2 如果winsock接受到的服务器的回应码为220,表明服务器端接受了客护端的连接请求。这样可以进行下一步的通信:客户端发送EHLO消息,该消息表示客户希望基于ESMTP协议的电子邮件传递。
, Q0 [2 ]; J' i9 z5 R1 u! L. z电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 ?) J4 K5 {0 X8 Y6 E
eg, winsock1.senddata("EHLO xiaopeng"+vbcrlf)打造最好的电脑自学交流论坛: z7 ]' m3 K+ w
4 V* G+ e4 H1 S5 l' W% k! Z$ [我爱电脑技术社区--打造最好的电脑技术自学交流平台 3 如果winsock接受到服务器的回应码为250,表明服务器接受了客户端的通过ESMTP发送邮件的请求。电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站, I: u8 Y& w& y
# }2 } `( R. P/ A; P: F我爱电脑技术社区--打造最好的电脑技术自学交流平台 这样可以进行下一步的通信:客户端发送AUTH LOGIN消息。
( s+ _- e% S+ |* m* P& g电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
" [/ k$ C [- y我爱电脑技术社区--打造最好的电脑技术自学交流平台 eg, winsock1.senddata("AUTH LOGIN"+vbcrlf)
( U7 n, x# C2 R5 d我爱电脑技术论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站. v2 p% s' f* x4 `% q2 e2 B' z
4 如果winsock接收到服务器的回应码为334,表明服务器启动了一个认证过程。下一步期待用户输入用户名 。
" }- y0 Z. J) @+ F
x2 j9 h% o0 ~3 N( Z* G. x8 W我爱电脑技术社区--打造最好的电脑技术自学交流平台 eg, winsock1.senddata(Encode64("username")+vbcrlf)www.520diannao.com1 \" @( n9 R G
www.520diannao.com( e2 T, [1 [! j' V
5 如果winsock接收到服务器的回应码为334,表明服务器已经接受了用户名,下一步期待用户输入密码。
- y' C* E+ U/ B0 ?# |我爱电脑技术社区--打造最好的电脑技术自学交流平台
3 v* x5 _; e5 G! l5 ?8 `打造最好的电脑自学交流论坛 eg,winsoc1.senddata(Encode64("password")+vbcrlf)www.520diannao.com1 `$ G0 T! g. B, ?6 I- E
我爱电脑技术论坛7 J6 N! W; G4 | x- J6 g2 I$ H# F% U
6 如果winsock接收到服务器的回应码为235,表明认证成功完成。接着客户就可以发邮件了。
* Q: G1 Z$ q5 a2 L: _电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) v2 u$ b) S8 @. _7 h
发邮件具体过程如下:电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 t2 z- r! l/ E- Z6 r8 j) C
打造最好的电脑自学交流论坛4 r* v1 V1 o, g& y! h% v4 U$ P
(1)客户端发送"mail from:"消息,该消息包含了发送人的email我爱电脑技术社区--打造最好的电脑技术自学交流平台1 Q2 V7 X5 s4 g, I. Y- q9 V9 r
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站3 q* T; X# B7 I9 c) p
eg, winsock1.sendata("mail from:"+chr(32)+"xiaopeng.qi@126.com"+vbcrlf)打造最好的电脑自学交流论坛1 n9 k3 E2 n6 y% e" V& O% T+ l4 h M
我爱电脑技术论坛, x3 g* F* l5 E; l4 ]" J6 v7 ]- M
(2)当客户端接收到250,则继续发送"rcpt to:"消息,它包含了收件人的邮件地址。
) k- g5 i) r/ |1 K3 Y& Y8 n我爱电脑技术论坛我爱电脑技术论坛- v" V1 m( N2 L% L( Y( X7 R6 f5 q3 _
eg, winsock1.senddata("rcpt to:"+chr(32)+"linglingxp@126.com"+vbcrlf)
( j3 K! r. _' _' s我爱电脑技术论坛www.520diannao.com* w9 c8 L& Q+ n; z0 T& Z0 s8 v
(3)当客户端接收到250,则继续发送“data”消息,它通知邮件服务器随后客户断将发送电子邮件数据。
* K8 M: ^) \$ E' }电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
3 E' I" i" A2 h: v0 x" F! D/ z+ a% k我爱电脑技术论坛 eg, winsock1.senddata("data"+vbcrlf)
' _, K0 _- O7 `9 m6 p, z7 {打造最好的电脑自学交流论坛
3 e$ w' u% o* G: j! t (4)客户端如果接收到354的消息,客户端将发送电子邮件数据。电子邮件的数据包括以下字段:
( w. R. O8 Y6 C5 q/ H4 e! dwww.520diannao.com
& L! l9 ]; @! i* o0 [电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 Date,From,To,X-Mailer以及邮件正文。电子邮件以"."结束。
; Y7 Q# @' {3 h/ } Z k( wwww.520diannao.com eg,winsock1.senddata("Date:"+chr(32)+format(Date,"Ddd")&","&format(Date,"dd Mmm YYYY")&""&format(Time,"hh:mm:ss")&""&"-0600"+vbcrlf)我爱电脑技术论坛1 B) U' q {$ v+ m
winsock1.senddata("From:"+chr(32)+"xiaopeng"+vbcrlf)我爱电脑技术社区--打造最好的电脑技术自学交流平台8 w$ s# `: c* D0 o& O
winsock1.senddata("X-Mailer: vbemailsender"+vbcrlf)电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站: G! G# J% h. Z* C% `- t% Z Y
winsock1.senddata("To:"+chr(32)+"lingling"+vbcrlf)
( C) U \% Z1 `* ]& twww.520diannao.com winsock1.senddata("Subject:"+chr(32)+"how are you"+vbcrlf)我爱电脑技术社区--打造最好的电脑技术自学交流平台# }+ V/ @; ]& z8 Q3 @# X% V
winsock1.sendtada("ni hao ma"+vbcrlf)我爱电脑技术论坛9 L( P6 m( L9 O9 M2 I
winsock1.senddata("."+vbcrlf)
6 U9 q+ [; s: b1 o8 H8 q2 }+ A5 r
3 ~1 V# i1 S7 N2 @* b$ D! hwww.520diannao.com (5)如果客户端接收到250的消息,表明电子邮件数据被成功发送。此时客户端如果希望与服务器断开连接,发送"quit"消息即可。如果客户端接收到221的消息,表明服务器已经终止了基于ESMTP协议的连接。我爱电脑技术社区--打造最好的电脑技术自学交流平台- F4 _* S' q7 r4 Y! v
打造最好的电脑自学交流论坛6 f, l4 q! X& [2 i4 _/ ~
eg, winsock1.senddata("quit"+vbcrlf)电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2 y1 [, [9 b# {% h4 c
: F+ @$ l" T5 `0 l5 e5 O4 ~) w 需要说明的地方:9 `# c! |& J( H% r6 p: D
( } l- {# F6 x% G' f我爱电脑技术社区--打造最好的电脑技术自学交流平台 Encode64 这是一个用于Base64编码的函数