2009-07-28 16 views
1

J'utilise webDAV et .Net 2.0 pour recueillir des informations sur un compte de messagerie sur un serveur exécutant Exchange Server 2003. J'ai accès à l'uri qui ressemble à ceci:Comment copier un fichier .eml lorsque j'ai l'uri?

http://my.mailserver.com/exchange/user/Inbox/someImportantEmail.EML

J'ai essayé de copier le fichier comme donc:

Dim uri As New Uri(uriNode.InnerText) 
If uri.IsFile() Then 
    Dim fn As String = Path.GetFileName(uri.LocalPath) 
    System.IO.File.Copy(uri.LocalPath, "c:\" & fn) 
End If 

Mais uri.IsFile() retourne toujours false. Une autre chose que j'ai noté est que le chemin d'uri.Local est

/exchange/user/Inbox/someImportantEmail.EML

I cette partie de mon problème? Comment puis-je copier le fichier .eml du serveur d'échange sur le disque dur local?

EDIT:
J'ai mis en AnthonyWJones suggestion

Dim cred As New System.Net.CredentialCache 
    cred.Add(uri, "BASIC", New System.Net.NetworkCredential(_username, _password, _domain)) 
    Dim wc As New WebClient() 
    wc.Credentials = cred 
    wc.DownloadFile(uri, "c:\testEML.EML") 

et alors que cela ne crée le fichier testEML.EML sur mon c ... lecteur voici le contenu du fichier EML:

 
<!--Copyright (c) 2000-2003 Microsoft Corporation. All rights reserved.--> 
<!--CURRENT FILE== "NON-IE5" "NON-WIN32" frameset --> 
<!--CURRENT TEMPLATE == frameset.00000000 --> 
<HTML> 
<HEAD> 
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8"> 
<TITLE>Microsoft Outlook Web Access</TITLE> 
<BASE href="http://my.mailserver.com/exchange/user/"> 
</HEAD> 
<SCRIPT language="JavaScript"> 
var g_iNewWindowWidth = 700; 
var g_iNewWindowHeight = 500; 
var g_fWarnOnLogOff=false; 
function WarnOnLogOff() 
{ 
if (g_fWarnOnLogOff) 
alert("To help protect your mailbox from unauthorized access, close all browser windows when you finish using Outlook Web Access."); 
} 
</SCRIPT> 
<FRAMESET OnUnload="WarnOnLogOff()" framespacing="3" cols="190,*"><FRAME bordercolor="#3D5FA3" name="navbar" title="Navigation" src="Inbox/?Cmd=navbar" marginheight="0" marginwidth="0" scrolling="auto" border="1"><FRAME name="viewer" title="Contents" src="Inbox/FW:.EML?Cmd=open" scrolling="auto"> 
<NOFRAMES> 
<BODY><P>This page uses frames, but your browser doesn't support them.</P></BODY> 
</NOFRAMES> 
</FRAMESET> 
</HTML> 

Qu'est-ce qui est avec l'accès non autorisé ??

Répondre

1

Ce code j'ai fini avec ce fait exactement ce que je avais besoin.

Dim msgPath As String = message.Path 
    Dim msgURI As String = message.URI 
    Dim msgID As String = message.ID 

    MyCredentialCache = New System.Net.CredentialCache() 
    MyCredentialCache.Add(New System.Uri(_inboxPath), "BASIC", New System.Net.NetworkCredential(_username, _password, _domain)) 

    Dim request As WebRequest = WebRequest.Create(msgURI) 
    request.Credentials = MyCredentialCache 
    request.ContentType = "text/xml" 
    request.Headers.Add("Translate", "f") 
    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse) 

    Dim file As FileStream = New FileStream(msgPath, FileMode.CreateNew) 
    Dim stream As Stream = response.GetResponseStream() 

    Dim buffer() As Byte = New Byte(4096) {} 
    Dim len As Integer = stream.Read(buffer, 0, buffer.Length) 

    While (len > 0) 
     file.Write(buffer, 0, len) 
     len = stream.Read(buffer, 0, buffer.Length) 
    End While 

    file.Close() 
    stream.Close() 
1

Essayez: -

Dim webClient As New WebClient() 
webClient.UseDefaultCredentials = True 
webClient.DownloadFile(uri, fn) 

Vous ne pouvez pas utiliser le fichier standard IO pour copier une ressource http

Questions connexes