Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Windows > Win Serveur > Exchange Server

Exchange Server Forum d'entraide Microsoft Exchange Server : logiciel collaboratif pour serveur de messagerie électronique

Réponse
 
Outils de la discussion
Vieux 06/05/2008, 10h46   #1 (permalink)
Membre régulier
 
Date d'inscription: février 2008
Messages: 125
Par défaut get put attachment webdav sur exchange

Boujour tout le monde, je suis actuellement sur un projet de synchronisation de bal exchange, et je suis tombé sur un os depuis pas mal de temps, je suis actuellement en train de sychroniser les mails (inbox), la synchros se fait parfaitement mais je n'arrive pas à copier les pièces jointes, aprés plusieur recherche je suis tombé sur un scripte qui prend le la pièce jointe qui la met sur mon disc et ensuite la renvoie sur l'autre serveur,mais il le met pas sur le mail, j'ai donc un deuxième mail nommé par le sujet de l'ancien mail en .EML suivit du nom de la pièce, et dés que je veux l'ouvrire il me dit que le documment est vide, alors que sur mon poste j'ai bien toute les données....
Voici mon code en vb.net:
Code :
Option Explicit On
Option Strict On
Imports System.Xml
Imports System.Net
Imports System.Xml.Xsl
Imports MSXML2
Imports System.IO

Public Class  GetSetAttachmentsAtoB

    Public Shared Sub ProcessMail(ByVal MailURL As String, ByVal xmlIndex As String)

        Dim XmlDoc As XmlDocument = New XmlDocument()
        Dim XmlDocRecPathListe As XmlDocument = New XmlDocument()
        Dim UserExchange As String
        Dim UserExchangeB As String
        Dim elementListePathA As XmlNodeList
        Dim elementListePathB As XmlNodeList

        'récuperation valeur serveurA
        XmlDoc.Load("ParametresExchange.xml")
        Dim elementRep As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("serveur_A")
        Dim elementRepB As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("serveur_B")

        'server a
        Dim ServeurExchange As String = elementRep.Item(0).SelectSingleNode("serveurexchange").InnerText
        Dim MotDePasseExchange As String = elementRep.Item(0).SelectSingleNode("motdepasse").InnerText
        Dim DomaineExchange As String = elementRep.Item(0).SelectSingleNode("domaineexchange").InnerText
        Dim UserAdminExchange As String = elementRep.Item(0).SelectSingleNode("userexchange").InnerText
        'server b
        Dim ServeurExchangeb As String = elementRepB.Item(0).SelectSingleNode("serveurexchange").InnerText
        Dim MotDePasseExchangeb As String = elementRepB.Item(0).SelectSingleNode("motdepasse").InnerText
        Dim DomaineExchangeb As String = elementRepB.Item(0).SelectSingleNode("domaineexchange").InnerText
        Dim UserAdminExchangeb As String = elementRepB.Item(0).SelectSingleNode("userexchange").InnerText

        'récuperation valeur nom user
        Dim elementPath As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("path")

        Dim elemantPathListe As String = elementPath.Item(0).SelectSingleNode("listeuserpath").InnerText
        XmlDocRecPathListe.Load(elemantPathListe)
        elementListePathA = XmlDocRecPathListe.DocumentElement.GetElementsByTagName("userserver_a")
        elementListePathB = XmlDocRecPathListe.DocumentElement.GetElementsByTagName("userserver_b")
        UserExchange = ""
        UserExchange = elementListePathA.Item(0).SelectSingleNode(xmlIndex).InnerText
        UserExchangeB = elementListePathB.Item(0).SelectSingleNode(xmlIndex).InnerText


        Dim XmlHttp60 As New MSXML2.ServerXMLHTTP60

        Dim XmlDataDocument As New System.Xml.XmlDataDocument

        Dim XmlNodeList As XmlNodeList = Nothing

        Dim XmlNode As System.Xml.XmlNode = Nothing

        Dim ResponseText As String = ""

        Dim iNode As Integer = 0

        ' Open exchange and request list of emails from a directory.

        Dim newMail As String = MailURL.Replace(UserAdminExchange, UserExchange)

        XmlHttp60.open("PROPFIND", MailURL, False, UserAdminExchange, MotDePasseExchange)

        XmlHttp60.setRequestHeader("Depth", "1")

        XmlHttp60.setRequestHeader("Content-type", "xml")

        XmlHttp60.send()

        ' Store the data and open it in an xml document object.

        ResponseText = XmlHttp60.responseText

        XmlDataDocument.LoadXml(ResponseText)

        ' Get a list of email nodes.

        XmlNodeList = XmlDataDocument.GetElementsByTagName("a:href")

        On Error Resume Next

        ' Loop through the nodes and process each email.

        For iNode = XmlNodeList.Count - 1 To 0 Step -1

            XmlNode = XmlNodeList.Item(iNode)

            ProcessEmail(XmlNode, xmlIndex, MailURL)

        Next

        XmlHttp60 = Nothing

        XmlDataDocument = Nothing

        XmlNodeList = Nothing

        XmlNode = Nothing

        ''MsgBox("ProcessMail")


    End Sub

    Public Shared Sub ProcessEmail(ByVal XmlNode As System.Xml.XmlNode, ByVal xmlIndex As String, ByVal MailURL As String)

        Dim XmlDoc As XmlDocument = New XmlDocument()
        Dim XmlDocRecPathListe As XmlDocument = New XmlDocument()
        Dim UserExchange As String
        Dim elementListePathA As XmlNodeList
        Dim elementListePathB As XmlNodeList

        'récuperation valeur serveurA
        XmlDoc.Load("ParametresExchange.xml")
        Dim elementRep As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("serveur_A")

        Dim ServeurExchange As String = elementRep.Item(0).SelectSingleNode("serveurexchange").InnerText
        Dim MotDePasseExchange As String = elementRep.Item(0).SelectSingleNode("motdepasse").InnerText
        Dim DomaineExchange As String = elementRep.Item(0).SelectSingleNode("domaineexchange").InnerText
        Dim UserAdminExchange As String = elementRep.Item(0).SelectSingleNode("userexchange").InnerText

        'récuperation valeur nom user
        Dim elementPath As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("path")

        Dim elemantPathListe As String = elementPath.Item(0).SelectSingleNode("listeuserpath").InnerText
        XmlDocRecPathListe.Load(elemantPathListe)
        elementListePathA = XmlDocRecPathListe.DocumentElement.GetElementsByTagName("userserver_a")
        elementListePathB = XmlDocRecPathListe.DocumentElement.GetElementsByTagName("userserver_b")
        UserExchange = ""
        UserExchange = elementListePathA.Item(0).SelectSingleNode(xmlIndex).InnerText


        Dim XmlHttp60 As New MSXML2.ServerXMLHTTP60

        Dim XmlDataDocument As New System.Xml.XmlDataDocument

        Dim XmlNodeList As XmlNodeList = Nothing

        Dim XmlAttachmentNameList As XmlNodeList = Nothing

        Dim XmlAttachmentNode As System.Xml.XmlNode = Nothing

        Dim XmlAttachmentNameNode As System.Xml.XmlNode = Nothing

        Dim ResponseText As String = ""

        Dim iNode As Integer = 0



        XmlHttp60.open("X-MS-ENUMATTS", XmlNode.InnerText, False, UserAdminExchange, MotDePasseExchange)

        XmlHttp60.setRequestHeader("Depth", "1")

        XmlHttp60.setRequestHeader("Content-type", "xml")

        XmlHttp60.send()

        ' Store the data and open it in an xml document object.

        ResponseText = XmlHttp60.responseText

        XmlDataDocument.LoadXml(ResponseText)

        ' Get a list of attachment nodes.

        XmlNodeList = XmlDataDocument.GetElementsByTagName("a:href")

        XmlAttachmentNameList = XmlDataDocument.GetElementsByTagName("e:attachmentfilename")

        ' Loop through the nodes and process each email.

        For iNode = XmlNodeList.Count - 1 To 0 Step -1

            XmlAttachmentNode = XmlNodeList.Item(iNode)

            XmlAttachmentNameNode = XmlAttachmentNameList.Item(iNode)

            ExtractAttachment(XmlAttachmentNode, XmlAttachmentNameNode, xmlIndex, MailURL)

        Next

        XmlHttp60 = Nothing

        XmlDataDocument = Nothing

        XmlNodeList = Nothing

        XmlNode = Nothing


    End Sub

    Public Shared Sub ExtractAttachment(ByVal XmlNode As System.Xml.XmlNode, ByVal FileNameNode As System.Xml.XmlNode, ByVal xmlIndex As String, ByVal MailURL As String)
        Dim XmlDoc As XmlDocument = New XmlDocument()
        Dim XmlDocRecPathListe As XmlDocument = New XmlDocument()
        Dim UserExchange As String
        Dim UserExchangeB As String
        Dim elementListePathA As XmlNodeList
        Dim elementListePathB As XmlNodeList

        'récuperation valeur serveurA
        XmlDoc.Load("ParametresExchange.xml")
        Dim elementRep As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("serveur_A")
        Dim elementRepB As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("serveur_B")

        'server a
        Dim ServeurExchange As String = elementRep.Item(0).SelectSingleNode("serveurexchange").InnerText
        Dim MotDePasseExchange As String = elementRep.Item(0).SelectSingleNode("motdepasse").InnerText
        Dim DomaineExchange As String = elementRep.Item(0).SelectSingleNode("domaineexchange").InnerText
        Dim UserAdminExchange As String = elementRep.Item(0).SelectSingleNode("userexchange").InnerText
        'server b
        Dim ServeurExchangeb As String = elementRepB.Item(0).SelectSingleNode("serveurexchange").InnerText
        Dim MotDePasseExchangeb As String = elementRepB.Item(0).SelectSingleNode("motdepasse").InnerText
        Dim DomaineExchangeb As String = elementRepB.Item(0).SelectSingleNode("domaineexchange").InnerText
        Dim UserAdminExchangeb As String = elementRepB.Item(0).SelectSingleNode("userexchange").InnerText

        'récuperation valeur nom user
        Dim elementPath As XmlNodeList = XmlDoc.DocumentElement.GetElementsByTagName("path")

        Dim elemantPathListe As String = elementPath.Item(0).SelectSingleNode("listeuserpath").InnerText
        XmlDocRecPathListe.Load(elemantPathListe)
        elementListePathA = XmlDocRecPathListe.DocumentElement.GetElementsByTagName("userserver_a")
        elementListePathB = XmlDocRecPathListe.DocumentElement.GetElementsByTagName("userserver_b")
        UserExchange = ""
        UserExchange = elementListePathA.Item(0).SelectSingleNode(xmlIndex).InnerText
        UserExchangeB = elementListePathB.Item(0).SelectSingleNode(xmlIndex).InnerText

        Dim Request As System.Net.HttpWebRequest
        Dim Response As System.Net.HttpWebResponse
        Dim Autorisation As System.Net.CredentialCache
        Dim bytes() As Byte
        Dim RequestStream As System.IO.Stream
        Dim ResponseStream As System.IO.Stream
        Dim ResponseXmlDoc As New XmlDataDocument
        Dim XmlHttp60 As MSXML2.XMLHTTP60

        Debug.Print(XmlNode.InnerText)

        XmlHttp60 = New MSXML2.XMLHTTP60

        XmlHttp60.open("GET", XmlNode.InnerText, False, UserAdminExchange, MotDePasseExchange)

        XmlHttp60.send()

        Dim ResponseBody() As Byte = CType(XmlHttp60.responseBody, Byte())
        'MsgBox("ExtractAttachment")
        My.Computer.FileSystem.WriteAllBytes("C:\Documents and Settings\admin\Mes documents\Visual Studio 2008\Projects\Projet_Synchronisation\Controls\bin\" & FileNameNode.InnerText, ResponseBody, False)

        Dim newMail As String = MailURL.Replace(ServeurExchange, ServeurExchangeb)
        Dim newMailUser As String = newMail.Replace(UserExchange, UserExchangeB)

        Debug.Print(XmlNode.InnerText)
        Dim newUrl As String = MailURL.Replace(UserAdminExchangeb, UserExchangeB)
        Autorisation = New System.Net.CredentialCache
        Autorisation.Add(New System.Uri(newMailUser & FileNameNode.InnerText), "NTLM", New System.Net.NetworkCredential(UserAdminExchangeb, MotDePasseExchangeb, DomaineExchangeb))

        Request = CType(System.Net.WebRequest.Create(newMailUser & FileNameNode.InnerText), System.Net.HttpWebRequest)
        Request.Credentials = Autorisation

        'Header
        Request.ContentType = "mage/x-icon" ' "text/html" 
        Request.Method = "PUT"
        bytes = System.Text.Encoding.UTF8.GetBytes(ResponseBody.ToString)
        Request.ContentLength = bytes.Length
        RequestStream = Request.GetRequestStream()
        RequestStream.Write(bytes, 0, bytes.Length)
        RequestStream.Close()
        Request.Headers.Add("Translate", "F")

        'Envoi du SEARCH
        Response = CType(Request.GetResponse(), System.Net.HttpWebResponse)
        'Réponse
        ResponseStream = Response.GetResponseStream()

        ResponseXmlDoc.Load(ResponseStream)
        ''MsgBox("element insérer")
        'Fin de connexion
        ResponseStream.Close()
        Response.Close()


        XmlHttp60 = Nothing

    End Sub


End Class
Sauriez-vous comment fair autrement?

Merci d'avance

Dernière modification par djorfe ; 06/05/2008 à 11h39
djorfe est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/05/2008, 13h20   #2 (permalink)
Invité de passage
 
Date d'inscription: mai 2008
Messages: 8
Par défaut RE

Bonjour,

cela me semble bien compliqué !
Pourquoi ne pas tout simplement utilisé un outil de backuppage ?!

A mon boulot j'utilise ArcServ avec l'agent exchange niveau base de donne et niveau document. Je peux ainsi copier les boîtes mail voir même mail par mail d'un utilisateur donne.

Ainsi tu pourrai les transfèrer sur un autre serveur.

SAY78
SAY78 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Windows > Win Serveur > Exchange Server



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 03h53.