0

我正在尝试通过 Vbscript 创建文件夹。

我对 Vbscript 很陌生。

无法理解为什么此代码返回:该文件夹尚未创建。状态为不支持的媒体类型。

我把它带到这里http://blogs.msdn.com/b/webdav_101/archive/2008/03/12/howto-vb-an-example-to-create-a-public-folder-with-storage-limit-设置.aspx

代码[Vbscript]:

cmdMakeFolder_Click

Private Sub cmdMakeFolder_Click()
    Dim XMLreq
    Set XMLreq = createobject("MSXML2.XMLHTTP.3.0")
    Dim sReq
    Dim parsePhone
    Dim sSourceURL

    sSourceURL = "https://shkur.webdav.hidrive.strato.com/users/shkur/"
    ' Note: This URL is broken down as:
    '     myexserver is the Exchange box name
    '     MYDOM.EXTEST.MYCOMP.COM  is the full domain name the Exchange box is in.
    '     Exadmin/admin is a special designation giving the login user higher level privs.
    ' Exchange explorer may/may not need the %20 in PUBLIC%20FOLDERS
    ' The account you use to log in with Must have full blown Exchange admin privs and be 
    ' a domain acct.

    'XMLreq.open "MKCOL", sSourceURL, False, "Administrator", "Pxxxx" 
          ' If the Exchange is the DC, you probably dont have to specify the DC to login
    XMLreq.open "MKCOL", sSourceURL, False, "login", "password" 
          ' Here Exchange box is not the DC

    XMLreq.setRequestHeader "Content-Type", "text/xml"

    sReq = "<?xml version='1.0'?>"
    sReq = sReq & "<a:propertyupdate xmlns:a='DAV:' xmlns:e='http://schemas.microsoft.com/exchange/' " & _
                    "xmlns:p='http://schemas.microsoft.com/mapi/proptag/'>"
    sReq = sReq & "<a:set><a:prop>" & vbCrLf
    sReq = sReq & "<e:outlookfolderclass>IPF.Folder</e:outlookfolderclass>" & vbCrLf    
          ' Folder class for outlook
    sReq = sReq & "<a:contentclass>urn:content-classes:folder</a:contentclass>" & vbCrLf  
          ' Folder content class
    sReq = sReq & "<a:isreadonly>1</a:isreadonly>" & vbCrLf  ' Read only
    sReq = sReq & "<a:ishidden>1</a:ishidden>" & vbCrLf       ' Hidden

     sReq = sReq & "<p:x67790003>1</p:x67790003>" & vbCrLf 
          'Use the quotas specified by other properties.
     sReq = sReq & "<e:storagequotaissuewarninglimit>200</e:storagequotaissuewarninglimit>" & vbCrLf 
          'Issue warning at (Kb).
     sReq = sReq & "<p:x67210003>1</p:x67210003>" & vbCrLf  'Prohibit post at (Kb).
     sReq = sReq & "<p:x67220003>1</p:x67220003>" & vbCrLf  'Maximum item size (Kb).

    sReq = sReq & "<e:addressbookdisplayname>qwe</e:addressbookdisplayname>" & vbCrLf

    sReq = sReq & "</a:prop></a:set></a:propertyupdate>"

    XMLreq.send sReq
    'Debug.Print "xmlReq.Status = " & XMLreq.Status
    If XMLreq.Status = "201" Or XMLreq.Status = "207" Then
        MsgBox "The folder has been created.  Status is " & XMLreq.statusText, vbCritical, "Folder Created!!"
    Else
        ' Note: Error 405 can mean permissions problem on item already exists.
        MsgBox "The folder has not been created.  Status is " & XMLreq.statusText, vbCritical, " Folder not Created!!"
    End If
End Sub
4

3 回答 3

2

该响应状态(415 - 不支持的媒体类型)意味着服务器已拒绝请求实体。在您的请求中,请求实体是 XML。请注意,“普通”MKCOL 请求在正文中不使用 XML,只有扩展的 MKCOL 使用,并非在所有服务器上都实现。

所以很可能只是您使用的 webdav 服务器不支持扩展 MKCOL

https://datatracker.ietf.org/doc/html/draft-ietf-vcarddav-webdav-mkcol-06

于 2013-07-03T21:17:23.480 回答
0

看来您正在尝试将 MKCOL 的非标准扩展(Microsoft 特定)与不理解它的服务器一起使用。

于 2013-07-04T07:00:33.397 回答
0

отвечаю сам себе вот так работает!

    cmdMakeFolder_Click

Private Sub cmdMakeFolder_Click()
    Dim XMLreq
    Set XMLreq = createobject("MSXML2.XMLHTTP.3.0")
    'Set XMLreq = createobject("MSXML2.XMLHTTP.4.0")
    Dim sReq
    Dim parsePhone
    Dim sSourceURL

    sSourceURL = "https://shkur.webdav.hidrive.strato.com/users/shkur/qweer/"
    ' Note: This URL is broken down as:
    '     myexserver is the Exchange box name
    '     MYDOM.EXTEST.MYCOMP.COM  is the full domain name the Exchange box is in.
    '     Exadmin/admin is a special designation giving the login user higher level privs.
    ' Exchange explorer may/may not need the %20 in PUBLIC%20FOLDERS
    ' The account you use to log in with Must have full blown Exchange admin privs and be 
    ' a domain acct.

    'XMLreq.open "MKCOL", sSourceURL, False, "Administrator", "Pxxxx" 
          ' If the Exchange is the DC, you probably dont have to specify the DC to login
    XMLreq.open "MKCOL", sSourceURL, False, "login", "password" 
          ' Here Exchange box is not the DC

    XMLreq.setRequestHeader "Content-Type", "text/xml"

    'sReq = "<?xml version='1.0'?><a:propertyupdate xmlns:a='DAV:' xmlns:e='http://schemas.microsoft.com/exchange/' xmlns:p='http://schemas.microsoft.com/mapi/proptag/'><a:set><a:prop><e:outlookfolderclass>IPF.Folder</e:outlookfolderclass><a:contentclass>urn:content-classes:folder</a:contentclass><a:isreadonly>1</a:isreadonly><a:ishidden>1</a:ishidden><p:x67790003>1</p:x67790003><e:storagequotaissuewarninglimit>200</e:storagequotaissuewarninglimit><p:x67210003>1</p:x67210003><p:x67220003>1</p:x67220003><e:addressbookdisplayname>qwe</e:addressbookdisplayname></a:prop></a:set></a:propertyupdate>"

    XMLreq.send sReq
    'Debug.Print "xmlReq.Status = " & XMLreq.Status
    If XMLreq.Status = "201" Or XMLreq.Status = "207" Then
        MsgBox "The folder has been created.  Status is " & XMLreq.statusText, vbCritical, "Folder Created!!"
    Else
        ' Note: Error 405 can mean permissions problem on item already exists.
        MsgBox "The folder has not been created.  Status is " & XMLreq.statusText, vbCritical, " Folder not Created!!"
    End If
End Sub
于 2013-07-03T23:29:18.683 回答