IceWarp fixes and improvements
This commit is contained in:
parent
414414b11d
commit
3feba6e7ec
3 changed files with 287 additions and 192 deletions
|
@ -31,6 +31,7 @@ using System.IO;
|
||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
@ -38,7 +39,7 @@ using WebsitePanel.Server.Utils;
|
||||||
|
|
||||||
namespace WebsitePanel.Providers.Mail
|
namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
public class IceWarp : HostingServiceProviderBase, IMailServer
|
public class IceWarp : HostingServiceProviderBase, IMailServer, IDisposable
|
||||||
{
|
{
|
||||||
protected const string API_PROGID = "IceWarpServer.APIObject";
|
protected const string API_PROGID = "IceWarpServer.APIObject";
|
||||||
protected const string DOMAIN_PROGID = "IceWarpServer.DomainObject";
|
protected const string DOMAIN_PROGID = "IceWarpServer.DomainObject";
|
||||||
|
@ -46,7 +47,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
private dynamic _currentApiObject = null;
|
private dynamic _currentApiObject = null;
|
||||||
|
|
||||||
#region IceWarp Enums
|
#region Protected Enums
|
||||||
|
|
||||||
protected enum IceWarpErrorCode
|
protected enum IceWarpErrorCode
|
||||||
{
|
{
|
||||||
|
@ -109,8 +110,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var apiObject = GetApiObject();
|
var apiObject = GetApiObject();
|
||||||
var adresses = ((object) apiObject.GetProperty("C_System_Services_BindIPAddress"));
|
var adresses = ((object)apiObject.GetProperty("C_System_Services_BindIPAddress"));
|
||||||
return adresses == null ? "" : adresses.ToString().Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
|
return adresses == null ? "" : adresses.ToString().Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +120,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var apiObject = GetApiObject();
|
var apiObject = GetApiObject();
|
||||||
return Convert.ToBoolean((object) apiObject.GetProperty("C_Accounts_Global_Domains_UseDiskQuota"));
|
return Convert.ToBoolean((object)apiObject.GetProperty("C_Accounts_Global_Domains_UseDiskQuota"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +129,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var apiObject = GetApiObject();
|
var apiObject = GetApiObject();
|
||||||
return Convert.ToBoolean((object) apiObject.GetProperty("C_Accounts_Global_Domains_UseDomainLimits"));
|
return Convert.ToBoolean((object)apiObject.GetProperty("C_Accounts_Global_Domains_UseDomainLimits"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +138,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var apiObject = GetApiObject();
|
var apiObject = GetApiObject();
|
||||||
return Convert.ToBoolean((object) apiObject.GetProperty("C_Accounts_Global_Domains_UseUserLimits"));
|
return Convert.ToBoolean((object)apiObject.GetProperty("C_Accounts_Global_Domains_UseUserLimits"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +147,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var apiObject = GetApiObject();
|
var apiObject = GetApiObject();
|
||||||
return Convert.ToBoolean((object) apiObject.GetProperty("C_Accounts_Global_Domains_OverrideGlobal"));
|
return Convert.ToBoolean((object)apiObject.GetProperty("C_Accounts_Global_Domains_OverrideGlobal"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +156,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var apiObject = GetApiObject();
|
var apiObject = GetApiObject();
|
||||||
return Convert.ToInt32((object) apiObject.GetProperty("C_Mail_SMTP_Delivery_MaxMsgSize"))/1024/1024;
|
return Convert.ToInt32((object)apiObject.GetProperty("C_Mail_SMTP_Delivery_MaxMsgSize")) / 1024 / 1024;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +195,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
protected static string GetErrorMessage(int errorCode)
|
protected static string GetErrorMessage(int errorCode)
|
||||||
{
|
{
|
||||||
switch ((IceWarpErrorCode) errorCode)
|
switch ((IceWarpErrorCode)errorCode)
|
||||||
{
|
{
|
||||||
case IceWarpErrorCode.S_OK:
|
case IceWarpErrorCode.S_OK:
|
||||||
return "OK";
|
return "OK";
|
||||||
|
@ -248,6 +249,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void DisposeObject(object obj)
|
||||||
|
{
|
||||||
|
Marshal.FinalReleaseComObject(obj);
|
||||||
|
}
|
||||||
|
|
||||||
protected dynamic GetApiObject()
|
protected dynamic GetApiObject()
|
||||||
{
|
{
|
||||||
if (_currentApiObject != null) return _currentApiObject;
|
if (_currentApiObject != null) return _currentApiObject;
|
||||||
|
@ -386,6 +392,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
return mailAccounts.ToArray();
|
return mailAccounts.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,7 +407,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
apiObject.SetProperty("C_Accounts_Global_Domains_WarnMailboxUsage", ProviderSettings["WarnMailboxUsage"]);
|
apiObject.SetProperty("C_Accounts_Global_Domains_WarnMailboxUsage", ProviderSettings["WarnMailboxUsage"]);
|
||||||
apiObject.SetProperty("C_Accounts_Global_Domains_WarnDomainSize", ProviderSettings["WarnDomainSize"]);
|
apiObject.SetProperty("C_Accounts_Global_Domains_WarnDomainSize", ProviderSettings["WarnDomainSize"]);
|
||||||
|
|
||||||
apiObject.SetProperty("C_Mail_SMTP_Delivery_MaxMsgSize", Convert.ToInt32(ProviderSettings["MaxMessageSize"])*1024*1024);
|
apiObject.SetProperty("C_Mail_SMTP_Delivery_MaxMsgSize", Convert.ToInt32(ProviderSettings["MaxMessageSize"]) * 1024 * 1024);
|
||||||
apiObject.SetProperty("C_Mail_SMTP_Delivery_LimitMsgSize", Convert.ToInt32(ProviderSettings["MaxMessageSize"]) > 0);
|
apiObject.SetProperty("C_Mail_SMTP_Delivery_LimitMsgSize", Convert.ToInt32(ProviderSettings["MaxMessageSize"]) > 0);
|
||||||
|
|
||||||
SaveApiSetting(apiObject);
|
SaveApiSetting(apiObject);
|
||||||
|
@ -407,11 +415,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IHostingServiceProvier methods
|
#region IHostingServiceProvier methods
|
||||||
|
|
||||||
public override SettingPair[] GetProviderDefaultSettings()
|
public override SettingPair[] GetProviderDefaultSettings()
|
||||||
{
|
{
|
||||||
var settings = new []
|
var settings = new[]
|
||||||
{
|
{
|
||||||
new SettingPair("UseDomainDiskQuota", UseDomainDiskQuota.ToString()),
|
new SettingPair("UseDomainDiskQuota", UseDomainDiskQuota.ToString()),
|
||||||
new SettingPair("UseDomainLimits", UseDomainLimits.ToString()),
|
new SettingPair("UseDomainLimits", UseDomainLimits.ToString()),
|
||||||
|
@ -423,8 +431,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
new SettingPair("ServerIpAddress", BindIpAddress)
|
new SettingPair("ServerIpAddress", BindIpAddress)
|
||||||
};
|
};
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string[] Install()
|
public override string[] Install()
|
||||||
{
|
{
|
||||||
|
@ -433,25 +441,25 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ChangeServiceItemsState(ServiceProviderItem[] items, bool enabled)
|
public override void ChangeServiceItemsState(ServiceProviderItem[] items, bool enabled)
|
||||||
{
|
{
|
||||||
foreach (var item in items.OfType<MailDomain>())
|
foreach (var item in items.OfType<MailDomain>())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// enable/disable mail domain
|
// enable/disable mail domain
|
||||||
if (DomainExists(item.Name))
|
if (DomainExists(item.Name))
|
||||||
{
|
{
|
||||||
var mailDomain = GetDomain(item.Name);
|
var mailDomain = GetDomain(item.Name);
|
||||||
mailDomain.Enabled = enabled;
|
mailDomain.Enabled = enabled;
|
||||||
UpdateDomain(mailDomain);
|
UpdateDomain(mailDomain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.WriteError(String.Format("Error switching '{0}' IceWarp domain", item.Name), ex);
|
Log.WriteError(String.Format("Error switching '{0}' IceWarp domain", item.Name), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DeleteServiceItems(ServiceProviderItem[] items)
|
public override void DeleteServiceItems(ServiceProviderItem[] items)
|
||||||
{
|
{
|
||||||
|
@ -470,64 +478,69 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ServiceProviderItemDiskSpace[] GetServiceItemsDiskSpace(ServiceProviderItem[] items)
|
public override ServiceProviderItemDiskSpace[] GetServiceItemsDiskSpace(ServiceProviderItem[] items)
|
||||||
{
|
{
|
||||||
var itemsDiskspace = new List<ServiceProviderItemDiskSpace>();
|
var itemsDiskspace = new List<ServiceProviderItemDiskSpace>();
|
||||||
|
|
||||||
// update items with diskspace
|
var accountObject = GetAccountObject();
|
||||||
foreach (var item in items.OfType<MailAccount>())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Log.WriteStart(String.Format("Calculating mail account '{0}' size", item.Name));
|
|
||||||
// calculate disk space
|
|
||||||
var accountObject = GetAccountObject(item.Name);
|
|
||||||
var size = Convert.ToInt64((object)accountObject.GetProperty("U_MailboxSize")) * 1024;
|
|
||||||
|
|
||||||
var diskspace = new ServiceProviderItemDiskSpace {ItemId = item.Id, DiskSpace = size};
|
// update items with diskspace
|
||||||
itemsDiskspace.Add(diskspace);
|
foreach (var item in items.OfType<MailAccount>())
|
||||||
Log.WriteEnd(String.Format("Calculating mail account '{0}' size", item.Name));
|
{
|
||||||
}
|
try
|
||||||
catch (Exception ex)
|
{
|
||||||
{
|
Log.WriteStart(String.Format("Calculating mail account '{0}' size", item.Name));
|
||||||
Log.WriteError(ex);
|
// calculate disk space
|
||||||
}
|
accountObject.Open(item.Name);
|
||||||
}
|
var size = Convert.ToInt64((object)accountObject.GetProperty("U_MailboxSize")) * 1024;
|
||||||
return itemsDiskspace.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override ServiceProviderItemBandwidth[] GetServiceItemsBandwidth(ServiceProviderItem[] items, DateTime since)
|
var diskspace = new ServiceProviderItemDiskSpace { ItemId = item.Id, DiskSpace = size };
|
||||||
{
|
itemsDiskspace.Add(diskspace);
|
||||||
var itemsBandwidth = new ServiceProviderItemBandwidth[items.Length];
|
|
||||||
|
|
||||||
// update items with diskspace
|
Log.WriteEnd(String.Format("Calculating mail account '{0}' size", item.Name));
|
||||||
for (int i = 0; i < items.Length; i++)
|
}
|
||||||
{
|
catch (Exception ex)
|
||||||
ServiceProviderItem item = items[i];
|
{
|
||||||
|
Log.WriteError(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// create new bandwidth object
|
DisposeObject(accountObject);
|
||||||
itemsBandwidth[i] = new ServiceProviderItemBandwidth
|
|
||||||
{
|
return itemsDiskspace.ToArray();
|
||||||
ItemId = item.Id,
|
}
|
||||||
|
|
||||||
|
public override ServiceProviderItemBandwidth[] GetServiceItemsBandwidth(ServiceProviderItem[] items, DateTime since)
|
||||||
|
{
|
||||||
|
var itemsBandwidth = new ServiceProviderItemBandwidth[items.Length];
|
||||||
|
|
||||||
|
// update items with bandwidth
|
||||||
|
for (var i = 0; i < items.Length; i++)
|
||||||
|
{
|
||||||
|
var item = items[i];
|
||||||
|
|
||||||
|
// create new bandwidth object
|
||||||
|
itemsBandwidth[i] = new ServiceProviderItemBandwidth
|
||||||
|
{
|
||||||
|
ItemId = item.Id,
|
||||||
Days = new DailyStatistics[0]
|
Days = new DailyStatistics[0]
|
||||||
};
|
};
|
||||||
|
|
||||||
if (item is MailDomain)
|
if (!(item is MailDomain)) continue;
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// get daily statistics
|
|
||||||
itemsBandwidth[i].Days = GetDailyStatistics(since, item.Name);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Log.WriteError(ex);
|
|
||||||
System.Diagnostics.Debug.WriteLine(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemsBandwidth;
|
try
|
||||||
}
|
{
|
||||||
|
// get daily statistics
|
||||||
|
itemsBandwidth[i].Days = GetDailyStatistics(since, item.Name);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.WriteError(ex);
|
||||||
|
System.Diagnostics.Debug.WriteLine(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return itemsBandwidth;
|
||||||
|
}
|
||||||
|
|
||||||
public DailyStatistics[] GetDailyStatistics(DateTime since, string maildomainName)
|
public DailyStatistics[] GetDailyStatistics(DateTime since, string maildomainName)
|
||||||
{
|
{
|
||||||
|
@ -568,8 +581,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
Year = date.Year,
|
Year = date.Year,
|
||||||
Month = date.Month,
|
Month = date.Month,
|
||||||
Day = date.Day,
|
Day = date.Day,
|
||||||
BytesSent = Convert.ToInt64(fields[mailSentField])*1024,
|
BytesSent = Convert.ToInt64(fields[mailSentField]) * 1024,
|
||||||
BytesReceived = Convert.ToInt64(fields[mailReceivedField])*1024
|
BytesReceived = Convert.ToInt64(fields[mailReceivedField]) * 1024
|
||||||
};
|
};
|
||||||
days.Add(dailyStats);
|
days.Add(dailyStats);
|
||||||
continue;
|
continue;
|
||||||
|
@ -618,7 +631,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
// Checking for version 10.4.0 (released 2012-03-21) or newer
|
// Checking for version 10.4.0 (released 2012-03-21) or newer
|
||||||
// This version introduced L_ListFile_Contents, G_ListFile_Contents and M_ListFileContents that is the latest API variable used by this provider
|
// This version introduced L_ListFile_Contents, G_ListFile_Contents and M_ListFileContents that is the latest API variable used by this provider
|
||||||
var split = version.Split(new[] {'.'});
|
var split = version.Split(new[] { '.' });
|
||||||
var majorVersion = Convert.ToInt32(split[0]);
|
var majorVersion = Convert.ToInt32(split[0]);
|
||||||
var minVersion = Convert.ToInt32(split[1]);
|
var minVersion = Convert.ToInt32(split[1]);
|
||||||
|
|
||||||
|
@ -636,32 +649,34 @@ namespace WebsitePanel.Providers.Mail
|
||||||
public string[] GetDomains()
|
public string[] GetDomains()
|
||||||
{
|
{
|
||||||
var api = GetApiObject();
|
var api = GetApiObject();
|
||||||
return api.GetDomainList().Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries);
|
return api.GetDomainList().Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MailDomain GetDomain(string domainName)
|
public MailDomain GetDomain(string domainName)
|
||||||
{
|
{
|
||||||
var domain = GetDomainObject(domainName);
|
var domainObject = GetDomainObject(domainName);
|
||||||
|
|
||||||
var mailDomain = new MailDomain
|
var mailDomain = new MailDomain
|
||||||
{
|
{
|
||||||
Name = domain.Name,
|
Name = domainObject.Name,
|
||||||
PostmasterAccount = domain.GetProperty("D_AdminEmail"),
|
PostmasterAccount = domainObject.GetProperty("D_AdminEmail"),
|
||||||
CatchAllAccount = domain.GetProperty("D_UnknownForwardTo"),
|
CatchAllAccount = domainObject.GetProperty("D_UnknownForwardTo"),
|
||||||
Enabled = Convert.ToBoolean((object) domain.GetProperty("D_DisableLogin")),
|
Enabled = Convert.ToBoolean((object)domainObject.GetProperty("D_DisableLogin")),
|
||||||
MaxDomainSizeInMB = Convert.ToInt32((object) domain.GetProperty("D_DiskQuota"))/1024,
|
MaxDomainSizeInMB = Convert.ToInt32((object)domainObject.GetProperty("D_DiskQuota")) / 1024,
|
||||||
MaxDomainUsers = Convert.ToInt32((object) domain.GetProperty("D_AccountNumber")),
|
MaxDomainUsers = Convert.ToInt32((object)domainObject.GetProperty("D_AccountNumber")),
|
||||||
MegaByteSendLimit = Convert.ToInt32((object) domain.GetProperty("D_VolumeLimit"))/1024,
|
MegaByteSendLimit = Convert.ToInt32((object)domainObject.GetProperty("D_VolumeLimit")) / 1024,
|
||||||
NumberSendLimit = Convert.ToInt32((object) domain.GetProperty("D_NumberLimit")),
|
NumberSendLimit = Convert.ToInt32((object)domainObject.GetProperty("D_NumberLimit")),
|
||||||
DefaultUserQuotaInMB = Convert.ToInt32((object) domain.GetProperty("D_UserMailbox"))/1024,
|
DefaultUserQuotaInMB = Convert.ToInt32((object)domainObject.GetProperty("D_UserMailbox")) / 1024,
|
||||||
DefaultUserMaxMessageSizeMegaByte = Convert.ToInt32((object) domain.GetProperty("D_UserMsg"))/1024,
|
DefaultUserMaxMessageSizeMegaByte = Convert.ToInt32((object)domainObject.GetProperty("D_UserMsg")) / 1024,
|
||||||
DefaultUserMegaByteSendLimit = Convert.ToInt32((object) domain.GetProperty("D_UserMB")),
|
DefaultUserMegaByteSendLimit = Convert.ToInt32((object)domainObject.GetProperty("D_UserMB")),
|
||||||
DefaultUserNumberSendLimit = Convert.ToInt32((object) domain.GetProperty("D_UserNumber")),
|
DefaultUserNumberSendLimit = Convert.ToInt32((object)domainObject.GetProperty("D_UserNumber")),
|
||||||
UseDomainDiskQuota = Convert.ToBoolean(ProviderSettings["UseDomainDiskQuota"]),
|
UseDomainDiskQuota = Convert.ToBoolean(ProviderSettings["UseDomainDiskQuota"]),
|
||||||
UseDomainLimits = Convert.ToBoolean(ProviderSettings["UseDomainLimits"]),
|
UseDomainLimits = Convert.ToBoolean(ProviderSettings["UseDomainLimits"]),
|
||||||
UseUserLimits = Convert.ToBoolean(ProviderSettings["UseUserLimits"])
|
UseUserLimits = Convert.ToBoolean(ProviderSettings["UseUserLimits"])
|
||||||
};
|
};
|
||||||
|
|
||||||
|
DisposeObject(domainObject);
|
||||||
|
|
||||||
return mailDomain;
|
return mailDomain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,6 +700,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
SaveDomain(domainObject);
|
SaveDomain(domainObject);
|
||||||
|
|
||||||
|
DisposeObject(domainObject);
|
||||||
|
|
||||||
UpdateDomain(domain);
|
UpdateDomain(domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -706,17 +723,19 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
domainObject.SetProperty("D_DisableLogin", !domain.Enabled);
|
domainObject.SetProperty("D_DisableLogin", !domain.Enabled);
|
||||||
domainObject.SetProperty("D_DiskQuota", domain.MaxDomainSizeInMB*1024);
|
domainObject.SetProperty("D_DiskQuota", domain.MaxDomainSizeInMB * 1024);
|
||||||
domainObject.SetProperty("D_AccountNumber", domain.MaxDomainUsers);
|
domainObject.SetProperty("D_AccountNumber", domain.MaxDomainUsers);
|
||||||
domainObject.SetProperty("D_VolumeLimit", domain.MegaByteSendLimit*1024);
|
domainObject.SetProperty("D_VolumeLimit", domain.MegaByteSendLimit * 1024);
|
||||||
domainObject.SetProperty("D_NumberLimit", domain.NumberSendLimit);
|
domainObject.SetProperty("D_NumberLimit", domain.NumberSendLimit);
|
||||||
|
|
||||||
domainObject.SetProperty("D_UserMailbox", domain.DefaultUserQuotaInMB*1024);
|
domainObject.SetProperty("D_UserMailbox", domain.DefaultUserQuotaInMB * 1024);
|
||||||
domainObject.SetProperty("D_UserMsg", domain.DefaultUserMaxMessageSizeMegaByte*1024);
|
domainObject.SetProperty("D_UserMsg", domain.DefaultUserMaxMessageSizeMegaByte * 1024);
|
||||||
domainObject.SetProperty("D_UserMB", domain.DefaultUserMegaByteSendLimit);
|
domainObject.SetProperty("D_UserMB", domain.DefaultUserMegaByteSendLimit);
|
||||||
domainObject.SetProperty("D_UserNumber", domain.DefaultUserNumberSendLimit);
|
domainObject.SetProperty("D_UserNumber", domain.DefaultUserNumberSendLimit);
|
||||||
|
|
||||||
SaveDomain(domainObject);
|
SaveDomain(domainObject);
|
||||||
|
|
||||||
|
DisposeObject(domainObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteDomain(string domainName)
|
public void DeleteDomain(string domainName)
|
||||||
|
@ -732,6 +751,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
Log.WriteError("Could not delete domain" + GetErrorMessage(domainObject.LastErr), null);
|
Log.WriteError("Could not delete domain" + GetErrorMessage(domainObject.LastErr), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(domainObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -747,7 +768,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
var domainObject = GetDomainObject(aliasName);
|
var domainObject = GetDomainObject(aliasName);
|
||||||
|
|
||||||
return Convert.ToInt32((object) domainObject.GetProperty("D_Type")) == 2 && string.Compare(domainObject.GetProperty("D_DomainValue").ToString(), domainName, true) == 0;
|
var result = Convert.ToInt32((object)domainObject.GetProperty("D_Type")) == 2 && string.Compare(domainObject.GetProperty("D_DomainValue").ToString(), domainName, true) == 0;
|
||||||
|
|
||||||
|
DisposeObject(domainObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string[] GetDomainAliases(string domainName)
|
public string[] GetDomainAliases(string domainName)
|
||||||
|
@ -772,13 +797,15 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
public void AddDomainAlias(string domainName, string aliasName)
|
public void AddDomainAlias(string domainName, string aliasName)
|
||||||
{
|
{
|
||||||
var mailDomain = new MailDomain {Name = aliasName};
|
var mailDomain = new MailDomain { Name = aliasName };
|
||||||
CreateDomain(mailDomain);
|
CreateDomain(mailDomain);
|
||||||
var domainObject = GetDomainObject(aliasName);
|
var domainObject = GetDomainObject(aliasName);
|
||||||
|
|
||||||
domainObject.SetProperty("D_Type", 2);
|
domainObject.SetProperty("D_Type", 2);
|
||||||
domainObject.SetProperty("D_DomainValue", domainName);
|
domainObject.SetProperty("D_DomainValue", domainName);
|
||||||
SaveDomain(domainObject);
|
SaveDomain(domainObject);
|
||||||
|
|
||||||
|
DisposeObject(domainObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteDomainAlias(string domainName, string aliasName)
|
public void DeleteDomainAlias(string domainName, string aliasName)
|
||||||
|
@ -794,7 +821,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject();
|
var accountObject = GetAccountObject();
|
||||||
|
|
||||||
return accountObject.Open(mailboxName) && Convert.ToInt32((object) accountObject.GetProperty("U_Type")) == (int) IceWarpAccountType.User;
|
var result = accountObject.Open(mailboxName) && Convert.ToInt32((object)accountObject.GetProperty("U_Type")) == (int)IceWarpAccountType.User;
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class IceWarpResponderContent
|
protected class IceWarpResponderContent
|
||||||
|
@ -840,35 +871,35 @@ namespace WebsitePanel.Providers.Mail
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static MailAccount CreateMailAccountFromAccountObject(dynamic accountObject)
|
protected MailAccount CreateMailAccountFromAccountObject(dynamic accountObject)
|
||||||
{
|
{
|
||||||
var mailAccount = new MailAccount
|
var mailAccount = new MailAccount
|
||||||
{
|
{
|
||||||
Name = accountObject.EmailAddress,
|
Name = accountObject.EmailAddress,
|
||||||
FullName = accountObject.GetProperty("U_Name"),
|
FullName = accountObject.GetProperty("U_Name"),
|
||||||
Enabled = Convert.ToInt32((object) accountObject.GetProperty("U_AccountDisabled")) == 0,
|
Enabled = Convert.ToInt32((object)accountObject.GetProperty("U_AccountDisabled")) == 0,
|
||||||
ForwardingEnabled = !string.IsNullOrWhiteSpace(accountObject.GetProperty("U_ForwardTo")) || string.IsNullOrWhiteSpace(accountObject.GetProperty("U_RemoteAddress")) && Convert.ToBoolean((object) accountObject.GetProperty("U_UseRemoteAddress")),
|
ForwardingEnabled = !string.IsNullOrWhiteSpace(accountObject.GetProperty("U_ForwardTo")) || string.IsNullOrWhiteSpace(accountObject.GetProperty("U_RemoteAddress")) && Convert.ToBoolean((object)accountObject.GetProperty("U_UseRemoteAddress")),
|
||||||
IsDomainAdmin = Convert.ToBoolean((object) accountObject.GetProperty("U_DomainAdmin")),
|
IsDomainAdmin = Convert.ToBoolean((object)accountObject.GetProperty("U_DomainAdmin")),
|
||||||
MaxMailboxSize = Convert.ToBoolean((object) accountObject.GetProperty("U_MaxBox")) ? Convert.ToInt32((object) accountObject.GetProperty("U_MaxBoxSize"))/1024 : 0,
|
MaxMailboxSize = Convert.ToBoolean((object)accountObject.GetProperty("U_MaxBox")) ? Convert.ToInt32((object)accountObject.GetProperty("U_MaxBoxSize")) / 1024 : 0,
|
||||||
Password = accountObject.GetProperty("U_Password"),
|
Password = accountObject.GetProperty("U_Password"),
|
||||||
ResponderEnabled = Convert.ToInt32((object) accountObject.GetProperty("U_Respond")) > 0,
|
ResponderEnabled = Convert.ToInt32((object)accountObject.GetProperty("U_Respond")) > 0,
|
||||||
QuotaUsed = Convert.ToInt64((object) accountObject.GetProperty("U_MailBoxSize")),
|
QuotaUsed = Convert.ToInt64((object)accountObject.GetProperty("U_MailBoxSize")),
|
||||||
MaxMessageSizeMegaByte = Convert.ToInt32((object) accountObject.GetProperty("U_MaxMessageSize"))/1024,
|
MaxMessageSizeMegaByte = Convert.ToInt32((object)accountObject.GetProperty("U_MaxMessageSize")) / 1024,
|
||||||
MegaByteSendLimit = Convert.ToInt32((object) accountObject.GetProperty("U_MegabyteSendLimit")),
|
MegaByteSendLimit = Convert.ToInt32((object)accountObject.GetProperty("U_MegabyteSendLimit")),
|
||||||
NumberSendLimit = Convert.ToInt32((object) accountObject.GetProperty("U_NumberSendLimit")),
|
NumberSendLimit = Convert.ToInt32((object)accountObject.GetProperty("U_NumberSendLimit")),
|
||||||
DeleteOlder = Convert.ToBoolean((object) accountObject.GetProperty("U_DeleteOlder")),
|
DeleteOlder = Convert.ToBoolean((object)accountObject.GetProperty("U_DeleteOlder")),
|
||||||
DeleteOlderDays = Convert.ToInt32((object) accountObject.GetProperty("U_DeleteOlderDays")),
|
DeleteOlderDays = Convert.ToInt32((object)accountObject.GetProperty("U_DeleteOlderDays")),
|
||||||
ForwardOlder = Convert.ToBoolean((object) accountObject.GetProperty("U_ForwardOlder")),
|
ForwardOlder = Convert.ToBoolean((object)accountObject.GetProperty("U_ForwardOlder")),
|
||||||
ForwardOlderDays = Convert.ToInt32((object) accountObject.GetProperty("U_ForwardOlderDays")),
|
ForwardOlderDays = Convert.ToInt32((object)accountObject.GetProperty("U_ForwardOlderDays")),
|
||||||
ForwardOlderTo = accountObject.GetProperty("U_ForwardOlderTo"),
|
ForwardOlderTo = accountObject.GetProperty("U_ForwardOlderTo"),
|
||||||
IceWarpAccountState = Convert.ToInt32((object) accountObject.GetProperty("U_AccountDisabled")),
|
IceWarpAccountState = Convert.ToInt32((object)accountObject.GetProperty("U_AccountDisabled")),
|
||||||
IceWarpAccountType = Convert.ToInt32((object) accountObject.GetProperty("U_AccountType")),
|
IceWarpAccountType = Convert.ToInt32((object)accountObject.GetProperty("U_AccountType")),
|
||||||
IceWarpRespondType = Convert.ToInt32((object) accountObject.GetProperty("U_Respond"))
|
IceWarpRespondType = Convert.ToInt32((object)accountObject.GetProperty("U_Respond"))
|
||||||
};
|
};
|
||||||
|
|
||||||
if (mailAccount.ForwardingEnabled)
|
if (mailAccount.ForwardingEnabled)
|
||||||
{
|
{
|
||||||
mailAccount.ForwardingAddresses = new string[] {accountObject.GetProperty("U_ForwardTo") + accountObject.GetProperty("U_RemoteAddress")};
|
mailAccount.ForwardingAddresses = new string[] { accountObject.GetProperty("U_ForwardTo") + accountObject.GetProperty("U_RemoteAddress") };
|
||||||
mailAccount.DeleteOnForward = Convert.ToInt32(accountObject.GetProperty("U_UseRemoteAddress")) == 1;
|
mailAccount.DeleteOnForward = Convert.ToInt32(accountObject.GetProperty("U_UseRemoteAddress")) == 1;
|
||||||
mailAccount.RetainLocalCopy = !mailAccount.DeleteOnForward;
|
mailAccount.RetainLocalCopy = !mailAccount.DeleteOnForward;
|
||||||
}
|
}
|
||||||
|
@ -889,7 +920,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
mailAccount.RespondTo = respondTo;
|
mailAccount.RespondTo = respondTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
mailAccount.RespondPeriodInDays = Convert.ToInt32((object) accountObject.GetProperty("U_RespondPeriod"));
|
mailAccount.RespondPeriodInDays = Convert.ToInt32((object)accountObject.GetProperty("U_RespondPeriod"));
|
||||||
var responderContent = ParseResponderContent(accountObject.GetProperty("U_ResponderContent"));
|
var responderContent = ParseResponderContent(accountObject.GetProperty("U_ResponderContent"));
|
||||||
mailAccount.ResponderMessage = responderContent.Content;
|
mailAccount.ResponderMessage = responderContent.Content;
|
||||||
mailAccount.ResponderSubject = responderContent.Subject;
|
mailAccount.ResponderSubject = responderContent.Subject;
|
||||||
|
@ -907,7 +938,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
public MailAccount GetAccount(string mailboxName)
|
public MailAccount GetAccount(string mailboxName)
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject(mailboxName);
|
var accountObject = GetAccountObject(mailboxName);
|
||||||
return CreateMailAccountFromAccountObject(accountObject);
|
var account = CreateMailAccountFromAccountObject(accountObject);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return account;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateAccount(MailAccount mailbox)
|
public void CreateAccount(MailAccount mailbox)
|
||||||
|
@ -924,10 +959,12 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
if (accountObject.New(mailbox.Name))
|
if (accountObject.New(mailbox.Name))
|
||||||
{
|
{
|
||||||
|
accountObject.SetProperty("U_Password", mailbox.Password);
|
||||||
accountObject.Save();
|
accountObject.Save();
|
||||||
|
UpdateAccount(mailbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateAccount(mailbox);
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateAccount(MailAccount mailbox)
|
public void UpdateAccount(MailAccount mailbox)
|
||||||
|
@ -937,10 +974,15 @@ namespace WebsitePanel.Providers.Mail
|
||||||
accountObject.SetProperty("U_Name", mailbox.FullName);
|
accountObject.SetProperty("U_Name", mailbox.FullName);
|
||||||
accountObject.SetProperty("U_AccountDisabled", mailbox.IceWarpAccountState);
|
accountObject.SetProperty("U_AccountDisabled", mailbox.IceWarpAccountState);
|
||||||
accountObject.SetProperty("U_DomainAdmin", mailbox.IsDomainAdmin);
|
accountObject.SetProperty("U_DomainAdmin", mailbox.IsDomainAdmin);
|
||||||
accountObject.SetProperty("U_Password", mailbox.Password);
|
|
||||||
accountObject.SetProperty("U_MaxBoxSize", mailbox.MaxMailboxSize*1024);
|
if (mailbox.ChangePassword)
|
||||||
|
{
|
||||||
|
accountObject.SetProperty("U_Password", mailbox.Password);
|
||||||
|
}
|
||||||
|
|
||||||
|
accountObject.SetProperty("U_MaxBoxSize", mailbox.MaxMailboxSize * 1024);
|
||||||
accountObject.SetProperty("U_MaxBox", mailbox.MaxMailboxSize > 0 ? "1" : "0");
|
accountObject.SetProperty("U_MaxBox", mailbox.MaxMailboxSize > 0 ? "1" : "0");
|
||||||
accountObject.SetProperty("U_MaxMessageSize", mailbox.MaxMessageSizeMegaByte*1024);
|
accountObject.SetProperty("U_MaxMessageSize", mailbox.MaxMessageSizeMegaByte * 1024);
|
||||||
accountObject.SetProperty("U_MegabyteSendLimit", mailbox.MegaByteSendLimit);
|
accountObject.SetProperty("U_MegabyteSendLimit", mailbox.MegaByteSendLimit);
|
||||||
accountObject.SetProperty("U_NumberSendLimit", mailbox.NumberSendLimit);
|
accountObject.SetProperty("U_NumberSendLimit", mailbox.NumberSendLimit);
|
||||||
accountObject.SetProperty("U_AccountType", mailbox.IceWarpAccountType);
|
accountObject.SetProperty("U_AccountType", mailbox.IceWarpAccountType);
|
||||||
|
@ -1000,6 +1042,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveAccount(accountObject);
|
SaveAccount(accountObject);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteAccount(string mailboxName)
|
public void DeleteAccount(string mailboxName)
|
||||||
|
@ -1014,6 +1058,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
Log.WriteError("Cannot delete account: " + GetErrorMessage(accountObject.LastErr), null);
|
Log.WriteError("Cannot delete account: " + GetErrorMessage(accountObject.LastErr), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1024,7 +1070,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject();
|
var accountObject = GetAccountObject();
|
||||||
|
|
||||||
return accountObject.Open(mailAliasName);
|
var result = accountObject.Open(mailAliasName);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IEnumerable<string> GetAliasListFromAccountObject(dynamic accountObject)
|
protected IEnumerable<string> GetAliasListFromAccountObject(dynamic accountObject)
|
||||||
|
@ -1056,12 +1106,14 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
var forwardTo = GetForwardToAddressFromAccountObject(accountObject);
|
var forwardTo = GetForwardToAddressFromAccountObject(accountObject);
|
||||||
var aliases = GetAliasListFromAccountObject(accountObject) as IEnumerable<string>;
|
var aliases = GetAliasListFromAccountObject(accountObject) as IEnumerable<string>;
|
||||||
aliasList.AddRange(aliases.Where(a => a + "@" + domainName != forwardTo).Select(alias => new MailAlias {Name = alias + "@" + domainName, ForwardTo = forwardTo}));
|
aliasList.AddRange(aliases.Where(a => a + "@" + domainName != forwardTo).Select(alias => new MailAlias { Name = alias + "@" + domainName, ForwardTo = forwardTo }));
|
||||||
}
|
}
|
||||||
|
|
||||||
accountObject.FindDone();
|
accountObject.FindDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
return aliasList.ToArray();
|
return aliasList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1071,7 +1123,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
var forwardTo = GetForwardToAddressFromAccountObject(accountObject);
|
var forwardTo = GetForwardToAddressFromAccountObject(accountObject);
|
||||||
|
|
||||||
return new MailAlias {ForwardTo = forwardTo, Name = mailAliasName};
|
var result = new MailAlias { ForwardTo = forwardTo, Name = mailAliasName };
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateMailAlias(MailAlias mailAlias)
|
public void CreateMailAlias(MailAlias mailAlias)
|
||||||
|
@ -1081,23 +1137,25 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
mailAlias.ForwardingEnabled = true;
|
mailAlias.ForwardingEnabled = true;
|
||||||
mailAlias.DeleteOnForward = true;
|
mailAlias.DeleteOnForward = true;
|
||||||
mailAlias.ForwardingAddresses = new[] {mailAlias.ForwardTo};
|
mailAlias.ForwardingAddresses = new[] { mailAlias.ForwardTo };
|
||||||
mailAlias.Password = GetRandomPassword();
|
mailAlias.Password = GetRandomPassword();
|
||||||
CreateAccount(mailAlias);
|
CreateAccount(mailAlias);
|
||||||
}
|
}
|
||||||
// else open account and add alias to list
|
// else open account and add alias to list
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var accountOject = GetAccountObject(mailAlias.ForwardTo);
|
var accountObject = GetAccountObject(mailAlias.ForwardTo);
|
||||||
var aliases = ((IEnumerable<string>) GetAliasListFromAccountObject(accountOject)).ToList();
|
var aliases = ((IEnumerable<string>)GetAliasListFromAccountObject(accountObject)).ToList();
|
||||||
aliases.Add(GetEmailUser(mailAlias.Name));
|
aliases.Add(GetEmailUser(mailAlias.Name));
|
||||||
accountOject.SetProperty("U_EmailAlias", string.Join(";", aliases));
|
accountObject.SetProperty("U_EmailAlias", string.Join(";", aliases));
|
||||||
|
|
||||||
SaveAccount(accountOject, "account when creating mail alias");
|
SaveAccount(accountObject, "account when creating mail alias");
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetRandowChars(string chars, int length)
|
private static string GetRandowChars(string chars, int length)
|
||||||
{
|
{
|
||||||
var random = new Random();
|
var random = new Random();
|
||||||
return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
|
return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
|
||||||
|
@ -1112,7 +1170,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
var alpha = apiObject.GetProperty("C_Accounts_Policies_Pass_Alpha");
|
var alpha = apiObject.GetProperty("C_Accounts_Policies_Pass_Alpha");
|
||||||
|
|
||||||
return System.Web.Security.Membership.GeneratePassword(minLength, nonAlphaNum) +
|
return System.Web.Security.Membership.GeneratePassword(minLength, nonAlphaNum) +
|
||||||
GetRandowChars("0123456789", digits)+
|
GetRandowChars("0123456789", digits) +
|
||||||
GetRandowChars("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", alpha);
|
GetRandowChars("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1137,11 +1195,13 @@ namespace WebsitePanel.Providers.Mail
|
||||||
accountObject.SetProperty("U_EmailAlias", string.Join(";", otherAliases));
|
accountObject.SetProperty("U_EmailAlias", string.Join(";", otherAliases));
|
||||||
SaveAccount(accountObject, "account during alias delete");
|
SaveAccount(accountObject, "account during alias delete");
|
||||||
}
|
}
|
||||||
// If no other aliases, this should be an account with a remote address and then we should delete the account
|
// If no other aliases, this should be an account with a remote address and then we should delete the account
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DeleteAccount(mailAliasName);
|
DeleteAccount(mailAliasName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1152,7 +1212,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject();
|
var accountObject = GetAccountObject();
|
||||||
|
|
||||||
return accountObject.Open(groupName) && Convert.ToInt32(accountObject.GetProperty("U_Type")) == 7;
|
var result = accountObject.Open(groupName) && (IceWarpAccountType)Enum.Parse(typeof(IceWarpAccountType), ((object)accountObject.GetProperty("U_Type")).ToString()) == IceWarpAccountType.UserGroup;
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MailGroup[] GetGroups(string domainName)
|
public MailGroup[] GetGroups(string domainName)
|
||||||
|
@ -1165,7 +1229,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
var mailGroup = new MailGroup
|
var mailGroup = new MailGroup
|
||||||
{
|
{
|
||||||
Name = accountObject.EmailAddress,
|
Name = accountObject.EmailAddress,
|
||||||
Enabled = Convert.ToInt32((object) accountObject.GetProperty("U_AccountDisabled")) == 0,
|
Enabled = Convert.ToInt32((object)accountObject.GetProperty("U_AccountDisabled")) == 0,
|
||||||
GroupName = accountObject.GetProperty("G_Name"),
|
GroupName = accountObject.GetProperty("G_Name"),
|
||||||
Members = ((IEnumerable<string>)SplitFileContents(accountObject, "G_ListFile_Contents")).ToArray()
|
Members = ((IEnumerable<string>)SplitFileContents(accountObject, "G_ListFile_Contents")).ToArray()
|
||||||
};
|
};
|
||||||
|
@ -1176,7 +1240,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
public MailGroup GetGroup(string groupName)
|
public MailGroup GetGroup(string groupName)
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject(groupName);
|
var accountObject = GetAccountObject(groupName);
|
||||||
return CreateMailGroupFromAccountObject(accountObject);
|
var result = CreateMailGroupFromAccountObject(accountObject);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateGroup(MailGroup @group)
|
public void CreateGroup(MailGroup @group)
|
||||||
|
@ -1185,7 +1253,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
if (accountObject.New(group.Name))
|
if (accountObject.New(group.Name))
|
||||||
{
|
{
|
||||||
accountObject.SetProperty("U_Type", 7);
|
accountObject.SetProperty("U_Type", IceWarpAccountType.UserGroup);
|
||||||
accountObject.SetProperty("G_GroupwareMailDelivery", false);
|
accountObject.SetProperty("G_GroupwareMailDelivery", false);
|
||||||
SaveAccount(accountObject, "group account");
|
SaveAccount(accountObject, "group account");
|
||||||
}
|
}
|
||||||
|
@ -1195,6 +1263,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateGroup(group);
|
UpdateGroup(group);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateGroup(MailGroup @group)
|
public void UpdateGroup(MailGroup @group)
|
||||||
|
@ -1206,6 +1276,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
accountObject.SetProperty("G_ListFile_Contents", string.Join("\n", group.Members));
|
accountObject.SetProperty("G_ListFile_Contents", string.Join("\n", group.Members));
|
||||||
|
|
||||||
SaveAccount(accountObject, "group");
|
SaveAccount(accountObject, "group");
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteGroup(string groupName)
|
public void DeleteGroup(string groupName)
|
||||||
|
@ -1220,6 +1292,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
Log.WriteError("Cannot delete group: " + GetErrorMessage(accountObject.LastErr), null);
|
Log.WriteError("Cannot delete group: " + GetErrorMessage(accountObject.LastErr), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1230,7 +1304,11 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject();
|
var accountObject = GetAccountObject();
|
||||||
|
|
||||||
return accountObject.Open(maillistName) && (IceWarpAccountType) Enum.Parse(typeof (IceWarpAccountType), ((object) accountObject.GetProperty("U_Type")).ToString()) == IceWarpAccountType.MailingList;
|
var result = accountObject.Open(maillistName) && (IceWarpAccountType)Enum.Parse(typeof(IceWarpAccountType), ((object)accountObject.GetProperty("U_Type")).ToString()) == IceWarpAccountType.MailingList;
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MailList[] GetLists(string domainName)
|
public MailList[] GetLists(string domainName)
|
||||||
|
@ -1240,8 +1318,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
|
|
||||||
protected IEnumerable<string> SplitStringProperty(dynamic accountObject, string propertyName, char separator)
|
protected IEnumerable<string> SplitStringProperty(dynamic accountObject, string propertyName, char separator)
|
||||||
{
|
{
|
||||||
var value = (object) accountObject.GetProperty(propertyName);
|
var value = (object)accountObject.GetProperty(propertyName);
|
||||||
return value == null ? new String[] {} : value.ToString().Split(new[] {separator}, StringSplitOptions.RemoveEmptyEntries);
|
return value == null ? new String[] { } : value.ToString().Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IEnumerable<string> SplitFileContents(dynamic accountObject, string propertyName)
|
protected IEnumerable<string> SplitFileContents(dynamic accountObject, string propertyName)
|
||||||
|
@ -1262,43 +1340,43 @@ namespace WebsitePanel.Providers.Mail
|
||||||
Name = accountObject.EmailAddress,
|
Name = accountObject.EmailAddress,
|
||||||
Description = accountObject.GetProperty("M_Name"),
|
Description = accountObject.GetProperty("M_Name"),
|
||||||
ModeratorAddress = accountObject.GetProperty("M_OwnerAddress"),
|
ModeratorAddress = accountObject.GetProperty("M_OwnerAddress"),
|
||||||
MembersSource = (IceWarpListMembersSource) Enum.Parse(typeof (IceWarpListMembersSource), ((object) accountObject.GetProperty("M_SendAllLists")).ToString()),
|
MembersSource = (IceWarpListMembersSource)Enum.Parse(typeof(IceWarpListMembersSource), ((object)accountObject.GetProperty("M_SendAllLists")).ToString()),
|
||||||
Members = ((IEnumerable<string>)SplitFileContents(accountObject, "M_ListFile_Contents")).Select(m => m.TrimEnd(new[] {';', '0', '1', '2'})).ToArray(),
|
Members = ((IEnumerable<string>)SplitFileContents(accountObject, "M_ListFile_Contents")).Select(m => m.TrimEnd(new[] { ';', '0', '1', '2' })).ToArray(),
|
||||||
SetReceipientsToToHeader = Convert.ToBoolean((object) accountObject.GetProperty("M_SeparateTo")),
|
SetReceipientsToToHeader = Convert.ToBoolean((object)accountObject.GetProperty("M_SeparateTo")),
|
||||||
SubjectPrefix = accountObject.GetProperty("M_AddToSubject"),
|
SubjectPrefix = accountObject.GetProperty("M_AddToSubject"),
|
||||||
Originator = (IceWarpListOriginator) Enum.Parse(typeof (IceWarpListOriginator), ((object) accountObject.GetProperty("M_ListSender")).ToString()),
|
Originator = (IceWarpListOriginator)Enum.Parse(typeof(IceWarpListOriginator), ((object)accountObject.GetProperty("M_ListSender")).ToString()),
|
||||||
PostingMode = Convert.ToBoolean((object) accountObject.GetProperty("M_MembersOnly")) ? PostingMode.MembersCanPost : PostingMode.AnyoneCanPost,
|
PostingMode = Convert.ToBoolean((object)accountObject.GetProperty("M_MembersOnly")) ? PostingMode.MembersCanPost : PostingMode.AnyoneCanPost,
|
||||||
PasswordProtection = (PasswordProtection) Enum.Parse(typeof (PasswordProtection), ((object) accountObject.GetProperty("M_Moderated")).ToString()),
|
PasswordProtection = (PasswordProtection)Enum.Parse(typeof(PasswordProtection), ((object)accountObject.GetProperty("M_Moderated")).ToString()),
|
||||||
Password = accountObject.GetProperty("M_ModeratedPassword"),
|
Password = accountObject.GetProperty("M_ModeratedPassword"),
|
||||||
DefaultRights = (IceWarpListDefaultRights) Enum.Parse(typeof (IceWarpListDefaultRights), ((object) accountObject.GetProperty("M_DefaultRights")).ToString()),
|
DefaultRights = (IceWarpListDefaultRights)Enum.Parse(typeof(IceWarpListDefaultRights), ((object)accountObject.GetProperty("M_DefaultRights")).ToString()),
|
||||||
MaxMessageSizeEnabled = Convert.ToBoolean((object) accountObject.GetProperty("M_MaxList")),
|
MaxMessageSizeEnabled = Convert.ToBoolean((object)accountObject.GetProperty("M_MaxList")),
|
||||||
MaxMessageSize = Convert.ToInt32((object) accountObject.GetProperty("M_MaxListSize")),
|
MaxMessageSize = Convert.ToInt32((object)accountObject.GetProperty("M_MaxListSize")),
|
||||||
MaxMembers = Convert.ToInt32((object) accountObject.GetProperty("M_MaxMembers")),
|
MaxMembers = Convert.ToInt32((object)accountObject.GetProperty("M_MaxMembers")),
|
||||||
SendToSender = Convert.ToBoolean((object) accountObject.GetProperty("M_SendToSender")),
|
SendToSender = Convert.ToBoolean((object)accountObject.GetProperty("M_SendToSender")),
|
||||||
DigestMode = Convert.ToBoolean((object) accountObject.GetProperty("M_DigestConfirmed")),
|
DigestMode = Convert.ToBoolean((object)accountObject.GetProperty("M_DigestConfirmed")),
|
||||||
MaxMessagesPerMinute = Convert.ToInt32((object) accountObject.GetProperty("M_ListBatch")),
|
MaxMessagesPerMinute = Convert.ToInt32((object)accountObject.GetProperty("M_ListBatch")),
|
||||||
SendSubscribe = Convert.ToBoolean((object) accountObject.GetProperty("M_NotifyJoin")),
|
SendSubscribe = Convert.ToBoolean((object)accountObject.GetProperty("M_NotifyJoin")),
|
||||||
SendUnsubscribe = Convert.ToBoolean((object) accountObject.GetProperty("M_NotifyLeave")),
|
SendUnsubscribe = Convert.ToBoolean((object)accountObject.GetProperty("M_NotifyLeave")),
|
||||||
|
|
||||||
// From list server account
|
// From list server account
|
||||||
ConfirmSubscription = (IceWarpListConfirmSubscription) Enum.Parse(typeof (IceWarpListConfirmSubscription), ((object) listServerAccountObject.GetProperty("L_DigestConfirmed")).ToString()),
|
ConfirmSubscription = (IceWarpListConfirmSubscription)Enum.Parse(typeof(IceWarpListConfirmSubscription), ((object)listServerAccountObject.GetProperty("L_DigestConfirmed")).ToString()),
|
||||||
CommandsInSubject = Convert.ToBoolean((object) listServerAccountObject.GetProperty("L_ListSubject")),
|
CommandsInSubject = Convert.ToBoolean((object)listServerAccountObject.GetProperty("L_ListSubject")),
|
||||||
DisableSubscribecommand = !Convert.ToBoolean((object) listServerAccountObject.GetProperty("M_JoinR")),
|
DisableSubscribecommand = !Convert.ToBoolean((object)listServerAccountObject.GetProperty("M_JoinR")),
|
||||||
AllowUnsubscribe = Convert.ToBoolean((object) listServerAccountObject.GetProperty("M_LeaveR")),
|
AllowUnsubscribe = Convert.ToBoolean((object)listServerAccountObject.GetProperty("M_LeaveR")),
|
||||||
DisableListcommand = !Convert.ToBoolean((object) listServerAccountObject.GetProperty("M_ListsR")),
|
DisableListcommand = !Convert.ToBoolean((object)listServerAccountObject.GetProperty("M_ListsR")),
|
||||||
DisableWhichCommand = !Convert.ToBoolean((object) listServerAccountObject.GetProperty("M_WhichR")),
|
DisableWhichCommand = !Convert.ToBoolean((object)listServerAccountObject.GetProperty("M_WhichR")),
|
||||||
DisableReviewCommand = !Convert.ToBoolean((object) listServerAccountObject.GetProperty("M_ReviewR")),
|
DisableReviewCommand = !Convert.ToBoolean((object)listServerAccountObject.GetProperty("M_ReviewR")),
|
||||||
DisableVacationCommand = !Convert.ToBoolean((object) listServerAccountObject.GetProperty("M_VacationR")),
|
DisableVacationCommand = !Convert.ToBoolean((object)listServerAccountObject.GetProperty("M_VacationR")),
|
||||||
Moderated = Convert.ToBoolean((object) listServerAccountObject.GetProperty("L_Moderated")),
|
Moderated = Convert.ToBoolean((object)listServerAccountObject.GetProperty("L_Moderated")),
|
||||||
CommandPassword = listServerAccountObject.GetProperty("L_ModeratedPassword"),
|
CommandPassword = listServerAccountObject.GetProperty("L_ModeratedPassword"),
|
||||||
SuppressCommandResponses = Convert.ToBoolean((object) listServerAccountObject.GetProperty("L_MaxList"))
|
SuppressCommandResponses = Convert.ToBoolean((object)listServerAccountObject.GetProperty("L_MaxList"))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// This is how I get values for from and replyto header values. TODO: There must be a better way, but I don't see the pattern right now...
|
// This is how I get values for from and replyto header values. TODO: There must be a better way, but I don't see the pattern right now...
|
||||||
var ss = Convert.ToInt32((object) accountObject.GetProperty("M_SetSender"));
|
var ss = Convert.ToInt32((object)accountObject.GetProperty("M_SetSender"));
|
||||||
var sv = Convert.ToInt32((object) accountObject.GetProperty("M_SetValue"));
|
var sv = Convert.ToInt32((object)accountObject.GetProperty("M_SetValue"));
|
||||||
var vm = Convert.ToBoolean((object) accountObject.GetProperty("M_ValueMode"));
|
var vm = Convert.ToBoolean((object)accountObject.GetProperty("M_ValueMode"));
|
||||||
var value = accountObject.GetProperty("M_HeaderValue");
|
var value = accountObject.GetProperty("M_HeaderValue");
|
||||||
|
|
||||||
switch (ss)
|
switch (ss)
|
||||||
|
@ -1363,13 +1441,19 @@ namespace WebsitePanel.Providers.Mail
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(listServerAccountObject);
|
||||||
|
|
||||||
return mailList;
|
return mailList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MailList GetList(string maillistName)
|
public MailList GetList(string maillistName)
|
||||||
{
|
{
|
||||||
var accountObject = GetAccountObject(maillistName);
|
var accountObject = GetAccountObject(maillistName);
|
||||||
return CreateMailListFromAccountObject(accountObject);
|
var result = CreateMailListFromAccountObject(accountObject);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateList(MailList maillist)
|
public void CreateList(MailList maillist)
|
||||||
|
@ -1395,6 +1479,8 @@ namespace WebsitePanel.Providers.Mail
|
||||||
SaveAccount(accountObject, "mailing list");
|
SaveAccount(accountObject, "mailing list");
|
||||||
|
|
||||||
UpdateList(maillist);
|
UpdateList(maillist);
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected dynamic FindMatchingListServerAccount(string mailingListName, bool createListServerAccountIfNeeded)
|
protected dynamic FindMatchingListServerAccount(string mailingListName, bool createListServerAccountIfNeeded)
|
||||||
|
@ -1555,7 +1641,7 @@ namespace WebsitePanel.Providers.Mail
|
||||||
listServerAccountObject.SetProperty("L_ListSender", maillist.Originator);
|
listServerAccountObject.SetProperty("L_ListSender", maillist.Originator);
|
||||||
listServerAccountObject.SetProperty("L_MaxList", maillist.SuppressCommandResponses);
|
listServerAccountObject.SetProperty("L_MaxList", maillist.SuppressCommandResponses);
|
||||||
|
|
||||||
SaveAccount(accountObject, "listserver account associated with mailing list");
|
SaveAccount(listServerAccountObject, "listserver account associated with mailing list");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteList(string maillistName)
|
public void DeleteList(string maillistName)
|
||||||
|
@ -1602,8 +1688,16 @@ namespace WebsitePanel.Providers.Mail
|
||||||
{
|
{
|
||||||
Log.WriteError("Cannot delete mail list: " + GetErrorMessage(accountObject.LastErr), null);
|
Log.WriteError("Cannot delete mail list: " + GetErrorMessage(accountObject.LastErr), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisposeObject(accountObject);
|
||||||
|
DisposeObject(listServerAccountObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Marshal.FinalReleaseComObject(_currentApiObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,7 @@ namespace WebsitePanel.Portal
|
||||||
if (maxMailboxSizeLimit == -1 || maxMailboxSizeLimit == 0)
|
if (maxMailboxSizeLimit == -1 || maxMailboxSizeLimit == 0)
|
||||||
{
|
{
|
||||||
MaxMailboxSizeLimitValidator.Enabled = false;
|
MaxMailboxSizeLimitValidator.Enabled = false;
|
||||||
|
CompareValidator1.Enabled = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,6 +43,7 @@ namespace WebsitePanel.Portal.ProviderControls
|
||||||
secForwarding.Visible = (PanelRequest.ItemID > 0);
|
secForwarding.Visible = (PanelRequest.ItemID > 0);
|
||||||
OlderMailsPanel.Visible = (PanelRequest.ItemID > 0);
|
OlderMailsPanel.Visible = (PanelRequest.ItemID > 0);
|
||||||
secOlderMails.Visible = (PanelRequest.ItemID > 0);
|
secOlderMails.Visible = (PanelRequest.ItemID > 0);
|
||||||
|
Utils.SelectListItem(ddlAccountType, "1"); // Set default account type to POP3 & IMAP
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BindItem(MailAccount item)
|
public void BindItem(MailAccount item)
|
||||||
|
@ -108,7 +109,6 @@ namespace WebsitePanel.Portal.ProviderControls
|
||||||
item.ForwardingAddresses = Utils.ParseDelimitedString(txtForward.Text, ';', ' ', ',');
|
item.ForwardingAddresses = Utils.ParseDelimitedString(txtForward.Text, ';', ' ', ',');
|
||||||
item.DeleteOnForward = cbDeleteOnForward.Checked;
|
item.DeleteOnForward = cbDeleteOnForward.Checked;
|
||||||
item.ChangePassword = cbChangePassword.Checked;
|
item.ChangePassword = cbChangePassword.Checked;
|
||||||
item.ChangePassword = cbChangePassword.Checked;
|
|
||||||
item.IsDomainAdmin = cbDomainAdmin.Checked;
|
item.IsDomainAdmin = cbDomainAdmin.Checked;
|
||||||
|
|
||||||
item.DeleteOlder = cbDeleteOlder.Checked;
|
item.DeleteOlder = cbDeleteOlder.Checked;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue