![]() |
| 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é. | |||||||
|
|||||||
| Exchange Server Forum d'entraide Microsoft Exchange Server : logiciel collaboratif pour serveur de messagerie électronique |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre régulier
![]() Date d'inscription: février 2008
Messages: 125
|
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
Merci d'avance Dernière modification par djorfe ; 06/05/2008 à 11h39 |
|
|
|
|
|
#2 (permalink) |
|
Invité de passage
![]() Date d'inscription: mai 2008
Messages: 8
|
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 |
|
|
|
![]() |
![]() |
||
get put attachment webdav sur exchange
|
||
| Outils de la discussion | |
|
|