diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql
index 895c2d3f..e2f2f94a 100644
--- a/WebsitePanel/Database/update_db.sql
+++ b/WebsitePanel/Database/update_db.sql
@@ -6130,8 +6130,112 @@ REFERENCES [dbo].[Domains] ([DomainID])
ON DELETE CASCADE
GO
+IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'ScheduleTasksEmailTemplates')
+DROP TABLE ScheduleTasksEmailTemplates
+GO
+CREATE TABLE ScheduleTasksEmailTemplates
+(
+ [TaskID] [nvarchar](100) NOT NULL,
+ [ParameterID] [nvarchar](100) NOT NULL,
+ [Value] [nvarchar](Max) NULL
+)
+GO
+
+IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTasksEmailTemplates] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'MAIL_BODY' )
+BEGIN
+INSERT [dbo].[ScheduleTasksEmailTemplates] ([TaskID], [ParameterID], [Value]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'MAIL_BODY', N'
+
+ Account Summary Information
+
+
+
+
+
+
+
+
+
+Hello!,
+
+
+
+Please, find below details for mx and ns changes.
+
+
+
+
+
+ Domain |
+ DNS |
+ Record Type |
+ DataBase Value |
+ Dns Value |
+
+
+
+ [RecordRow]
+
+
+
+
+
+If you have any questions regarding your hosting account, feel free to contact our support department at any time.
+
+
+
+Best regards
+
+
+
+
+')
+END
+GO
+
+IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTasksEmailTemplates] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'MAIL_DOMAIN_RECORD' )
+BEGIN
+INSERT [dbo].[ScheduleTasksEmailTemplates] ([TaskID], [ParameterID], [Value]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'MAIL_DOMAIN_RECORD',N'
+ [domain] |
+ [dns] |
+ [recordType] |
+ [dbRecord] |
+ [dnsRecord] |
+
')
+END
+GO
+
-- Procedures for Domai lookup service
+IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetScheduleTaskEmailTemplate')
+DROP PROCEDURE GetScheduleTaskEmailTemplate
+GO
+CREATE PROCEDURE [dbo].GetScheduleTaskEmailTemplate
+(
+ @TaskID [nvarchar](100) ,
+ @ParameterID [nvarchar](100)
+)
+AS
+SELECT
+ [TaskID] ,
+ [ParameterID],
+ [Value]
+ FROM [dbo].[ScheduleTasksEmailTemplates] where [TaskID] = @TaskID AND [ParameterID] = @ParameterID
+GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetAllPackageIds')
DROP PROCEDURE GetAllPackageIds
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
index 67597939..ceacc208 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs
@@ -4743,9 +4743,9 @@ namespace WebsitePanel.EnterpriseServer
);
}
- public static IDataReader AddDomainDnsRecord(DnsRecordInfo domainDnsRecord)
+ public static void AddDomainDnsRecord(DnsRecordInfo domainDnsRecord)
{
- return SqlHelper.ExecuteReader(
+ SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"AddDomainDnsRecord",
@@ -4757,9 +4757,20 @@ namespace WebsitePanel.EnterpriseServer
);
}
- public static IDataReader DeleteDomainDnsRecord(int id)
+ public static IDataReader GetScheduleTaskEmailTemplate(string taskId, string parameterId)
{
return SqlHelper.ExecuteReader(
+ ConnectionString,
+ CommandType.StoredProcedure,
+ "GetScheduleTaskEmailTemplate",
+ new SqlParameter("@taskId", taskId),
+ new SqlParameter("@parameterId", parameterId)
+ );
+ }
+
+ public static void DeleteDomainDnsRecord(int id)
+ {
+ SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"DeleteDomainDnsRecord",
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
index 765b3544..42b6bbbd 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
@@ -9,10 +9,15 @@ namespace WebsitePanel.EnterpriseServer
{
public class DomainLookupViewTask : SchedulerTask
{
+ private static readonly string TaskId = "SCHEDULE_TASK_DOMAIN_LOOKUP";
+
// Input parameters:
private static readonly string DnsServersParameter = "DNS_SERVERS";
private static readonly string MailToParameter = "MAIL_TO";
+ private static readonly string MailBodyTemplateParameter = "MAIL_BODY";
+ private static readonly string MailBodyDomainRecordTemplateParameter = "MAIL_DOMAIN_RECORD";
+
public override void DoWork()
{
BackgroundTask topTask = TaskManager.TopTask;
@@ -57,6 +62,7 @@ namespace WebsitePanel.EnterpriseServer
foreach (var domain in domains)
{
DomainChanges domainChanges = new DomainChanges();
+ domainChanges.Domain = domain.DomainName;
var mxRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.MX));
var nsRecords = ObjectUtils.CreateListFromDataReader(DataProvider.GetDomainMXRecords(domain.DomainId, DnsRecordType.NS));
@@ -70,8 +76,8 @@ namespace WebsitePanel.EnterpriseServer
FillRecordData(dnsMxRecords, domain, dnsServer);
FillRecordData(dnsNsRecords, domain, dnsServer);
- domainChanges.MxChanges.Add(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer));
- domainChanges.NsChanges.Add(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer));
+ domainChanges.DnsChanges.Add(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer));
+ domainChanges.DnsChanges.Add(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer));
}
domainsChanges.Add(domainChanges);
@@ -96,18 +102,16 @@ namespace WebsitePanel.EnterpriseServer
foreach (var domainChanges in domainsChanges)
{
- var firstTimeAdditon = domainChanges.MxChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null))
- && domainChanges.NsChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null));
+ var firstTimeAdditon = domainChanges.DnsChanges.All(x => x.DnsRecordsCompare.All(dns => dns.DbRecord == null));
if (firstTimeAdditon)
{
continue;
}
- bool mxIsChanged = domainChanges.MxChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged));
- bool nsIsChanged = domainChanges.NsChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged));
+ bool isChanged = domainChanges.DnsChanges.Any(x => x.DnsRecordsCompare.Any(d => d.Status != DomainDnsRecordStatuses.NotChanged));
- if (mxIsChanged || nsIsChanged)
+ if (isChanged)
{
changedDomains.Add(domainChanges);
}
@@ -129,13 +133,13 @@ namespace WebsitePanel.EnterpriseServer
if (dnsRecord != null)
{
- domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = dnsRecord, Status = DomainDnsRecordStatuses.NotChanged });
+ domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = dnsRecord, Type= record.RecordType, Status = DomainDnsRecordStatuses.NotChanged });
dnsRecords.Remove(dnsRecord);
}
else
{
- domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = null, Status = DomainDnsRecordStatuses.Removed });
+ domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = record, DnsRecord = null, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed });
RemoveRecord(record);
@@ -145,7 +149,7 @@ namespace WebsitePanel.EnterpriseServer
foreach (var record in dnsRecords)
{
- domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = null, DnsRecord = record, Status = DomainDnsRecordStatuses.Added });
+ domainRecordChanges.DnsRecordsCompare.Add(new DomainDnsRecordCompare { DbRecord = null, DnsRecord = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added });
AddRecord(record);
@@ -200,11 +204,13 @@ namespace WebsitePanel.EnterpriseServer
{
BackgroundTask topTask = TaskManager.TopTask;
+ var bodyTempalte = ObjectUtils.FillObjectFromDataReader(DataProvider.GetScheduleTaskEmailTemplate(TaskId, MailBodyTemplateParameter));
+ var domainRecordTemplate = ObjectUtils.FillObjectFromDataReader(DataProvider.GetScheduleTaskEmailTemplate(TaskId, MailBodyDomainRecordTemplateParameter));
+
// input parameters
- string mailFrom = "wsp@scheduler.noreply";
+ string mailFrom = "wsp-scheduler@noreply.net";
string mailTo = (string)topTask.GetParamValue("MAIL_TO");
- string mailSubject = "WSP MX and NS notification";
- string mailBody = "Hello!
";
+ string mailSubject = "MX and NS notification";
if (String.IsNullOrEmpty(mailTo))
{
@@ -212,8 +218,32 @@ namespace WebsitePanel.EnterpriseServer
}
else
{
+ var tableRecords = new List();
+
+ foreach (var domain in domainsChanges)
+ {
+ var changes = domain.DnsChanges;
+
+ foreach (var dnsChanged in changes.Where(x=>x.IsChanged))
+ {
+ foreach (var record in dnsChanged.DnsRecordsCompare.Where(x=>x.Status != DomainDnsRecordStatuses.NotChanged))
+ {
+ var tableRow = Utils.ReplaceStringVariable(domainRecordTemplate.Value, "domain", domain.Domain);
+ tableRow = Utils.ReplaceStringVariable(tableRow, "dns", dnsChanged.DnsServer);
+ tableRow = Utils.ReplaceStringVariable(tableRow, "recordType", record.Type.ToString());
+ tableRow = Utils.ReplaceStringVariable(tableRow, "dbRecord", record.DbRecord != null ? record.DbRecord.Value : "-");
+ tableRow = Utils.ReplaceStringVariable(tableRow, "dnsRecord", record.DnsRecord != null ? record.DnsRecord.Value : "-");
+
+ tableRecords.Add(tableRow);
+ }
+ }
+ }
+
+
+ var mailBody = Utils.ReplaceStringVariable(bodyTempalte.Value, "RecordRow", string.Join(" ", tableRecords));
+
// send mail message
- // MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, false);
+ MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, true);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs
index 5bd9f038..9af977ae 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainChanges.cs
@@ -9,13 +9,11 @@ namespace WebsitePanel.Providers.DomainLookup
{
public string Domain { get; set; }
- public List MxChanges { get; set; }
- public List NsChanges { get; set; }
+ public List DnsChanges { get; set; }
public DomainChanges()
{
- MxChanges = new List();
- NsChanges = new List();
+ DnsChanges = new List();
}
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs
index f3663b43..e21d0eac 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordCompare.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using WebsitePanel.Providers.DNS;
namespace WebsitePanel.Providers.DomainLookup
{
@@ -10,5 +11,6 @@ namespace WebsitePanel.Providers.DomainLookup
public DnsRecordInfo DbRecord { get; set; }
public DnsRecordInfo DnsRecord { get; set; }
public DomainDnsRecordStatuses Status { get; set; }
+ public DnsRecordType Type { get; set; }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs
new file mode 100644
index 00000000..1ffa6e23
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/ScheduleTaskEmailTemplate.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace WebsitePanel.Providers.DomainLookup
+{
+ public class ScheduleTaskEmailTemplate
+ {
+ public string TaskId { get; set; }
+ public string ParameterID { get; set; }
+ public string Value { get; set; }
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
index 576d7cec..4bd21714 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
@@ -90,6 +90,7 @@
+
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs
index c034f52e..c9787fe6 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs
@@ -322,19 +322,22 @@ namespace WebsitePanel.Providers.OS
{
foreach (var dnsRecordPs in dnsRecordsPs)
{
- DnsRecordInfo newRecord;
+ DnsRecordInfo newRecord = null;
switch (recordType)
{
- case DnsRecordType.MX: { newRecord = CreateMxDnsRecordFromPsObject(dnsRecordPs); break; }
- case DnsRecordType.NS: { newRecord = CreateNsDnsRecordFromPsObject(dnsRecordPs); break; }
+ case DnsRecordType.MX: { newRecord = CreateDnsRecordFromPsObject(dnsRecordPs, "NameExchange"); break; }
+ case DnsRecordType.NS: { newRecord = CreateDnsRecordFromPsObject(dnsRecordPs, "NameHost"); break; }
default: continue;
}
- newRecord.DnsServer = dnsServer;
- newRecord.RecordType = recordType;
+ if (newRecord != null)
+ {
+ newRecord.DnsServer = dnsServer;
+ newRecord.RecordType = recordType;
- records.Add(newRecord);
+ records.Add(newRecord);
+ }
}
}
@@ -347,21 +350,16 @@ namespace WebsitePanel.Providers.OS
return records.ToArray();
}
- private DnsRecordInfo CreateMxDnsRecordFromPsObject(PSObject psObject)
+ private DnsRecordInfo CreateDnsRecordFromPsObject(PSObject psObject, string valueName)
{
+ if (!psObject.Members.Any(x => x.Name == valueName))
+ {
+ return null;
+ }
+
var dnsRecord = new DnsRecordInfo
{
- Value = Convert.ToString(GetPSObjectProperty(psObject, "NameExchange")),
- };
-
- return dnsRecord;
- }
-
- private DnsRecordInfo CreateNsDnsRecordFromPsObject(PSObject psObject)
- {
- var dnsRecord = new DnsRecordInfo
- {
- Value = Convert.ToString(GetPSObjectProperty(psObject, "NameHost")),
+ Value = Convert.ToString(GetPSObjectProperty(psObject, valueName)),
};
return dnsRecord;