400 lines
16 KiB
VB.net
400 lines
16 KiB
VB.net
' Copyright (c) 2012, 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.
|
|
|
|
Option Strict Off
|
|
Option Explicit On
|
|
|
|
Namespace WebsitePanel.Providers.Mail
|
|
|
|
Public Class MailEnableDomain
|
|
Inherits MarshalByRefObject
|
|
|
|
Private DomainNameVal As String
|
|
Private StatusVal As Integer
|
|
Private DomainRedirectionStatusVal As Integer
|
|
Private DomainRedirectionHostsVal As String
|
|
Private AccountNameVal As String
|
|
Private HostVal As String
|
|
Private RetainModeVal As Integer ' this is used to hold messages waiting for pickup by issued ETRN
|
|
Private PollForMessagesVal As Integer ' this indicates that we need to poll a host for messages for this domain
|
|
Private UpStreamHostVal As String ' this is the address of the host to poll if we are set to poll a remote host
|
|
Private PollIntervalVal As Integer ' this is the frequency in minutes that we need to poll the remote host
|
|
Private AliasModeVal As Integer
|
|
Private AliasNameVal As String
|
|
|
|
Private Structure ISMTPDOMAINTYPE
|
|
<VBFixedString(512), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=512)> Public DomainName As String
|
|
Public Status As Integer
|
|
Public DomainRedirectionStatus As Integer
|
|
<VBFixedString(2048), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=2048)> Public DomainRedirectionHosts As String
|
|
<VBFixedString(128), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=128)> Public AccountName As String
|
|
Public RetainMode As Integer ' this is used to hold messages waiting for pickup by issued ETRN
|
|
Public PollForMessages As Integer ' this indicates that we need to poll a host for messages for this domain
|
|
<VBFixedString(512), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=512)> Public UpStreamHost As String ' this is the address of the host to poll if we are set to poll a remote host
|
|
Public PollInterval As Integer ' this is the frequency in minutes that we need to poll the remote host
|
|
Public AliasMode As Integer
|
|
<VBFixedString(512), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=512)> Public AliasName As String
|
|
End Structure
|
|
|
|
Private Declare Function SMTPDomainAdd Lib "MEAISM.DLL" (ByRef SMTPDomain As ISMTPDOMAINTYPE) As Integer
|
|
Private Declare Function SMTPDomainGet Lib "MEAISM.DLL" (ByRef SMTPDomainCriteria As ISMTPDOMAINTYPE) As Integer
|
|
Private Declare Function SMTPDomainEdit Lib "MEAISM.DLL" (ByRef SMTPDomainCriteria As ISMTPDOMAINTYPE, ByRef SMTPDomainData As ISMTPDOMAINTYPE) As Integer
|
|
Private Declare Function SMTPDomainRemove Lib "MEAISM.DLL" (ByRef SMTPDomain As ISMTPDOMAINTYPE) As Integer
|
|
Private Declare Function SMTPDomainFindFirst Lib "MEAISM.DLL" (ByRef SMTPDomain As ISMTPDOMAINTYPE) As Integer
|
|
Private Declare Function SMTPDomainFindNext Lib "MEAISM.DLL" (ByRef SMTPDomain As ISMTPDOMAINTYPE) As Integer
|
|
Private Declare Function SetCurrentHost Lib "MEAISM.DLL" (ByVal CurrentHost As String) As Integer
|
|
|
|
Public Function SetHost() As Integer
|
|
SetHost = SetCurrentHost(Host)
|
|
End Function
|
|
|
|
Public Function AddDomain() As Integer
|
|
|
|
Dim CDomain As ISMTPDOMAINTYPE
|
|
|
|
CDomain.AliasMode = 0
|
|
CDomain.AliasName = ""
|
|
CDomain.PollForMessages = 0
|
|
CDomain.PollInterval = 0
|
|
CDomain.RetainMode = 0
|
|
CDomain.UpStreamHost = ""
|
|
|
|
CDomain.AccountName = AccountName
|
|
CDomain.DomainName = DomainName
|
|
CDomain.DomainRedirectionHosts = DomainRedirectionHosts
|
|
CDomain.DomainRedirectionStatus = DomainRedirectionStatus
|
|
CDomain.Status = Status
|
|
|
|
AddDomain = SMTPDomainAdd(CDomain)
|
|
|
|
AccountName = CDomain.AccountName
|
|
DomainName = CDomain.DomainName
|
|
DomainRedirectionHosts = CDomain.DomainRedirectionHosts
|
|
DomainRedirectionStatus = CDomain.DomainRedirectionStatus
|
|
Status = CDomain.Status
|
|
|
|
'Console.WriteLine("AddDomain called on server")
|
|
|
|
End Function
|
|
|
|
|
|
Public Function GetDomain() As Integer
|
|
|
|
Dim CDomain As ISMTPDOMAINTYPE
|
|
CDomain.AliasMode = -1
|
|
CDomain.AliasName = ""
|
|
CDomain.PollForMessages = -1
|
|
CDomain.PollInterval = -1
|
|
CDomain.RetainMode = -1
|
|
CDomain.UpStreamHost = ""
|
|
|
|
CDomain.AccountName = AccountName
|
|
CDomain.DomainName = DomainName
|
|
CDomain.DomainRedirectionHosts = DomainRedirectionHosts
|
|
CDomain.DomainRedirectionStatus = DomainRedirectionStatus
|
|
CDomain.Status = Status
|
|
|
|
GetDomain = SMTPDomainGet(CDomain)
|
|
|
|
AccountName = CDomain.AccountName
|
|
DomainName = CDomain.DomainName
|
|
DomainRedirectionHosts = CDomain.DomainRedirectionHosts
|
|
DomainRedirectionStatus = CDomain.DomainRedirectionStatus
|
|
Status = CDomain.Status
|
|
|
|
End Function
|
|
|
|
|
|
Public Function EditDomain(ByVal NewDomainName As String, ByVal NewStatus As Integer, ByVal NewDomainRedirectionStatus As Integer, ByVal NewDomainRedirectionHosts As String, ByVal NewAccountName As String) As Integer
|
|
|
|
Dim CDomain As ISMTPDOMAINTYPE
|
|
CDomain.AliasMode = -1
|
|
CDomain.AliasName = ""
|
|
CDomain.PollForMessages = -1
|
|
CDomain.PollInterval = -1
|
|
CDomain.RetainMode = -1
|
|
CDomain.UpStreamHost = ""
|
|
Dim CDomainData As ISMTPDOMAINTYPE
|
|
|
|
CDomain.AccountName = AccountName
|
|
CDomain.DomainName = DomainName
|
|
CDomain.DomainRedirectionHosts = DomainRedirectionHosts
|
|
CDomain.DomainRedirectionStatus = DomainRedirectionStatus
|
|
CDomain.Status = Status
|
|
CDomainData.AccountName = NewAccountName
|
|
CDomainData.DomainName = NewDomainName
|
|
CDomainData.DomainRedirectionHosts = NewDomainRedirectionHosts
|
|
CDomainData.DomainRedirectionStatus = NewDomainRedirectionStatus
|
|
CDomainData.Status = NewStatus
|
|
|
|
CDomainData.AliasMode = 0
|
|
CDomainData.AliasName = ""
|
|
CDomainData.PollForMessages = 0
|
|
CDomainData.PollInterval = 0
|
|
CDomainData.RetainMode = 0
|
|
CDomainData.UpStreamHost = ""
|
|
|
|
EditDomain = SMTPDomainEdit(CDomain, CDomainData)
|
|
|
|
AccountName = CDomain.AccountName
|
|
DomainName = CDomain.DomainName
|
|
DomainRedirectionHosts = CDomain.DomainRedirectionHosts
|
|
DomainRedirectionStatus = CDomain.DomainRedirectionStatus
|
|
Status = CDomain.Status
|
|
|
|
End Function
|
|
|
|
|
|
Public Function RemoveDomain() As Integer
|
|
|
|
Dim CDomain As ISMTPDOMAINTYPE
|
|
CDomain.AliasMode = -1
|
|
CDomain.AliasName = ""
|
|
CDomain.PollForMessages = -1
|
|
CDomain.PollInterval = -1
|
|
CDomain.RetainMode = -1
|
|
CDomain.UpStreamHost = ""
|
|
|
|
CDomain.AccountName = AccountName
|
|
CDomain.DomainName = DomainName
|
|
CDomain.DomainRedirectionHosts = DomainRedirectionHosts
|
|
CDomain.DomainRedirectionStatus = DomainRedirectionStatus
|
|
CDomain.Status = Status
|
|
|
|
RemoveDomain = SMTPDomainRemove(CDomain)
|
|
|
|
AccountName = CDomain.AccountName
|
|
DomainName = CDomain.DomainName
|
|
DomainRedirectionHosts = CDomain.DomainRedirectionHosts
|
|
DomainRedirectionStatus = CDomain.DomainRedirectionStatus
|
|
Status = CDomain.Status
|
|
|
|
End Function
|
|
|
|
|
|
Public Function FindFirstDomain() As Integer
|
|
|
|
Dim CDomain As ISMTPDOMAINTYPE
|
|
CDomain.AliasMode = -1
|
|
CDomain.AliasName = ""
|
|
CDomain.PollForMessages = -1
|
|
CDomain.PollInterval = -1
|
|
CDomain.RetainMode = -1
|
|
CDomain.UpStreamHost = ""
|
|
|
|
CDomain.AccountName = AccountName
|
|
CDomain.DomainName = DomainName
|
|
CDomain.DomainRedirectionHosts = DomainRedirectionHosts
|
|
CDomain.DomainRedirectionStatus = DomainRedirectionStatus
|
|
CDomain.Status = Status
|
|
|
|
FindFirstDomain = SMTPDomainFindFirst(CDomain)
|
|
|
|
AccountName = CDomain.AccountName
|
|
DomainName = CDomain.DomainName
|
|
DomainRedirectionHosts = CDomain.DomainRedirectionHosts
|
|
DomainRedirectionStatus = CDomain.DomainRedirectionStatus
|
|
Status = CDomain.Status
|
|
|
|
End Function
|
|
|
|
|
|
Public Function FindNextDomain() As Integer
|
|
|
|
Dim CDomain As ISMTPDOMAINTYPE
|
|
|
|
CDomain.AccountName = AccountName
|
|
CDomain.DomainName = DomainName
|
|
CDomain.DomainRedirectionHosts = DomainRedirectionHosts
|
|
CDomain.DomainRedirectionStatus = DomainRedirectionStatus
|
|
CDomain.Status = Status
|
|
|
|
|
|
CDomain.AliasMode = -1
|
|
CDomain.AliasName = ""
|
|
CDomain.PollForMessages = -1
|
|
CDomain.PollInterval = -1
|
|
CDomain.RetainMode = -1
|
|
CDomain.UpStreamHost = ""
|
|
|
|
FindNextDomain = SMTPDomainFindNext(CDomain)
|
|
|
|
AccountName = CDomain.AccountName
|
|
DomainName = CDomain.DomainName
|
|
DomainRedirectionHosts = CDomain.DomainRedirectionHosts
|
|
DomainRedirectionStatus = CDomain.DomainRedirectionStatus
|
|
Status = CDomain.Status
|
|
|
|
End Function
|
|
|
|
Public Property DomainName() As String
|
|
Get
|
|
Return Me.DomainNameVal
|
|
End Get
|
|
Set(ByVal Value As String)
|
|
Me.DomainNameVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property Status() As Integer
|
|
Get
|
|
Return Me.StatusVal
|
|
End Get
|
|
Set(ByVal Value As Integer)
|
|
Me.StatusVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property DomainRedirectionStatus() As Integer
|
|
Get
|
|
Return Me.DomainRedirectionStatusVal
|
|
End Get
|
|
Set(ByVal Value As Integer)
|
|
Me.DomainRedirectionStatusVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property DomainRedirectionHosts() As String
|
|
Get
|
|
Return Me.DomainRedirectionHostsVal
|
|
End Get
|
|
Set(ByVal Value As String)
|
|
Me.DomainRedirectionHostsVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property AccountName() As String
|
|
Get
|
|
Return Me.AccountNameVal
|
|
End Get
|
|
Set(ByVal Value As String)
|
|
Me.AccountNameVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property Host() As String
|
|
Get
|
|
Return Me.HostVal
|
|
End Get
|
|
Set(ByVal Value As String)
|
|
Me.HostVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property RetainMode() As Integer
|
|
Get
|
|
Return Me.RetainModeVal
|
|
End Get
|
|
Set(ByVal Value As Integer)
|
|
Me.RetainModeVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property PollForMessages() As Integer
|
|
Get
|
|
Return Me.PollForMessagesVal
|
|
End Get
|
|
Set(ByVal Value As Integer)
|
|
Me.PollForMessagesVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property UpStreamHost() As String
|
|
Get
|
|
Return Me.UpStreamHostVal
|
|
End Get
|
|
Set(ByVal Value As String)
|
|
Me.UpStreamHostVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property PollInterval() As Integer
|
|
Get
|
|
Return Me.PollIntervalVal
|
|
End Get
|
|
Set(ByVal Value As Integer)
|
|
Me.PollIntervalVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property AliasMode() As Integer
|
|
Get
|
|
Return Me.AliasModeVal
|
|
End Get
|
|
Set(ByVal Value As Integer)
|
|
Me.AliasModeVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Public Property AliasName() As String
|
|
Get
|
|
Return Me.AliasNameVal
|
|
End Get
|
|
Set(ByVal Value As String)
|
|
Me.AliasNameVal = Value
|
|
End Set
|
|
End Property
|
|
|
|
Private Function CString(ByVal InString As String) As String
|
|
CString = InString & Chr(0)
|
|
End Function
|
|
|
|
Private Function NonCString(ByVal InString As String) As String
|
|
Dim NTPos As Integer
|
|
NTPos = InStr(1, InString, Chr(0), CompareMethod.Binary)
|
|
If NTPos > 0 Then
|
|
NonCString = Left(InString, NTPos - 1)
|
|
Else
|
|
NonCString = InString
|
|
End If
|
|
|
|
End Function
|
|
|
|
Public Function Exists(ByVal DomainName As String) As Boolean
|
|
|
|
Dim CDomain As New ISMTPDOMAINTYPE
|
|
|
|
CDomain.AccountName = CString("")
|
|
CDomain.DomainName = CString(DomainName)
|
|
CDomain.DomainRedirectionHosts = CString("")
|
|
CDomain.DomainRedirectionStatus = -1
|
|
CDomain.Status = -1
|
|
|
|
Exists = (SMTPDomainGet(CDomain) = 1)
|
|
|
|
End Function
|
|
|
|
Private Sub AddDataTableColumns(ByRef oTable As DataTable)
|
|
oTable.Columns.Add("DomainName", GetType(String))
|
|
oTable.Columns.Add("Status", GetType(Long))
|
|
oTable.Columns.Add("RedirectionStatus", GetType(Long))
|
|
oTable.Columns.Add("RedirectionHosts", GetType(String))
|
|
End Sub
|
|
|
|
End Class
|
|
End Namespace
|