import win32com import win32com.client #depth: 0=immediate depth,1=w/children,infinity=all the way down def return_dav(dav,dav_response=''): if dav.status > 299: raise 'webdav error',str(dav.status)+':'+dav.statusText if dav_response=='dav': return dav elif dav_response=='xml': return dav.responseXML #by default return text return dav.responseText def search_request(url,request,logon='',passwd='',depth=1): dav = win32com.client.Dispatch('Microsoft.XMLHTTP') dav.open('SEARCH',url, 0,logon, passwd) dav.setRequestHeader("Content-type:", "text/xml") dav.setRequestHeader("depth", depth) dav.setRequestHeader("Translate", "f") dav.send(request) return return_dav(dav) def propfind(url,request,logon='',passwd='',depth=1): dav = win32com.client.Dispatch('Microsoft.XMLHTTP') dav.open('PROPFIND',url, 0,logon, passwd) dav.setRequestHeader("Content-type:", "text/xml") dav.setRequestHeader("depth", depth) dav.setRequestHeader("Translate", "f") dav.send(request) return return_dav(dav) def delete(url='',logon='',passwd=''): dav = win32com.client.Dispatch('Microsoft.XMLHTTP') dav.open('DELETE',url, 0,logon, passwd) dav.send() return return_dav(dav) #create a collection def mkcol(url='',logon='',passwd=''): dav = win32com.client.Dispatch('Microsoft.XMLHTTP') dav.open('MKCOL',url,0) dav.setRequestHeader('Content-Type:','text/xml') dav.send() return return_dav(dav) url='http://server/exchange/username/inbox/test' pfind=''' ''' search=''' SELECT "DAV:displayname" FROM "%s" '''%(url) #may need to provide username and password print propfind(url,pfind) print search_request(url,search) mkcol(url+'/test3') #make a folder delete(url+'/test3') #remove a folder