Advertisement
Guest User

Untitled

a guest
Mar 7th, 2016
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.09 KB | None | 0 0
  1. Inbox
  2. --ABC
  3. ----ABC 2
  4. ----ABC 3
  5. --XYZ
  6. ----XYZ 2
  7. --123
  8. ----123 A
  9. ----123 B
  10. ----123 C
  11.  
  12. ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
  13.  
  14. service.AutodiscoverUrl("MyName@MyDomain.com");
  15. Mailbox mb = new Mailbox("MyName@MyDomain.com");
  16.  
  17. FindFoldersResults findResults = service.FindFolders(
  18. WellKnownFolderName.Inbox,
  19. new FolderView(int.MaxValue));
  20.  
  21. foreach (Folder folder in findResults.Folders)
  22. {
  23. Console.WriteLine(folder.DisplayName);
  24. }
  25.  
  26. FindFoldersResults findResults = service.FindFolders(
  27. WellKnownFolderName.Inbox,
  28. new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep });
  29.  
  30. Imports Exchange = Microsoft.Exchange.WebServices.Data
  31.  
  32. Friend Module Main
  33. Public Sub Main()
  34. Dim oService As Exchange.ExchangeService
  35. Dim oUsers As Dictionary(Of String, User)
  36.  
  37. oUsers = New Dictionary(Of String, User)
  38. oUsers.Add("User1", New User("write.to.me1@my.address.com", "Some-Fancy-Password1"))
  39. oUsers.Add("User2", New User("write.to.me2@my.address.com", "Some-Fancy-Password2"))
  40.  
  41. oUsers.ToList.ForEach(Sub(Credential As KeyValuePair(Of String, User))
  42. File.Delete(LOG_FILE_PATH.ToFormat(Credential.Key))
  43. End Sub)
  44.  
  45. oUsers.ToList.ForEach(Sub(Credential As KeyValuePair(Of String, User))
  46. LogFileName = Credential.Key
  47.  
  48. Console.WriteLine("Getting message counts for mailbox [{0}]...", LogFileName)
  49. Console.WriteLine()
  50.  
  51. oService = Service.ConnectToService(Credential.Value)
  52.  
  53. GetAllFolders(oService, LOG_FILE_PATH.ToFormat(Credential.Key))
  54.  
  55. Console.Clear()
  56. End Sub)
  57.  
  58. Console.WriteLine()
  59. Console.Write("Press any key to exit...")
  60. Console.ReadKey()
  61. End Sub
  62.  
  63.  
  64.  
  65. Private Sub GetAllFolders(Service As Exchange.ExchangeService, LogFilePath As String)
  66. Dim oIsHidden As Exchange.ExtendedPropertyDefinition
  67. Dim oFolders As List(Of Exchange.Folder)
  68. Dim oResults As Exchange.FindFoldersResults
  69. Dim lHasMore As Boolean
  70. Dim oChild As Exchange.Folder
  71. Dim oView As Exchange.FolderView
  72.  
  73. Dim _
  74. nPageSize,
  75. nOffSet As Short
  76.  
  77. Dim _
  78. oPaths,
  79. oPath As List(Of String)
  80.  
  81. oIsHidden = New Exchange.ExtendedPropertyDefinition(&H10F4, Exchange.MapiPropertyType.Boolean)
  82. nPageSize = 1000
  83. oFolders = New List(Of Exchange.Folder)
  84. lHasMore = True
  85. nOffSet = 0
  86.  
  87. Do While lHasMore
  88. oView = New Exchange.FolderView(nPageSize, nOffSet, Exchange.OffsetBasePoint.Beginning)
  89. oView.PropertySet = New Exchange.PropertySet(Exchange.BasePropertySet.IdOnly)
  90. oView.PropertySet.Add(oIsHidden)
  91. oView.PropertySet.Add(Exchange.FolderSchema.ParentFolderId)
  92. oView.PropertySet.Add(Exchange.FolderSchema.DisplayName)
  93. oView.PropertySet.Add(Exchange.FolderSchema.FolderClass)
  94. oView.PropertySet.Add(Exchange.FolderSchema.TotalCount)
  95. oView.Traversal = Exchange.FolderTraversal.Deep
  96.  
  97. oResults = Service.FindFolders(Exchange.WellKnownFolderName.MsgFolderRoot, oView)
  98. oFolders.AddRange(oResults.Folders)
  99.  
  100. lHasMore = oResults.MoreAvailable
  101.  
  102. If lHasMore Then
  103. nOffSet += nPageSize
  104. End If
  105. Loop
  106.  
  107. oFolders.RemoveAll(Function(Folder) Folder.ExtendedProperties(0).Value = True)
  108. oFolders.RemoveAll(Function(Folder) Folder.FolderClass <> "IPF.Note")
  109.  
  110. oPaths = New List(Of String)
  111.  
  112. oFolders.ForEach(Sub(Folder)
  113. oChild = Folder
  114. oPath = New List(Of String)
  115.  
  116. Do
  117. oPath.Add(oChild.DisplayName)
  118. oChild = oFolders.SingleOrDefault(Function(Parent) Parent.Id.UniqueId = oChild.ParentFolderId.UniqueId)
  119. Loop While oChild IsNot Nothing
  120.  
  121. oPath.Reverse()
  122. oPaths.Add("{0}{1}{2}".ToFormat(Join(oPath.ToArray, DELIMITER), vbTab, Folder.TotalCount))
  123. End Sub)
  124.  
  125. oPaths.RemoveAll(Function(Path) Path.StartsWith("Sync Issues"))
  126.  
  127. File.WriteAllText(LogFilePath, Join(oPaths.ToArray, vbCrLf))
  128. End Sub
  129.  
  130.  
  131.  
  132. Private LogFileName As String
  133.  
  134. Private Const LOG_FILE_PATH As String = "D:EmailsRemote{0}.txt"
  135. Private Const DELIMITER As String = ""
  136. End Module
  137.  
  138.  
  139.  
  140. Friend Class Service
  141. Public Shared Function ConnectToService(User As User) As Exchange.ExchangeService
  142. Return Service.ConnectToService(User, Nothing)
  143. End Function
  144.  
  145.  
  146.  
  147. Public Shared Function ConnectToService(User As User, Listener As Exchange.ITraceListener) As Exchange.ExchangeService
  148. Dim oService As Exchange.ExchangeService
  149.  
  150. oService = New Exchange.ExchangeService(Exchange.ExchangeVersion.Exchange2013_SP1)
  151. oService.Credentials = New NetworkCredential(User.EmailAddress, User.Password)
  152. oService.AutodiscoverUrl(User.EmailAddress, AddressOf RedirectionUrlValidationCallback)
  153.  
  154. If Listener IsNot Nothing Then
  155. oService.TraceListener = Listener
  156. oService.TraceEnabled = True
  157. oService.TraceFlags = Exchange.TraceFlags.All
  158. End If
  159.  
  160. Return oService
  161. End Function
  162.  
  163.  
  164.  
  165. Private Shared Function RedirectionUrlValidationCallback(RedirectionUrl As String) As Boolean
  166. With New Uri(RedirectionUrl)
  167. Return .Scheme.ToLower = "https"
  168. End With
  169. End Function
  170. End Class
  171.  
  172.  
  173.  
  174. Friend Class User
  175. Public Sub New(EmailAddress As String)
  176. _EmailAddress = EmailAddress
  177. _Password = New SecureString
  178. End Sub
  179.  
  180.  
  181.  
  182. Public Sub New(EmailAddress As String, Password As String)
  183. _EmailAddress = EmailAddress
  184. _Password = New SecureString
  185.  
  186. Password.ToList.ForEach(Sub(Chr As Char)
  187. Me.Password.AppendChar(Chr)
  188. End Sub)
  189.  
  190. Password.MakeReadOnly()
  191. End Sub
  192.  
  193.  
  194.  
  195. Public Shared Function GetUser() As User
  196. Dim sEmailAddress As String
  197. Dim oUserInput As ConsoleKeyInfo
  198.  
  199. Console.Write("Enter email address: ")
  200. sEmailAddress = Console.ReadLine
  201. Console.Write("Enter password: ")
  202.  
  203. GetUser = New User(sEmailAddress)
  204.  
  205. While True
  206. oUserInput = Console.ReadKey(True)
  207.  
  208. If oUserInput.Key = ConsoleKey.Enter Then
  209. Exit While
  210.  
  211. ElseIf oUserInput.Key = ConsoleKey.Escape Then
  212. GetUser.Password.Clear()
  213.  
  214. ElseIf oUserInput.Key = ConsoleKey.Backspace Then
  215. If GetUser.Password.Length <> 0 Then
  216. GetUser.Password.RemoveAt(GetUser.Password.Length - 1)
  217. End If
  218.  
  219. Else
  220. GetUser.Password.AppendChar(oUserInput.KeyChar)
  221. Console.Write("*")
  222.  
  223. End If
  224. End While
  225.  
  226. If GetUser.Password.Length = 0 Then
  227. GetUser = Nothing
  228. Else
  229. GetUser.Password.MakeReadOnly()
  230. Console.WriteLine()
  231. End If
  232. End Function
  233.  
  234.  
  235.  
  236. Public ReadOnly Property EmailAddress As String
  237.  
  238. Public ReadOnly Property Password As SecureString
  239. End Class
  240.  
  241.  
  242.  
  243. Friend Class TraceListener
  244. Implements Exchange.ITraceListener
  245.  
  246. Public Sub Trace(TraceType As String, TraceMessage As String) Implements Exchange.ITraceListener.Trace
  247. File.AppendAllText("{0}.txt".ToFormat(Path.Combine("D:EmailsTraceOutput", Guid.NewGuid.ToString("D"))), TraceMessage)
  248. End Sub
  249. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement