500分求用winsock收邮件代码(邮件带有附件)
500分求用winsock收邮件代码(邮件带有附件),一贴不能给多分,完成后再开贴给分.
1.要以winsock控件.
2.邮件要带有附件.
谢谢!
问题点数:100、回复次数:14Top
1 楼nz(裕)回复于 2006-03-08 10:39:24 得分 0
找了一下,有的大侠说Jmail也可以,我下了一个4.4版的,但没有VB的例子.不知道怎样用.Top
2 楼Modest(塞北雪貂)·(偶最欣赏楼主的分)回复于 2006-03-08 11:05:06 得分 10
http://www.chenoe.com/blog/blogview.asp?logID=619
http://www.chenoe.com/blog/blogview.asp?logID=626
http://www.chenoe.com/blog/blogview.asp?logID=7
Top
3 楼Modest(塞北雪貂)·(偶最欣赏楼主的分)回复于 2006-03-08 11:08:31 得分 10
http://www.mndsoft.com/blog/blogview.asp?logID=584Top
4 楼nz(裕)回复于 2006-03-08 11:27:43 得分 0
多谢 Modest(塞北雪貂 -- I Love CSDN.Net) 的回贴,http://www.mndsoft.com/blog/blogview.asp?logID=584这个收邮件时出现乱码.Top
5 楼nz(裕)回复于 2006-03-08 11:28:39 得分 0
塞北雪貂 兄方便留下hotmail,或QQ吗?Top
6 楼nz(裕)回复于 2006-03-08 15:42:09 得分 0
upTop
7 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2006-03-09 01:29:11 得分 10
看看 陈锐老大的博克吧 介绍pop3协议的 希望对你有帮助
http://blog.csdn.net/TechnoFantasy/category/123393.aspxTop
8 楼Cooly(☆不做开发很久了......☆)回复于 2006-03-09 14:00:36 得分 10
03年的时候做过一个使用Winsock操作邮箱的小工具.Top
9 楼Cooly(☆不做开发很久了......☆)回复于 2006-03-09 14:06:24 得分 30
需要的话告诉我Email.
不过我现在没有时间写注释了Top
10 楼lc_mtt(柠檬把大飞猪裤子一脱...被大飞猪投诉了)回复于 2006-03-09 14:50:51 得分 10
死心吧,完整好用的MINE编码是不会开放源码的,有源码的,都是不大完整好用的,就如mndsoft的那个邮件源码Top
11 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-09 16:10:19 得分 10
发送电子邮件附件
第二个标签页中有一个ListView控件,用来显示文件列表,以及一个按钮,用来保存附件。如下图所示:
在本示例程序中,我们对CMessage类的CreateFromText方法作了更新:
Dim strFileName As String
Dim strAttachment As String
Dim lngFileSize As Long
Dim lngFirstBegin As Long
Dim lngFullStrings As Long
Const ENCODED_LINE_LENGTH = 61
'
intPosA = 1
Do
'Looking for the start marker - "begin "
intPosA = InStr(intPosA, strMessage, vbCrLf & "begin ") + 2
'Exit from the loop if it hasn't found
If intPosA = 2 Then Exit Do
'remember the position of the first marker
If lngFirstBegin = 0 Then lngFirstBegin = intPosA - 2
'looking for the end of string the marker belongs to
intPosB = InStr(intPosA + 1, strMessage, vbCrLf)
If intPosB > 0 Then
'check whether it is real marker or just
'an ordinal word "begin"
If Mid$(strMessage, intPosA, _
intPosB - intPosA) Like "begin ### *" Then
'exctract the name of the file
strFileName = Mid$(strMessage, intPosA + _
10, intPosB - intPosA - 10)
'
'further - the code for figuring out the size of the file
'extract encoded data of the file
strAttachment = Mid$(strMessage, intPosB + 2, _
InStr(intPosB + 2, strMessage, _
vbCrLf & "'" & vbCrLf & "end") _
- (intPosB + 2))
'remove additional symbols vbCrlf
strAttachment = Replace(strAttachment, vbCrLf, "")
'"temporary" size of the file
lngFileSize = CLng(Len(strAttachment))
'get the number of full strings
lngFullStrings = lngFileSize \ ENCODED_LINE_LENGTH
If lngFileSize Mod ENCODED_LINE_LENGTH > 0 Then
'The size of the file is equal to
'the sum of the two meanings
'The first one multiplies to the number of _
'decoded characters (45)
'The second one is the number of the bytes _
'in the last string. It equals
'to the difference between the ASCII meaning _
'of the fist character and 32
lngFileSize = lngFullStrings * 45 + _
(Asc(Mid$(strAttachment, _
lngFullStrings * _
ENCODED_LINE_LENGTH + 1, 1)) - 32)
Else
'This code runs in very rare cases when _
'the size of the file is multiple
'to 45 and we don't need to process _
'non-standard last string of the encoded data
lngFileSize = (lngFileSize - _
lngFileSize / ENCODED_LINE_LENGTH) * 0.75
End If
'add new item into the mvarAttachments collection
mvarAttachments.Add lngFileSize, strFileName
End If
End If
Loop
'separate the text of the message
If mvarAttachments.Count > 0 Then
m_strMessageBody = Left$(lngFirstBegin - 1)
End If
上面的代码定义了文件名及其大小。这些信息保存在CAttachment对象中,当添中新的项目到mvarAttchments集合时,该对象即被创建。该集合是CMessage类的一个新的属性-Attachments。
下面是ListView控件的ItemClick事件中的代码:
Dim oAttachment As CAttachment
Dim lvItem As ListItem
lvAttachments.ListItems.Clear
For Each oAttachment In m_colMessages(Item.Key).Attachments
Set lvItem = lvAttachments.ListItems.Add _
(, oAttachment.FileName, oAttachment.FileName)
lvItem.SubItems(1) = oAttachment.Size
Next
txtBody = m_colMessages(Item.Key).MessageBody
End Sub
Top
12 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-09 16:10:33 得分 10
电子邮件的标准格式 (RFC 822)
除了由一个Internet用户传递给另一个用户的信息之外,电子邮件中还必须包含附加的服务信息。SMTP服务器利用这些信息来传递邮件,而客户端的邮件接收软件则利用这些信息来对邮件进行分类。这些附加的数据用信头的形式被包含在邮件主体中。邮件正文则紧随其后。如果你是用Outlook Express,用你的鼠标右键点一封邮件,然后选取“属性”,你就可以看到信头是什么样的了。如下图:
在“详细资料”标签页中的文本就是邮件的信头。如果你想看邮件的所有内容,只须点选一下“邮件源文件...”按钮。对普通用户而言,邮件信头一点都不吸引人。但是如果你想开发互联网应用程序的话,你就不能不对此有所了解。如果你不遵守下面这些简单的规则,只能导致程序的失败。
在这里你能找到建立信头的规则,信头每个字段的目的,所运用的语法以及数据格式等等内容。RFC822是一个大文件,在这里我们无法包含该文件的所有细节。你可以把本文的内容当作是一个快速入门,在多数情况下这已经很足够了。想知道该文件的所有内容,就把这个文件下载回去慢慢咀嚼吧。
每封邮件都有两个部分:信头和主体。邮件主体就是你发送给收件人的数据(包括文本或文件)信头是一系列的字段(Fields)。一个空字符串将主体同信头分开,也就是说一个空字符串标记了信头的结束。在VB中,空字符串可写成vbCrLf + vbCrLf. 通过InStr函数你可以很方便地把它找出来。例如:
intBorderLine = InStr(1, strMessage, vbCrLf + vbCrLf)
信头部分的字段可分为两类。一类是由你的电子邮件程序产生的,另一类是邮件通过SMTP服务器时被加上的。在所有被SMTP服务器加上的字段中,对我们而言最重要的是Message-Id字段。这个字段是由你传向的SMTP服务器加上的。这个一个唯一的ID号。你可用这个号码作为邮件的编号。
下表列出了可由用户的邮件程序控制的信头字段。这并不意味着所有的字段都是必须的。实际上可以忽略形成信头这一步骤而只发送正文。让你的SMTP服务器为你加上最起码的必需字段。
信头字段 目的
From 邮件作者
Sender 发信人
Reply-To 回邮地址
To 收信人地址
CC 另一个收信人地址
BCC 收信人地址,但这个收信人看不到其它收信人的地址。
Subject 主题
Comments 备注
Keywords 关键字,用来进一步搜索邮件
In-Reply-To 被当前邮件回复的邮件的ID
References 几乎同In-Reply-To一样
Encrypted 加密邮件的加密类型
Date 发信日期
表1. 邮件信头字段
建立信头的规则很简单。用冒号将字段名同字段值分开。每个字段从一个新的字符串开始,但是字段值可能会占用几个字符串,这取决于SMTP服务器对字符串长度的限制。
不幸的是,RFC822推荐的日期和时间格式同VB不兼容。当我们编辑邮件时,我们得用FORMAT函数例如:
Format(Now,"ddd, dd mmm yyyy hh:mm:ss") & " GMT +0400"
尽管如此,为了将Internet的日期/时间转换成VB的日期类型,你有必要开发你自己的函数或是调用WinInet API中的InternetTimeToSystemTime函数。如果想知道更多这方面的规定,读读RFC822吧。
除了标准字段外,信头还可以包含用户自定义的字段。这些用户自定义的字段名必须由X开始。例如:
X-Mailer: Microsoft Outlook Express 4.72.2106.4
Top
13 楼nz(裕)回复于 2006-03-09 19:07:30 得分 0
谢谢Top
14 楼nz(裕)回复于 2006-03-09 19:08:15 得分 0
我的EMAIL: nz3303@163.comTop




