Initial project's source code check-in.
This commit is contained in:
commit
b03b0b373f
4573 changed files with 981205 additions and 0 deletions
|
@ -0,0 +1,369 @@
|
|||
' Copyright (c) 2011, Outercurve Foundation.
|
||||
' All rights reserved.
|
||||
'
|
||||
' Redistribution and use in source and binary forms, with or without modification,
|
||||
' are permitted provided that the following conditions are met:
|
||||
'
|
||||
' - Redistributions of source code must retain the above copyright notice, this
|
||||
' list of conditions and the following disclaimer.
|
||||
'
|
||||
' - Redistributions in binary form must reproduce the above copyright notice,
|
||||
' this list of conditions and the following disclaimer in the documentation
|
||||
' and/or other materials provided with the distribution.
|
||||
'
|
||||
' - Neither the name of the Outercurve Foundation nor the names of its
|
||||
' contributors may be used to endorse or promote products derived from this
|
||||
' software without specific prior written permission.
|
||||
'
|
||||
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
' ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
' WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
' DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
' ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
' (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
' LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
' ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
' SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Imports Microsoft.Win32
|
||||
Imports System.IO
|
||||
Imports System.Security.AccessControl
|
||||
|
||||
|
||||
Friend Class ArgoMailLists
|
||||
Private _mailListPath As String = ""
|
||||
Private mailListItems As New List(Of ArgoMailListItem)
|
||||
|
||||
Public Sub New()
|
||||
Dim locKey As RegistryKey = Registry.LocalMachine
|
||||
Dim argoKey As RegistryKey = locKey.OpenSubKey("SOFTWARE\ArGoSoft\Mail Server\Setup", False)
|
||||
|
||||
If Not (argoKey Is Nothing) Then
|
||||
Dim argoInst As String = CStr(argoKey.GetValue("Program Path"))
|
||||
If argoInst <> "" Then
|
||||
_mailListPath = argoInst + "_maillists\"
|
||||
ReadLists()
|
||||
End If
|
||||
End If
|
||||
End Sub 'New
|
||||
|
||||
|
||||
Public Sub New(ByVal loadLists As Boolean)
|
||||
Dim locKey As RegistryKey = Registry.LocalMachine
|
||||
Dim argoKey As RegistryKey = locKey.OpenSubKey("SOFTWARE\ArGoSoft\Mail Server\Setup", False)
|
||||
|
||||
If Not argoKey Is Nothing Then
|
||||
Dim argoInst As String = CStr(argoKey.GetValue("Program Path"))
|
||||
If Not String.IsNullOrEmpty(argoInst) Then
|
||||
_mailListPath = argoInst + "_maillists\"
|
||||
If loadLists Then
|
||||
ReadLists()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub 'New
|
||||
|
||||
Public Property Items() As List(Of ArgoMailListItem)
|
||||
Get
|
||||
Return mailListItems
|
||||
End Get
|
||||
Set(ByVal value As List(Of ArgoMailListItem))
|
||||
mailListItems = Value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property ListPath() As String
|
||||
Get
|
||||
Return _mailListPath
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_mailListPath = Value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Sub Add(ByRef item As ArgoMailListItem)
|
||||
Try
|
||||
Dim sFile As String = _mailListPath + item.Name
|
||||
AddListItem(item, sFile)
|
||||
Catch ex As Exception
|
||||
Throw ex
|
||||
End Try
|
||||
End Sub 'Add
|
||||
|
||||
|
||||
Public Sub Update(ByVal item As ArgoMailListItem)
|
||||
Try
|
||||
Dim sFile As String = _mailListPath + item.Name
|
||||
AddListItem(item, sFile)
|
||||
Catch ex As Exception
|
||||
Throw ex
|
||||
End Try
|
||||
End Sub 'Update
|
||||
|
||||
|
||||
Public Sub Delete(ByVal listName As String)
|
||||
Dim sFile As String = Nothing
|
||||
Dim item As ArgoMailListItem = FindItem(listName)
|
||||
If Not (item Is Nothing) Then
|
||||
sFile = _mailListPath + item.Name
|
||||
File.Delete(sFile)
|
||||
End If
|
||||
End Sub 'Delete
|
||||
|
||||
|
||||
Public Function IndexOf(ByVal listName As String) As Integer
|
||||
Dim item As ArgoMailListItem = FindItem(listName)
|
||||
If item Is Nothing Then
|
||||
Return -1
|
||||
Else
|
||||
Return mailListItems.IndexOf(item)
|
||||
End If
|
||||
End Function 'IndexOf
|
||||
|
||||
Public Overloads Function GetItem(ByVal listName As String) As ArgoMailListItem
|
||||
Return FindItem(listName)
|
||||
End Function 'GetItem
|
||||
|
||||
|
||||
Public Overloads Function GetItem(ByVal index As Integer) As ArgoMailListItem
|
||||
If index <= mailListItems.Count Then
|
||||
Return mailListItems(index)
|
||||
Else
|
||||
Return Nothing
|
||||
End If
|
||||
End Function 'GetItem
|
||||
|
||||
Public Function TotalDiskSpace(ByVal domainName As String) As Long
|
||||
Dim lTotSpace As Long = 0
|
||||
Dim alAcc As ArrayList = DomainAccounts(domainName)
|
||||
Dim user As Object = ArgoMail.CreateUserObject()
|
||||
|
||||
For Each user In alAcc
|
||||
Dim idx As Integer = user.UserName.IndexOf("@")
|
||||
If idx >= 0 Then
|
||||
lTotSpace += CalcDiskSpace((_mailListPath + "_users\" + domainName + "\" + user.UserName.Substring(0, idx) + "\Inbox\"))
|
||||
End If
|
||||
Next user
|
||||
Return lTotSpace
|
||||
End Function 'TotalDiskSpace
|
||||
|
||||
|
||||
Public Function MailBoxDiskSpace(ByVal mailBox As String) As Long
|
||||
Dim lTotSpace As Long = 0
|
||||
Dim idx As Integer = mailBox.IndexOf("@")
|
||||
If idx >= 0 Then
|
||||
Dim account As String = mailBox.Substring(0, idx)
|
||||
Dim domain As String = mailBox.Substring((idx + 1))
|
||||
lTotSpace += CalcDiskSpace((_mailListPath + "_users\" + domain + "\" + account + "\Inbox\"))
|
||||
End If
|
||||
Return lTotSpace
|
||||
End Function 'MailBoxDiskSpace
|
||||
|
||||
|
||||
Private Sub ReadLists()
|
||||
Dim aFiles As String() = Directory.GetFiles(_mailListPath, "*.")
|
||||
Dim read As StreamReader = Nothing
|
||||
|
||||
Try
|
||||
Dim file As String
|
||||
For Each file In aFiles
|
||||
Dim newlist As New ArgoMailListItem()
|
||||
|
||||
read = New StreamReader(file)
|
||||
Dim data As String
|
||||
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.ID = data
|
||||
End If
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.Name = data
|
||||
End If
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.Account = data
|
||||
End If
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.DescriptionLines = Convert.ToInt32(data)
|
||||
If newlist.DescriptionLines > 0 Then
|
||||
Dim idx As Integer
|
||||
For idx = 0 To newlist.DescriptionLines - 1
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.Desription = String.Concat(newlist.Desription, data)
|
||||
End If
|
||||
Next idx
|
||||
Else
|
||||
newlist.Desription = ""
|
||||
End If
|
||||
End If
|
||||
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.Count = Convert.ToInt32(data)
|
||||
newlist.Members = New String(newlist.Count) {}
|
||||
If newlist.Count > 0 Then
|
||||
Dim idx As Integer
|
||||
For idx = 0 To newlist.Count - 1
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
newlist.Members(idx) = data
|
||||
End If
|
||||
Next idx
|
||||
End If
|
||||
End If
|
||||
data = read.ReadLine()
|
||||
If Not data Is Nothing Then
|
||||
If data <> "0" Then
|
||||
newlist.ListISClosed = True
|
||||
Else
|
||||
newlist.ListISClosed = False
|
||||
End If
|
||||
End If
|
||||
|
||||
data = read.ReadLine()
|
||||
If Not data Is Nothing Then
|
||||
If data <> "0" Then
|
||||
newlist.RepliesGoToSender = True
|
||||
Else
|
||||
newlist.RepliesGoToSender = False
|
||||
End If
|
||||
End If
|
||||
|
||||
data = read.ReadLine()
|
||||
If Not (data Is Nothing) Then
|
||||
If data <> "0" Then
|
||||
newlist.RequireMemberShip = True
|
||||
Else
|
||||
newlist.RequireMemberShip = False
|
||||
End If
|
||||
End If
|
||||
newlist.DiskSpace = read.BaseStream.Length
|
||||
|
||||
mailListItems.Add(newlist)
|
||||
Next file
|
||||
Catch
|
||||
|
||||
Finally
|
||||
If Not (read Is Nothing) Then
|
||||
read.Close()
|
||||
End If
|
||||
End Try
|
||||
End Sub 'ReadLists
|
||||
|
||||
Private Sub AddListItem(ByVal item As ArgoMailListItem, ByVal sFile As String)
|
||||
Dim writer As StreamWriter = Nothing
|
||||
|
||||
Try
|
||||
writer = New StreamWriter(sFile)
|
||||
writer.WriteLine(item.ID)
|
||||
writer.WriteLine(item.Name)
|
||||
writer.WriteLine(item.Account)
|
||||
|
||||
If String.IsNullOrEmpty(item.Desription) Then
|
||||
item.Desription = String.Empty
|
||||
End If
|
||||
|
||||
Dim aDesc As String() = item.Desription.TrimEnd(ControlChars.Lf).Split(ControlChars.Lf)
|
||||
item.DescriptionLines = aDesc.Length
|
||||
writer.WriteLine(item.DescriptionLines.ToString())
|
||||
If item.DescriptionLines > 0 Then
|
||||
Dim idx As Integer
|
||||
For idx = 0 To item.DescriptionLines - 1
|
||||
writer.WriteLine(aDesc(idx).TrimEnd(ControlChars.Cr))
|
||||
Next idx
|
||||
Else
|
||||
If item.Desription <> "" Then
|
||||
writer.WriteLine(item.Desription)
|
||||
End If
|
||||
End If
|
||||
writer.WriteLine(item.Count.ToString())
|
||||
If item.Count > 0 Then
|
||||
Dim idx As Integer
|
||||
For idx = 0 To item.Count - 1
|
||||
writer.WriteLine(item.Members(idx))
|
||||
Next idx
|
||||
End If
|
||||
If item.ListISClosed Then
|
||||
writer.WriteLine("1")
|
||||
Else
|
||||
writer.WriteLine("0")
|
||||
End If
|
||||
If item.RepliesGoToSender Then
|
||||
writer.WriteLine("1")
|
||||
Else
|
||||
writer.WriteLine("0")
|
||||
End If
|
||||
If item.RequireMemberShip Then
|
||||
writer.WriteLine("1")
|
||||
Else
|
||||
writer.WriteLine("0")
|
||||
End If
|
||||
Catch ex As Exception
|
||||
|
||||
Throw ex
|
||||
Finally
|
||||
If Not (writer Is Nothing) Then
|
||||
writer.Close()
|
||||
End If
|
||||
End Try
|
||||
End Sub 'AddListItem
|
||||
|
||||
Private Function FindItem(ByVal listName As String) As ArgoMailListItem
|
||||
Dim item As ArgoMailListItem
|
||||
For Each item In mailListItems
|
||||
If item.Name = listName Then
|
||||
Return item
|
||||
End If
|
||||
If item.Account = listName Then
|
||||
Return item
|
||||
End If
|
||||
Next item
|
||||
Return Nothing
|
||||
End Function 'FindItem
|
||||
|
||||
|
||||
Private Function CalcDiskSpace(ByVal sPath As String) As Long
|
||||
Dim lDiskSpace As Long = 0
|
||||
Dim aFiles As String() = Directory.GetFiles(sPath, "*.eml")
|
||||
|
||||
Dim file As String
|
||||
For Each file In aFiles
|
||||
Dim inf As New FileInfo(file)
|
||||
lDiskSpace += inf.Length
|
||||
Next file
|
||||
Return lDiskSpace
|
||||
End Function 'CalcDiskSpace
|
||||
|
||||
|
||||
Private Function DomainAccounts(ByVal domainName As String) As ArrayList
|
||||
Dim alUsers As New ArrayList()
|
||||
Dim domainService As Service = ArgoMail.LoadLocalDomainsService()
|
||||
|
||||
If domainService.Succeed Then
|
||||
Dim domainIndex As Integer = domainService.ComObject.IndexOf(domainName)
|
||||
|
||||
If domainIndex >= 0 Then
|
||||
Dim userService As Service = ArgoMail.LoadUsersService()
|
||||
If userService.Succeed Then
|
||||
If userService.ComObject.Count > 0 Then
|
||||
Dim user As Object = Nothing
|
||||
Dim index As Integer
|
||||
|
||||
For index = 0 To userService.ComObject.Count - 1
|
||||
user = userService.ComObject.Items(index)
|
||||
If user.UserName.IndexOf(domainName) >= 0 Then
|
||||
alUsers.Add(user)
|
||||
End If
|
||||
Next index
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
Return alUsers
|
||||
End Function 'DomainAccounts
|
||||
End Class 'ArgoMailLists
|
Loading…
Add table
Add a link
Reference in a new issue