NetworkCredential 类为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。有关此类型所有成员的列表,请参阅 NetworkCredential 成员。WebDAV you can use the World Wide Web Distributed Authoring and Versioning (WebDAV) protocol to access Microsoft Exchange store content ~~呵呵,可以看exchange sdk 中的Issue Tracking Application例子~
添加Com引用:ado2.5 下面是获取邮箱内邮件的例子,有点长,我分几段发,希望对你有帮助Public Function IGetItemFromInbox() As DataSet Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim urlQueryFld As String Dim strSQL As String
urlQueryFld = "file://./backofficestorage/<domain name>/<user name>/mbx/administrator/收件箱/" cnn = New ADODB.Connection()
With cnn .Provider = "exoledb.datasource" .Open(urlQueryFld) End With '查询语句可以根据需要进行修改 ' Select the properties to be returned strSQL = "Select " & AddQuotes("DAV:displayname") & ", " & _ AddQuotes("DAV:contentclass") & ", " & AddQuotes("DAV:isfolder") _ & ", " & AddQuotes("DAV:href") ' Indicate shallow or deep traversal ' and what URL to begin looking strSQL = strSQL & " FROM SCOPE('SHALLOW traversal of " & AddQuotes(urlQueryFld) & "')" ' Build a filter ' This one restricts the results to folders strSQL = strSQL & " WHERE (" & AddQuotes("DAV:isfolder") & " <> True)" ' Sort the results by the display name ' of the folder in descending order strSQL = strSQL & " ORDER BY " & AddQuotes("DAV:displayname") & " DESC" 'Create a Recordset object rst = New ADODB.Recordset() With rst 'Open Recordset based on the SQL string .Open(strSQL, cnn) End With '将查询结果封装到DataTable,然后将DataTable封装到DataSet以便查看结果 Dim objDataTable As DataTable Dim objDS As New DataSet("tab") objDataTable = objDS.Tables.Add("email") 'objDS.Tables.Add(objDataTable) '//邮件文件编号、邮件文件名、发送到、接收者、抄送、(密件抄送) objDataTable.Columns.Add("ID", Type.GetType("System.Int32")) objDataTable.Columns.Add("displayname", Type.GetType("System.String")) objDataTable.Columns.Add("From", Type.GetType("System.String")) objDataTable.Columns.Add("To", Type.GetType("System.String")) objDataTable.Columns.Add("CC", Type.GetType("System.String")) '''objDataTable.Columns.Add("BCC", Type.GetType("System.String")) '''objDataTable.Columns.Add("Reply_to", Type.GetType("System.String")) '//发送者Email、发送者名称、 objDataTable.Columns.Add("FromName", Type.GetType("System.String")) objDataTable.Columns.Add("FromEmail", Type.GetType("System.String")) objDataTable.Columns.Add("ToName", Type.GetType("System.String")) objDataTable.Columns.Add("CCName", Type.GetType("System.String")) '''objDataTable.Columns.Add("BCCName", Type.GetType("System.String")) '//主题、正文、Html正文、发送时间、接受时间、邮件大小 objDataTable.Columns.Add("displaySubject", Type.GetType("System.String")) objDataTable.Columns.Add("Subject", Type.GetType("System.String")) objDataTable.Columns.Add("Text", Type.GetType("System.String")) objDataTable.Columns.Add("htmlText", Type.GetType("System.String")) objDataTable.Columns.Add("SenderDate", Type.GetType("System.String")) objDataTable.Columns.Add("receivedDate", Type.GetType("System.String")) objDataTable.Columns.Add("length", Type.GetType("System.String")) '//附件总数、附件名称、是否已读、重要性、优先级 objDataTable.Columns.Add("AttachmentCount", Type.GetType("System.Int32")) objDataTable.Columns.Add("AttachmentFilename", Type.GetType("System.String")) objDataTable.Columns.Add("read", Type.GetType("System.Boolean")) objDataTable.Columns.Add("importance", Type.GetType("System.Int32")) '//(0,1,2,3..) 'objDataTable.Columns.Add("priority", Type.GetType("System.Int32")) Dim workRow As DataRow
'附件数量和名字 Dim atch As Int16 Dim atchFileName As String
Dim i As Integer = 1 Dim fd As ADODB.Field Dim Item, name, val As String Do Until rst.EOF Item = rst.Fields("DAV:displayname").Value Dim email As String email = strFolderAndItemName(Item) 'Item = domainDC
With New ADODB.Record()
.Open(urlQueryFld & email & "/") workRow = objDataTable.NewRow() For Each fd In .Fields name = fd.Name Select Case name Case "DAV:displayname" '//displayname workRow("displayname") = fd.Value Case "urn:schemas:httpmail:from" '//Form workRow("From") = fd.Value Case "urn:schemas:httpmail:to" '//TO workRow("To") = fd.Value Case "urn:schemas:httpmail:cc" '//CC workRow("CC") = fd.Value 'Case "urn:schemas:httpmail:bcc" ' '//BCC ' workRow("BCC") = fd.Value Case "urn:schemas:httpmail:displayto" '//TOName workRow("ToName") = fd.Value Case "urn:schemas:httpmail:displaycc" '//CCname workRow("CCName") = fd.Value 'Case "urn:schemas:httpmail:displaybcc" ' '//BCCname ' workRow("BCCName") = fd.Value 'Case "urn:schemas:httpmail:reply-to" ' '//Subject '' workRow("Reply_to") = fd.Value Case "urn:schemas:httpmail:subject" '//Subject ''Dim subject As String ''Try '' subject = fd.Value '' If subject = "" Or subject = Nothing Then '' subject = "无主题!" '' End If ''Catch '' subject = "无主题!" ''End Try workRow("Subject") = fd.Value workRow("displaySubject") = Left(fd.Value, 16) Case "urn:schemas:httpmail:textdescription" '//Text workRow("Text") = fd.Value Case "urn:schemas:httpmail:htmldescription" '//Text workRow("htmlText") = fd.Value Case "urn:schemas:httpmail:date" '//SenderDate workRow("SenderDate") = IsDate(fd.Value) Case "urn:schemas:httpmail:datereceived" '//receivedDate workRow("receivedDate") = IsDate(fd.Value) Case "DAV:getcontentlength" '//length If fd.Value >= 1024 Then workRow("length") = Str(fd.Value \ 1024) & "KB" Else workRow("length") = Str(fd.Value) & "B" End If Case "urn:schemas:httpmail:fromemail" '//FromEmail workRow("FromEmail") = fd.Value Case "urn:schemas:httpmail:fromname" '//FromName workRow("Fromname") = fd.Value Case "urn:schemas:httpmail:read" '//read 'If fd.Value = True Then ' workRow("read") = "0" 'ElseIf fd.Value = False Then ' workRow("read") = "1" 'End If workRow("read") = fd.Value Case "urn:schemas:httpmail:importance" workRow("importance") = fd.Value 'Case "urn:schemas:httpmail:priority" ' workRow("priority") = fd.Value Case "urn:schemas:httpmail:hasattachment" If fd.Value = True Then atch = AttachmentCount(urlQueryFld & email & "/") atchFileName = AttachmentFileName(urlQueryFld & email & "/") Else atch = 0 atchFileName = "" End If workRow("AttachmentCount") = atch workRow("AttachmentFilename") = atchFileName End Select Next workRow("ID") = i objDataTable.Rows.Add(workRow) i = i + 1 End With
rst.MoveNext() Loop ' Close the ADO object rst.Close() cnn.Close() ' Release memory used by object variables rst = Nothing cnn = Nothing IGetItemFromInbox=objDS End Function
如果你已经具备了这些条件。那就说第二点
验证用户就是验证用户的用户名密码信息,这里你可以读取活动目录(Active dirsctory)中的具有mailbox的用户的信息,去你需要的用户的用户名密码和登陆的时候的用户名密码作比较,一般这种速度较慢,所以不采用,建议将用户名密码存放于Exchange的wss中或放到sql server或access或其他关系型数据库中再访问验证。
对于读取邮件的详细信息你可以看Exchange SDK,上面有例子,很详细。
发邮件也有例子,发邮件很简单。不需要设置,气体是你的Exchange有固定域名和IP地址,不然只能局域网里面发了。
但是如何读取活动目录中的具有mailbox的用户的信息,这方面我还不知道,还请 storm97(风暴不再) 多多指教!谢谢!!
1.active directory users and computers里进行设置2.NetCredentials3.用dav 发送request~~,接受response~~4.system.web.mail..... 应该不难~~
请问这个指的是什么?我不太清楚,我在VS.NET的帮助中索引了一下,没找到,麻请告之,谢谢!
===============================================3.用dav 发送request~~,接受response~~===============================================
同样,dav我也不知道是指的什么,恕我太菜。。
===============================================
下面是获取邮箱内邮件的例子,有点长,我分几段发,希望对你有帮助Public Function IGetItemFromInbox() As DataSet
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim urlQueryFld As String
Dim strSQL As String
urlQueryFld = "file://./backofficestorage/<domain name>/<user name>/mbx/administrator/收件箱/"
cnn = New ADODB.Connection()
With cnn
.Provider = "exoledb.datasource"
.Open(urlQueryFld)
End With '查询语句可以根据需要进行修改
' Select the properties to be returned
strSQL = "Select " & AddQuotes("DAV:displayname") & ", " & _
AddQuotes("DAV:contentclass") & ", " & AddQuotes("DAV:isfolder") _
& ", " & AddQuotes("DAV:href")
' Indicate shallow or deep traversal
' and what URL to begin looking
strSQL = strSQL & " FROM SCOPE('SHALLOW traversal of " & AddQuotes(urlQueryFld) & "')"
' Build a filter
' This one restricts the results to folders
strSQL = strSQL & " WHERE (" & AddQuotes("DAV:isfolder") & " <> True)"
' Sort the results by the display name
' of the folder in descending order
strSQL = strSQL & " ORDER BY " & AddQuotes("DAV:displayname") & " DESC" 'Create a Recordset object
rst = New ADODB.Recordset() With rst
'Open Recordset based on the SQL string
.Open(strSQL, cnn)
End With '将查询结果封装到DataTable,然后将DataTable封装到DataSet以便查看结果
Dim objDataTable As DataTable
Dim objDS As New DataSet("tab") objDataTable = objDS.Tables.Add("email")
'objDS.Tables.Add(objDataTable) '//邮件文件编号、邮件文件名、发送到、接收者、抄送、(密件抄送)
objDataTable.Columns.Add("ID", Type.GetType("System.Int32"))
objDataTable.Columns.Add("displayname", Type.GetType("System.String"))
objDataTable.Columns.Add("From", Type.GetType("System.String"))
objDataTable.Columns.Add("To", Type.GetType("System.String"))
objDataTable.Columns.Add("CC", Type.GetType("System.String"))
'''objDataTable.Columns.Add("BCC", Type.GetType("System.String"))
'''objDataTable.Columns.Add("Reply_to", Type.GetType("System.String")) '//发送者Email、发送者名称、
objDataTable.Columns.Add("FromName", Type.GetType("System.String"))
objDataTable.Columns.Add("FromEmail", Type.GetType("System.String"))
objDataTable.Columns.Add("ToName", Type.GetType("System.String"))
objDataTable.Columns.Add("CCName", Type.GetType("System.String"))
'''objDataTable.Columns.Add("BCCName", Type.GetType("System.String")) '//主题、正文、Html正文、发送时间、接受时间、邮件大小
objDataTable.Columns.Add("displaySubject", Type.GetType("System.String"))
objDataTable.Columns.Add("Subject", Type.GetType("System.String"))
objDataTable.Columns.Add("Text", Type.GetType("System.String"))
objDataTable.Columns.Add("htmlText", Type.GetType("System.String"))
objDataTable.Columns.Add("SenderDate", Type.GetType("System.String"))
objDataTable.Columns.Add("receivedDate", Type.GetType("System.String"))
objDataTable.Columns.Add("length", Type.GetType("System.String")) '//附件总数、附件名称、是否已读、重要性、优先级
objDataTable.Columns.Add("AttachmentCount", Type.GetType("System.Int32"))
objDataTable.Columns.Add("AttachmentFilename", Type.GetType("System.String"))
objDataTable.Columns.Add("read", Type.GetType("System.Boolean"))
objDataTable.Columns.Add("importance", Type.GetType("System.Int32")) '//(0,1,2,3..)
'objDataTable.Columns.Add("priority", Type.GetType("System.Int32")) Dim workRow As DataRow
Dim atch As Int16
Dim atchFileName As String
Dim i As Integer = 1 Dim fd As ADODB.Field
Dim Item, name, val As String
Do Until rst.EOF
Item = rst.Fields("DAV:displayname").Value Dim email As String
email = strFolderAndItemName(Item) 'Item = domainDC
With New ADODB.Record()
.Open(urlQueryFld & email & "/")
workRow = objDataTable.NewRow()
For Each fd In .Fields
name = fd.Name Select Case name
Case "DAV:displayname"
'//displayname
workRow("displayname") = fd.Value
Case "urn:schemas:httpmail:from"
'//Form
workRow("From") = fd.Value
Case "urn:schemas:httpmail:to"
'//TO
workRow("To") = fd.Value
Case "urn:schemas:httpmail:cc"
'//CC
workRow("CC") = fd.Value
'Case "urn:schemas:httpmail:bcc"
' '//BCC
' workRow("BCC") = fd.Value
Case "urn:schemas:httpmail:displayto"
'//TOName
workRow("ToName") = fd.Value
Case "urn:schemas:httpmail:displaycc"
'//CCname
workRow("CCName") = fd.Value
'Case "urn:schemas:httpmail:displaybcc"
' '//BCCname
' workRow("BCCName") = fd.Value 'Case "urn:schemas:httpmail:reply-to"
' '//Subject
'' workRow("Reply_to") = fd.Value Case "urn:schemas:httpmail:subject"
'//Subject
''Dim subject As String
''Try
'' subject = fd.Value
'' If subject = "" Or subject = Nothing Then
'' subject = "无主题!"
'' End If
''Catch
'' subject = "无主题!"
''End Try workRow("Subject") = fd.Value
workRow("displaySubject") = Left(fd.Value, 16)
Case "urn:schemas:httpmail:textdescription"
'//Text
workRow("Text") = fd.Value
Case "urn:schemas:httpmail:htmldescription"
'//Text
workRow("htmlText") = fd.Value
Case "urn:schemas:httpmail:date"
'//SenderDate
workRow("SenderDate") = IsDate(fd.Value)
Case "urn:schemas:httpmail:datereceived"
'//receivedDate
workRow("receivedDate") = IsDate(fd.Value)
Case "DAV:getcontentlength"
'//length
If fd.Value >= 1024 Then
workRow("length") = Str(fd.Value \ 1024) & "KB"
Else
workRow("length") = Str(fd.Value) & "B"
End If
Case "urn:schemas:httpmail:fromemail"
'//FromEmail
workRow("FromEmail") = fd.Value
Case "urn:schemas:httpmail:fromname"
'//FromName
workRow("Fromname") = fd.Value
Case "urn:schemas:httpmail:read"
'//read
'If fd.Value = True Then
' workRow("read") = "0"
'ElseIf fd.Value = False Then
' workRow("read") = "1"
'End If
workRow("read") = fd.Value
Case "urn:schemas:httpmail:importance"
workRow("importance") = fd.Value 'Case "urn:schemas:httpmail:priority"
' workRow("priority") = fd.Value Case "urn:schemas:httpmail:hasattachment"
If fd.Value = True Then
atch = AttachmentCount(urlQueryFld & email & "/")
atchFileName = AttachmentFileName(urlQueryFld & email & "/")
Else
atch = 0
atchFileName = ""
End If
workRow("AttachmentCount") = atch
workRow("AttachmentFilename") = atchFileName
End Select
Next workRow("ID") = i
objDataTable.Rows.Add(workRow)
i = i + 1 End With
Loop ' Close the ADO object rst.Close()
cnn.Close()
' Release memory used by object variables
rst = Nothing
cnn = Nothing IGetItemFromInbox=objDS
End Function
Function strFolderAndItemName(ByVal oldFolderAndItemName As String) As String
Dim email As String
Dim domTokens domTokens = Split(oldFolderAndItemName, "%", -1, 1)
email = Join(domTokens, "%25") domTokens = Split(email, ":", -1, 1)
email = Join(domTokens, "%3A") domTokens = Split(email, "*", -1, 1)
email = Join(domTokens, "%2A") domTokens = Split(email, "|", -1, 1)
email = Join(domTokens, "%7C") domTokens = Split(email, "\", -1, 1)
email = Join(domTokens, "_xf8fe_") domTokens = Split(email, "<", -1, 1)
email = Join(domTokens, "%3C") domTokens = Split(email, ">", -1, 1)
email = Join(domTokens, "%3E") domTokens = Split(email, "?", -1, 1)
email = Join(domTokens, "%3F") domTokens = Split(email, Chr(34), -1, 1)
email = Join(domTokens, "%22") domTokens = Split(email, "/", -1, 1)
email = Join(domTokens, "_xf8ff_")
strFolderAndItemName = email
End Function