[高分]求VB邮件接收代码

求可在VB6.0环境下接收邮件的代码.

不要想在网上复制了~~~我找了1整天了~~希望有高手有代码~~~

有用winsock的还有用MAPI的~~~我也不清楚那个好~

我只想用程序收到邮件并判断主题就行了~~其他的不做要求.

高手们~~大虾们~~帮帮小弟吧~~多少分我都不在乎~我只想要这个代码~~

给个可用代码吧~~
例如我的邮箱是:[email protected]
密码是:abcde
我要用这个程序来收这个邮箱的新邮件~怎么收?

各位不要只提示我呀~~~我想看全部完整可用的代码~~~谢谢啊~

邮件接收程序

邮件接收程序比邮件发送程序稍微复杂一些。首先需要使用MAPI消息控件的Fetch方法读取邮件,这个过程将把用户收件箱中所有未读邮件全部装入MAPI消息控件中。然后,检查MAPI消息控件的MsgCount属性以确定通过Fetch方法读取的邮件的总数。接着,可以通过设置MAPI消息控件的MsgIndex属性来指定具体需要处理哪一封邮件。需要说明的是,MsgIndex属性值的计数是从0开始的,也就是说,第一封邮件的索引号是0,第二封邮件的索引号是1,依次类推。编程步骤如下:
1、新建一个VB项目。
2、将缺省窗体Form1的Caption属性设置为"接收邮件"。
3、将MAPI控件加入VB工具框。
4、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1。
5、在Form1中加入三个标签控件和一个文本框控件,将三个标签控件的Name属性分别设置为lblMsgDateReceived、lblMsgOrigDisplayName、lblMsgSubject,将文本框控件的Name属性设置为txtMsgNoteText,并将标签控件的Caption属性和文本框控件的Text属性的内容清空。这四个控件将分别用于显示邮件的日期、发件人、主题和内容。
6、将txtMsgNoteText控件的Locked属性和Multiline属性设置为True,ScrollBars属性设置为2 - Vertical。
7、在Form1中再加入四个标签控件用于标注上述四个控件,将它们的Caption属性分别设置为"日期"、"发件人"、"主题"、"内容"。
8、在Form1中加入一个标签控件,将其Name属性设置为lblMsgCount,Caption属性设置为"第 0 封邮件,总计 0 封邮件"。该控件用于显示接收的邮件总数以及当前正在处理第几封邮件。
9、在Form1中加入三个命令按钮控件,将它们的Name属性分别设置为cmdPrevious、cmdNext、cmdClose,Caption属性分别设置为"上一封"、"下一封"、"关闭"。
10、编写一个窗体级子例程FetchNewMail:
Public Sub FetchNewMail()
MAPIMessages1.FetchUnreadOnly = True
MAPIMessages1.Fetch
End Sub
11、编写一个窗体级子例程DisplayMessage:
Public Sub DisplayMessage()
lblMsgCount.Caption = "第 " & _
LTrim(Str(MAPIMessages1.MsgIndex + 1)) & " 封邮件,总计 " & _
LTrim(Str(MAPIMessages1.MsgCount)) & " 封邮件"
lblMsgDateReceived.Caption = MAPIMessages1.MsgDateReceived
txtMsgNoteText.Text = MAPIMessages1.MsgNoteText
lblMsgOrigDisplayName.Caption = MAPIMessages1.MsgOrigDisplayName
lblMsgSubject.Caption = MAPIMessages1.MsgSubject
End Sub
12、将下列代码加入Form1的Form_Load事件:
Private Sub Form_Load()
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
FetchNewMail
DisplayMessage
End Sub
13、将下列代码加入cmdPrevious的Click事件:
Private Sub cmdPrevious_Click()
If MAPIMessages1.MsgIndex > 0 Then
MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex - 1
DisplayMessage
Else
Beep
End If
End Sub
14、将下列代码加入cmdNext的Click事件:
Private Sub cmdNext_Click()
If MAPIMessages1.MsgIndex < MAPIMessages1.MsgCount - 1 Then
MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex + 1
DisplayMessage
Else
Beep
End If
End Sub
15、将下列代码加入cmdClose的Click事件:
Private Sub cmdClose_Click()
Unload Me
End Sub
在窗体加载过程中,窗体Load事件中的代码会读取新邮件,如果有新邮件,就显示第一个新邮件。如果有多个新邮件,则可以使用"上一封"和"下一封"命令按钮前后翻阅。

接收邮件

本例是读取用户收件箱中所有未读邮件,如果要读取收件箱中所有的邮件,那么只需在执行Fetch方法之前,将MAPI消息控件的FetchUnreadOnly属性设置为False。具体接收的邮件是否已经读过,可以通过MsgRead属性来判别。如果邮件的正文或附件曾经被浏览过,那么该邮件就会自动标记为已读,不过只浏览邮件的主题不会标记该邮件已读。

邮件附件
与处理邮件的方式一样,MAPI也为邮件的附件提供了一个计数器和一个索引。在处理收到的邮件时,可以通过检查AttachmentCount属性来确定该邮件携带了多少个附件,然后可以通过设置AttachmentIndex属性依次处理每一个附件。
AttachmentIndex的合法取值范围为0至AttachmentIndex-1。在设置了AttachmentIndex属性值后,可以读取附件的下列属性:
AttachmentName:当附件是一个文件时,该属性用于指定文件的名称。当附件是一个OLE对象时,该属性用于指定对象的类型。
AttachmentPath:该属性用于指定做为附件的文件的全路径名。
AttchmentPosition:该属性用于指定附件在邮件内容部分中的位置。当邮件收发程序显示邮件内容时,将使用该属性提供的信息把附件的标志放在合适的位置。
AttachmentType:该属性用于指定附件的类型,其合法取值为三个整数型数值,在VB中分别由下列常量表示:
·mapData-附件是一个数据文件
·mapEOLE-附件是一个嵌入式OLE对象
·mapSOLE-附件是一个静态OLE对象
发送邮件时,上述属性的使用方法与接收邮件时相同,只不过由读操作改为写操作了。值得一提的是AttachmentIndex属性,发送邮件时可以将其设置为任意值。而AttachmentCount属性则会自动设置为正确的值,无需人为设置。

小结
通过分析上述两个程序的代码,可以归纳出具有收发电子邮件功能的VB程序的基本流程如下:
1、使用MAPI会话控件建立一个邮件会话。
2、使用MAPI消息控件进行邮件的处理工作。
3、再次使用MAPI会话控件释放邮件会话。
由于上述两个VB程序只是简单的示例,因而略去了一些与本文主题关系不大的细节,如错误处理等。在编制实用程序时,为了保证程序的可靠性,应该考虑加入这些细节部分。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-07-31
下面是Winsock的DataArrival事件中的代码。该代码的绝大部分是注释以向你解释程序所做的每一步。如果你觉得闷的话就跳过不看就是了。

PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong)

DimstrDataAsString

StaticintMessagesAsInteger要下载的消息数(也就是邮件数)
StaticintCurrentMessageAsInteger已下载的消息数
StaticstrBufferAsString正在下载的消息的缓冲

将收到的数据存放在strData变量中
Winsock1.GetDatastrData

IfLeft$(strData,1)=" "Orm_State=POP3_RETRThen
如果来自服务器的回应的第一个字符为加号
表明服务器已收到你发出的命令并等待下一个命令
如果服务器返回的字符串的第一个字符为减号,那我们在这里就什么也做不了。
操作被转到ELSE后面部分的代码。
当处于数据接收状态时,来自服务器的字符串的第一个字符就可能不是加号或减号,所以要用到第二个条件
m_State=POP3_RETR(正在接收消息的状态)
SelectCasem_State
CasePOP3_Connect

重置消息数
intMessages=0

改变进程状态
m_State=POP3_USER

向服务器发出带参数的USER命令
参数是信箱名
别忘了在命令的最后加上vbCrLf
Winsock1.SendData"USER"&txtUserName&vbCrLf
这是本次事件的结束,下次开始跳过上一部分,而从下面开始执行
CasePOP3_USER部分
CasePOP3_USER

如果用户名检查通过就进行下一部分
现在向服务器发送你的密码

改变进程的状态
m_State=POP3_PASS

向服务器发送PASS命令,以你的密码为参数
Winsock1.SendData"PASS"&txtPassword&vbCrLf
CasePOP3_PASS

如果服务器通过了你的身份验证,我们就可以向服务器发送STAT命令了
作为对STAT的回应,服务器会传回你邮箱中的消息数及大小

改变当前进程的状态
m_State=POP3_STAT

现在发送STAT命令
Winsock1.SendData"STAT"&vbCrLf
CasePOP3_STAT

服务器对STAT的回应看上去象这样
" OK00"(邮箱中没有邮件)或" OK37564"
(邮箱中有邮件).显然,我们必须找到来自服务器返回的字符串中的第一个数字

intMessages=CInt(Mid$(strData,5,InStr(5,strData,"")-5))
IfintMessages>0Then

如果邮箱中有邮件
改变进程的状态
m_State=POP3_RETR

intCurrentMessage=intCurrentMessage 1

现在准备向服务器发送RETR命令
以便接收第一条消息
Winsock1.SendData"RETR1"&vbCrLf
Else
如果邮箱中没有邮件就断开同服务器的连接结束进程

m_State=POP3_QUIT
Winsock1.SendData"QUIT"&vbCrLf
MsgBox"Youhavenotmail.",vbInformation
EndIf
CasePOP3_RETR
在接收邮件时执行下面执行下面的代码
邮件可能会很大,并触发多次DataArrival事件
接收到的数据被存放在strBuffer变量中
strBuffer=strBuffer&strData

用下面的语句判断消息的结束
邮件是以小数点结尾的
IfInStr(1,strBuffer,vbLf&"."&vbCrLf)Then

邮件下载完毕

删除由服务器返回的第一行字符串
strBuffer=Mid$(strBuffer,InStr(1,strBuffer,vbCrLf) 2)

删除最后一个只有小数点的字符
strBuffer=Left$(strBuffer,Len(strBuffer)-3)

把消息存放在m_colMessages集合中
Setm_oMessage=NewCMessage
m_oMessage.CreateFromTextstrBuffer
m_colMessages.Addm_oMessage,m_oMessage.MessageID
Setm_oMessage=Nothing

清空缓冲,准备接收下一条邮件
strBuffer=""

将已收的邮件数同服务器目前的邮件数作比较
IfintCurrentMessage=intMessagesThen
如果相等,表示已接收完所有的邮件
所以发送一个QUIT命令给服务器
m_State=POP3_QUIT
Winsock1.SendData"QUIT"&vbCrLf
Else
如果二者不等,表明还有邮件没有接收

intCurrentMessage=intCurrentMessage 1

改变当前进程的状态
m_State=POP3_RETR

向服务器发出RETR命令接收下一个邮件
Winsock1.SendData"RETR"&CStr(intCurrentMessage)&vbCrLf
EndIf
EndIf
CasePOP3_QUIT
不管我们收到什么样的邮件,记得关闭同服务器的连接
Winsock1.Close
现在调用ListMessages子程序,以便在ListView中显示收到的邮件
CallListMessages
EndSelect
Else
下面的错误处理的代码
只须关闭socket并将来自服务器的回应显示出来就行了。
即使是那些高级的邮件接收程序所做也不外如此
Winsock1.Close
MsgBox"POP3Error:"&strData,_
vbExclamation,"POP3Error"
EndIf

EndSub

一切看上去都一目了然,除了下面的语句:

Setm_oMessage=NewCMessage
m_oMessage.CreateFromTextstrBuffer
m_colMessages.Addm_oMessage,m_oMessage.MessageID
Setm_oMessage=Nothing->

文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

参考资料:http://www.west263.com/www/info/59313-1.htm

第2个回答  2008-08-03
使用Winsock控制检测是否有邮件邮件服务器必须支持POP3
下载地址
http://61.137.90.75/downloads8/sourcecode/internet/286485i017_e-checker.zip
一款用VB+WinSock写的邮件客户端,用access作为邮件数据库,并包含邮件的解码过程。
下载地址
http://61.137.90.75/downloads95/sourcecode/internet/email/client/73462662vbemail.zip本回答被提问者采纳
第3个回答  2008-07-31
如果接收邮件 还是用mapi吧!~

你点我的名字 空间介绍里有我网盘的地址

你找mail.rar

里面有mapi的!~
你去网上看看!
估计不好找!
第4个回答  2008-07-31
如果接收邮件 还是用mapi吧!~

你点我的名字 空间介绍里有我网盘的地址

你找mail.rar

里面有mapi的!~