急~~~怎样用Winsock登陆并操作我的邮箱里的邮件 要用MAPI,不是用WINSOCK你可以在网上搜索一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 pop协议中的Top指令可以获得邮件头。 top 邮件号 0受到邮件头以后,剩下的就是分析邮件头了,FoxMail的原始信息功能能够察看邮件的原始文本。以下是我以前编的头部分析代码Public EM_Subject As StringPublic EM_Date As StringPublic EM_From As StringPublic EM_Size As StringPublic EM_Mime_V As StringPublic EM_Content_Type As StringPublic EM_Return_Path As StringPublic Sub Get_EM_TOP(ByVal EM_Text As String) '参数是接收到的头文本Dim EM_Title, EM_Detail As StringDim EM_Temp() As StringDim EM_T As StringEM_Temp = Split(EM_Text, vbCrLf & vbCrLf)EM_Title = EM_Temp(0)EM_Detail = EM_Temp(1)'***取得Subject***If InStr(EM_Title, "Subject:") <> 0 Then EM_Temp = Split(EM_Title, "Subject:") EM_T = EM_Temp(1) EM_Temp = Split(EM_T, vbCrLf) EM_Subject = EM_Temp(0) If InStr(EM_Subject, "?") <> 0 Then EM_Temp = Split(EM_Subject, "?") If StrConv(EM_Temp(2), vbUpperCase) = "B" Then EM_Subject = Base64decode(EM_Temp(UBound(EM_Temp) - 1)) End If If StrConv(EM_Temp(2), vbUpperCase) = "Q" Then EM_Subject = QPdecode(EM_Temp(UBound(EM_Temp) - 1)) End If End If EM_Subject = Trim(EM_Subject)End If'*****************'***取得Date****If InStr(EM_Title, "Date:") <> 0 Then Dim EM_Y, EM_M, EM_D, EM_Time As String EM_Temp = Split(EM_Title, "Date:") EM_T = EM_Temp(1) EM_Temp = Split(EM_T, vbCrLf) EM_Date = EM_Temp(0) EM_Temp = Split(EM_Date, " ") If InStr(EM_Date, ",") <> 0 Then EM_D = EM_Temp(2) EM_M = EM_Temp(3) EM_Y = EM_Temp(4) EM_Time = EM_Temp(5) EM_Date = EM_D & " " & EM_M & " " & EM_Y Else EM_D = EM_Temp(1) EM_M = EM_Temp(2) EM_Y = EM_Temp(3) EM_Time = EM_Temp(4) EM_Date = EM_D & " " & EM_M & " " & EM_Y End If EM_Date = Format(EM_Date, "yyyy-mm-dd") & " " & EM_TimeEnd If'***************'***取得From***If InStr(EM_Title, "From:") <> 0 Then EM_Temp = Split(EM_Title, "From:") EM_T = EM_Temp(1) EM_Temp = Split(EM_T, vbCrLf) EM_From = EM_Temp(0) If InStr(EM_From, " <") <> 0 Then EM_Temp = Split(EM_From, " <") EM_From = EM_Temp(0) End If EM_From = Replace(EM_From, """", " ") EM_From = Trim(EM_From)End If'*************'***取得MimeVersion***If InStr(EM_Title, "MIME-Version:") <> 0 Then EM_Temp = Split(EM_Title, "MIME-Version:") EM_T = EM_Temp(1) EM_Temp = Split(EM_T, vbCrLf) EM_Mime_V = EM_Temp(0)End If'********************'***取得Content_Type***If InStr(EM_Title, "Content-Type:") <> 0 Then EM_Temp = Split(EM_Title, "Content-Type:") EM_T = EM_Temp(1) EM_Temp = Split(EM_T, vbCrLf) EM_Content_Type = EM_Temp(0)End If'*********************'****取得Return-Path****If InStr(EM_Title, "Return-Path:") <> 0 Then EM_Temp = Split(EM_Title, "Return-Path:") EM_T = EM_Temp(1) EM_Temp = Split(EM_T, vbCrLf) EM_Return_Path = EM_Temp(0)End If'***********************End Sub GB2312,数字,英文字母的邮件标题,我能够取到,但是UTF-8编码的标题我还没有做。另外,附件可以通过下载邮件内容,然后从邮件内容中截取,也可以将邮件下载到本地再做处理。1.邮件标题通过winsock.senddata "TOP n 0" & vbcrlf 命令获得返回值,其中n为邮件的序号.格式如下+OKReceived: from Server ([192.168.0.228]) by mail.GBZTG.INT with Microsoft SMTPSVC(5.0.2195.5329); Mon, 24 Feb 2003 19:00:22 +0800Message-ID: <[email protected]>From: "Johnny Lill" <[email protected]>To: <[email protected]>, "Johnny Lill" <[email protected]>Subject: =?gb2312?B?tuDK1bz+yMuy4srU?=Date: Mon, 24 Feb 2003 19:00:20 +0800MIME-Version: 1.0Content-Type: multipart/alternative; boundary="----=_NextPart_000_0005_01C2DC36.FAFC0400"X-Priority: 3X-MSMail-Priority: NormalX-Mailer: Microsoft Outlook Express 6.00.2720.3000Disposition-Notification-To: "Johnny Lill" <[email protected]>X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000Return-Path: [email protected]X-OriginalArrivalTime: 24 Feb 2003 11:00:22.0078 (UTC) FILETIME=[ED130DE0:01C2DBF3].反馈信息中的Subject:对应的就是邮件标题。如果是编码后的字符串,则需要相应的解码操作。编码格式 "?=编码方式?B?内容=?" ,是用编码方式对内容进行解码即可。待续 2.邮件内容使用winsock.senddata "LIST n" & vbcrlf 获得邮件大小,并赋值给变量MailSize然后使用winsock.senddata "RETR n" & vbcrlf 获得邮件内容注意Winsock_DataArrival(ByVal bytesTotal As Long)事件中的bytesTotal变量。如果邮件比较大,一次不能够全部接收,这是,你需要定义一个boolean型的全局变量isDownload 和一个long型的全局变量CurrentBytes,在执行winsock.sendata "RETR n" & vbcrlf 前赋值 isDownLoad=True , CurrentBytes = 0。然后在Winsock_DataArrival(ByVal bytesTotal As Long)事件中对CurrentBytes进行累加,直到CurrentBytes = MailSize + 8 时,完成下载操作。注意判断要在写文件之后进行。例:在Winsock_DataArrival(ByVal bytesTotal As Long)事件中使用下列代码If Winsock.State = 7 Then Winsock.GetData str_GetMail, vbString, bytesTotalEnd IfIf isDownload Then Open "C:\1.eml" For Append Access Write As #1 Print #1, str_GetMail Close #1End IfCurrentBytes = CurrentBytes + bytesTotal If CurrentBytes >= MailSize + 8 Then isDownload=false CurrentBytes=0 msgbox "下载完毕"end if如果需要截取附件,要自己进行邮件内容分析,然后按段截取即可完....... 请教VB中可不可以用lib文件实现静态链接? 请教关于treeview的节点遍历问题 求救~~~~~用VB做一个试题管理系统遇到的问题 如果实在没办法,我也只能笨一下了!!! sq语句的问题???????? ###好奇,谁知道outlook中写信时输入e-mail,自动加上超链结的功能具体是如何实现的### 决定了!电子地图用flash!视频用real!可以提供些资料吗?全套解决 999分没问题! 在vb中,如何创建sql server存储过程,并调用之 我的sql 7.0 装上了,但是不能用!? rdo不能更新数据库 如何用vb设置分辨率?? 如何创建二维控件数组?
top 邮件号 0
受到邮件头以后,剩下的就是分析邮件头了,FoxMail的原始信息功能能够察看邮件的原始文本。
以下是我以前编的头部分析代码Public EM_Subject As String
Public EM_Date As String
Public EM_From As String
Public EM_Size As String
Public EM_Mime_V As String
Public EM_Content_Type As String
Public EM_Return_Path As StringPublic Sub Get_EM_TOP(ByVal EM_Text As String) '参数是接收到的头文本
Dim EM_Title, EM_Detail As String
Dim EM_Temp() As String
Dim EM_T As StringEM_Temp = Split(EM_Text, vbCrLf & vbCrLf)EM_Title = EM_Temp(0)
EM_Detail = EM_Temp(1)'***取得Subject***
If InStr(EM_Title, "Subject:") <> 0 Then
EM_Temp = Split(EM_Title, "Subject:")
EM_T = EM_Temp(1)
EM_Temp = Split(EM_T, vbCrLf)
EM_Subject = EM_Temp(0)
If InStr(EM_Subject, "?") <> 0 Then
EM_Temp = Split(EM_Subject, "?")
If StrConv(EM_Temp(2), vbUpperCase) = "B" Then
EM_Subject = Base64decode(EM_Temp(UBound(EM_Temp) - 1))
End If
If StrConv(EM_Temp(2), vbUpperCase) = "Q" Then
EM_Subject = QPdecode(EM_Temp(UBound(EM_Temp) - 1))
End If
End If
EM_Subject = Trim(EM_Subject)
End If
'*****************'***取得Date****
If InStr(EM_Title, "Date:") <> 0 Then
Dim EM_Y, EM_M, EM_D, EM_Time As String
EM_Temp = Split(EM_Title, "Date:")
EM_T = EM_Temp(1)
EM_Temp = Split(EM_T, vbCrLf)
EM_Date = EM_Temp(0)
EM_Temp = Split(EM_Date, " ")
If InStr(EM_Date, ",") <> 0 Then
EM_D = EM_Temp(2)
EM_M = EM_Temp(3)
EM_Y = EM_Temp(4)
EM_Time = EM_Temp(5)
EM_Date = EM_D & " " & EM_M & " " & EM_Y
Else
EM_D = EM_Temp(1)
EM_M = EM_Temp(2)
EM_Y = EM_Temp(3)
EM_Time = EM_Temp(4)
EM_Date = EM_D & " " & EM_M & " " & EM_Y
End If
EM_Date = Format(EM_Date, "yyyy-mm-dd") & " " & EM_Time
End If
'***************'***取得From***
If InStr(EM_Title, "From:") <> 0 Then
EM_Temp = Split(EM_Title, "From:")
EM_T = EM_Temp(1)
EM_Temp = Split(EM_T, vbCrLf)
EM_From = EM_Temp(0)
If InStr(EM_From, " <") <> 0 Then
EM_Temp = Split(EM_From, " <")
EM_From = EM_Temp(0)
End If
EM_From = Replace(EM_From, """", " ")
EM_From = Trim(EM_From)
End If
'*************'***取得MimeVersion***
If InStr(EM_Title, "MIME-Version:") <> 0 Then
EM_Temp = Split(EM_Title, "MIME-Version:")
EM_T = EM_Temp(1)
EM_Temp = Split(EM_T, vbCrLf)
EM_Mime_V = EM_Temp(0)
End If
'********************'***取得Content_Type***
If InStr(EM_Title, "Content-Type:") <> 0 Then
EM_Temp = Split(EM_Title, "Content-Type:")
EM_T = EM_Temp(1)
EM_Temp = Split(EM_T, vbCrLf)
EM_Content_Type = EM_Temp(0)
End If
'*********************'****取得Return-Path****
If InStr(EM_Title, "Return-Path:") <> 0 Then
EM_Temp = Split(EM_Title, "Return-Path:")
EM_T = EM_Temp(1)
EM_Temp = Split(EM_T, vbCrLf)
EM_Return_Path = EM_Temp(0)
End If
'***********************End Sub
另外,附件可以通过下载邮件内容,然后从邮件内容中截取,也可以将邮件下载到本地再做处理。1.邮件标题
通过winsock.senddata "TOP n 0" & vbcrlf 命令获得返回值,其中n为邮件的序号.格式如下
+OK
Received: from Server ([192.168.0.228]) by mail.GBZTG.INT with Microsoft SMTPSVC(5.0.2195.5329);
Mon, 24 Feb 2003 19:00:22 +0800
Message-ID: <[email protected]>
From: "Johnny Lill" <[email protected]>
To: <[email protected]>,
"Johnny Lill" <[email protected]>
Subject: =?gb2312?B?tuDK1bz+yMuy4srU?=
Date: Mon, 24 Feb 2003 19:00:20 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0005_01C2DC36.FAFC0400"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2720.3000
Disposition-Notification-To: "Johnny Lill" <[email protected]>
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
Return-Path: [email protected]
X-OriginalArrivalTime: 24 Feb 2003 11:00:22.0078 (UTC) FILETIME=[ED130DE0:01C2DBF3]
.
反馈信息中的Subject:对应的就是邮件标题。如果是编码后的字符串,则需要相应的解码操作。编码格式 "?=编码方式?B?内容=?" ,是用编码方式对内容进行解码即可。待续
使用winsock.senddata "LIST n" & vbcrlf 获得邮件大小,并赋值给变量MailSize
然后使用winsock.senddata "RETR n" & vbcrlf 获得邮件内容
注意Winsock_DataArrival(ByVal bytesTotal As Long)事件中的bytesTotal变量。
如果邮件比较大,一次不能够全部接收,这是,你需要定义一个boolean型的全局变量isDownload 和一个long型的全局变量CurrentBytes,在执行winsock.sendata "RETR n" & vbcrlf 前赋值 isDownLoad=True , CurrentBytes = 0。
然后在Winsock_DataArrival(ByVal bytesTotal As Long)事件中对CurrentBytes进行累加,直到CurrentBytes = MailSize + 8 时,完成下载操作。注意判断要在写文件之后进行。
例:在Winsock_DataArrival(ByVal bytesTotal As Long)事件中使用下列代码If Winsock.State = 7 Then
Winsock.GetData str_GetMail, vbString, bytesTotal
End IfIf isDownload Then
Open "C:\1.eml" For Append Access Write As #1
Print #1, str_GetMail
Close #1
End IfCurrentBytes = CurrentBytes + bytesTotal
If CurrentBytes >= MailSize + 8 Then
isDownload=false
CurrentBytes=0
msgbox "下载完毕"
end if
如果需要截取附件,要自己进行邮件内容分析,然后按段截取即可完.......