From 61bfb14bb39dfb8429ee61985c7daa86af726dfb Mon Sep 17 00:00:00 2001 From: abhishekluv Date: Sun, 7 Dec 2014 01:38:54 +0530 Subject: [PATCH 1/4] Some additions and improvements to Email module - Added support for bcc and cc while sending emails. - Applied fix for replyto field : https://orchard.codeplex.com/workitem/21103 --- .../Orchard.Email/Activities/EmailActivity.cs | 6 +++++- .../Controllers/EmailAdminController.cs | 7 +++++-- .../Modules/Orchard.Email/Forms/EmailForm.cs | 15 ++++++++++++- .../Orchard.Email/Models/EmailMessage.cs | 2 ++ .../Services/SmtpMessageChannel.cs | 18 +++++++++++++--- .../EditorTemplates/Parts/SmtpSettings.cshtml | 21 ++++++++++++++++++- 6 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs b/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs index 88f4debef..2e5c7b69f 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs @@ -55,12 +55,16 @@ namespace Orchard.Email.Activities { var subject = activityContext.GetState("Subject"); var recipients = activityContext.GetState("Recipients"); var replyTo = activityContext.GetState("ReplyTo"); + var bcc = activityContext.GetState("Bcc"); + var cc = activityContext.GetState("CC"); var parameters = new Dictionary { {"Subject", subject}, {"Body", body}, {"Recipients", recipients}, - {"ReplyTo", replyTo} + {"ReplyTo", replyTo}, + {"Bcc", bcc}, + {"CC", cc} }; var queued = activityContext.GetState("Queued"); diff --git a/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs b/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs index e8f3dad57..bd915ae5e 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs @@ -18,7 +18,7 @@ namespace Orchard.Email.Controllers { public Localizer T { get; set; } - public ActionResult TestMailSettings(string to, string subject, string body) { + public ActionResult TestMailSettings(string to, string subject, string body, string replyTo, string bcc, string cc) { ILogger logger = null; try { var fakeLogger = new FakeLogger(); @@ -30,7 +30,10 @@ namespace Orchard.Email.Controllers { _smtpChannel.Process(new Dictionary { {"Recipients", to}, {"Subject", subject}, - {"Body", body} + {"Body", body}, + {"ReplyTo",replyTo}, + {"Bcc", bcc}, + {"CC",cc} }); if (!string.IsNullOrEmpty(fakeLogger.Message)) { return Json(new { error = fakeLogger.Message }); diff --git a/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs b/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs index 50ca56b77..f83be08d8 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs @@ -36,12 +36,24 @@ namespace Orchard.Email.Forms { Title: T("Email Addresses"), Description: T("Specify a comma-separated list of recipient email addresses. To include a display name, use the following format: John Doe <john.doe@outlook.com>"), Classes: new[] {"large", "text", "tokenized"}), + _Bcc: New.TextBox( + Id: "bcc", + Name: "Bcc", + Title: T("Bcc"), + Description: T("If necessary, specify an email address for a blind carbon copy"), + Classes: new[]{"large","text","tokenized"}), + _CC: New.TextBox( + Id: "cc", + Name: "CC", + Title: T("CC"), + Description: T("If necessary, specify an email address for a carbon copy"), + Classes: new[] { "large", "text", "tokenized" }), _ReplyTo: New.Textbox( Id: "reply-to", Name: "ReplyTo", Title: T("Reply To Address"), Description: T("If necessary, specify an email address for replies."), - Classes: new [] {"medium", "text", "tokenized"}), + Classes: new [] {"large", "text", "tokenized"}), _Subject: New.Textbox( Id: "Subject", Name: "Subject", Title: T("Subject"), @@ -93,6 +105,7 @@ namespace Orchard.Email.Forms { var recipients = context.ValueProvider.GetValue("Recipients").AttemptedValue; var subject = context.ValueProvider.GetValue("Subject").AttemptedValue; var body = context.ValueProvider.GetValue("Body").AttemptedValue; + if (String.IsNullOrWhiteSpace(recipients)) { context.ModelState.AddModelError("Recipients", T("You must specify at least one recipient.").Text); diff --git a/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs b/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs index 63b09a78b..401045236 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs @@ -4,5 +4,7 @@ public string Body { get; set; } public string Recipients { get; set; } public string ReplyTo { get; set; } + public string Bcc { get; set; } + public string CC { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index b6ea33613..2506ddc6d 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -48,7 +48,9 @@ namespace Orchard.Email.Services { Body = parameters["Body"] as string, Subject = parameters["Subject"] as string, Recipients = parameters["Recipients"] as string, - ReplyTo = parameters["ReplyTo"] as string + ReplyTo = parameters["ReplyTo"] as string, + Bcc = parameters["Bcc"] as string, + CC = parameters["CC"] as string }; if (emailMessage.Recipients.Length == 0) { @@ -77,8 +79,18 @@ namespace Orchard.Email.Services { mailMessage.To.Add(new MailAddress(recipient)); } - if (!String.IsNullOrWhiteSpace(emailMessage.ReplyTo)) { - mailMessage.ReplyToList.Add(new MailAddress(emailMessage.ReplyTo)); + foreach (var replyTo in emailMessage.ReplyTo.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { + mailMessage.ReplyToList.Add(new MailAddress(replyTo)); + } + + foreach (var bcc in emailMessage.Bcc.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) + { + mailMessage.Bcc.Add(new MailAddress(bcc)); + } + + foreach (var cc in emailMessage.CC.Split(new[] {',', ';'}, + StringSplitOptions.RemoveEmptyEntries)) { + mailMessage.CC.Add(new MailAddress(cc)); } _smtpClientField.Value.Send(mailMessage); diff --git a/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml index 84ba3d1be..55194836c 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml @@ -56,10 +56,22 @@ +
+ + +
+
+ + +
+
+ + +
@@ -76,12 +88,19 @@ info = $("#emailtestinfo"), to = $("#emailtestto"), subject = $("#emailtestsubject"), - body = $("#emailtestbody"); + body = $("#emailtestbody"), + replyto = $("#emailtestreplyto"), + bcc = $("#emailtestbcc"), + cc = $("#emailtestcc"); + $("#emailtestsend").click(function() { $.post(url, { to: to.val(), subject: subject.val(), body: body.val(), + replyto: replyto.val(), + bcc: bcc.val(), + cc: cc.val(), __RequestVerificationToken: to.closest("form").find("input[name=__RequestVerificationToken]").val() }) .fail(function(data) { From 8f221df8e653abf111c486be4cc4a64fdec18b24 Mon Sep 17 00:00:00 2001 From: abhishekluv Date: Fri, 12 Dec 2014 15:23:36 +0530 Subject: [PATCH 2/4] Dashboard broken gallery link fixed --- src/Orchard.Web/Core/Dashboard/Views/Admin/Index.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Orchard.Web/Core/Dashboard/Views/Admin/Index.cshtml b/src/Orchard.Web/Core/Dashboard/Views/Admin/Index.cshtml index 184af9967..0a1a4b163 100644 --- a/src/Orchard.Web/Core/Dashboard/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Core/Dashboard/Views/Admin/Index.cshtml @@ -11,7 +11,7 @@
-

@T("Change the way your site works and looks with themes and modules. There’s plenty to choose from in the Orchard Gallery. We’re always adding things, so be sure to check back often to see what’s new.", +

@T("Change the way your site works and looks with themes and modules. There’s plenty to choose from in the Orchard Gallery. We’re always adding things, so be sure to check back often to see what’s new.", Url.Action("Themes", "Gallery", new { area = "Orchard.Packaging" }), Url.Action("Modules", "Gallery", new { area = "Orchard.Packaging" }))

From 8bdf8863add65b7cd74f1ad5086a5abc557accad Mon Sep 17 00:00:00 2001 From: abhishekluv Date: Fri, 19 Dec 2014 05:21:26 +0530 Subject: [PATCH 3/4] Formatting fixed --- .../Modules/Orchard.Email/Forms/EmailForm.cs | 4 ++-- .../Orchard.Email/Services/SmtpMessageChannel.cs | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs b/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs index f83be08d8..f1a438fd5 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Forms/EmailForm.cs @@ -40,13 +40,13 @@ namespace Orchard.Email.Forms { Id: "bcc", Name: "Bcc", Title: T("Bcc"), - Description: T("If necessary, specify an email address for a blind carbon copy"), + Description: T("Specify a comma-separated list of email addresses for a blind carbon copy"), Classes: new[]{"large","text","tokenized"}), _CC: New.TextBox( Id: "cc", Name: "CC", Title: T("CC"), - Description: T("If necessary, specify an email address for a carbon copy"), + Description: T("Specify a comma-separated list of email addresses for a carbon copy"), Classes: new[] { "large", "text", "tokenized" }), _ReplyTo: New.Textbox( Id: "reply-to", diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index 2506ddc6d..a1bdf7ba9 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -76,21 +76,19 @@ namespace Orchard.Email.Services { try { foreach (var recipient in emailMessage.Recipients.Split(new [] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.To.Add(new MailAddress(recipient)); + mailMessage.To.Add(new MailAddress(recipient)); } foreach (var replyTo in emailMessage.ReplyTo.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.ReplyToList.Add(new MailAddress(replyTo)); + mailMessage.ReplyToList.Add(new MailAddress(replyTo)); } - foreach (var bcc in emailMessage.Bcc.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) - { - mailMessage.Bcc.Add(new MailAddress(bcc)); + foreach (var bcc in emailMessage.Bcc.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { + mailMessage.Bcc.Add(new MailAddress(bcc)); } - foreach (var cc in emailMessage.CC.Split(new[] {',', ';'}, - StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.CC.Add(new MailAddress(cc)); + foreach (var cc in emailMessage.CC.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { + mailMessage.CC.Add(new MailAddress(cc)); } _smtpClientField.Value.Send(mailMessage); From e1e6cf633eb0858aff67d401ec223f3000e5a04e Mon Sep 17 00:00:00 2001 From: abhishekluv Date: Fri, 19 Dec 2014 05:29:51 +0530 Subject: [PATCH 4/4] some more formatting --- .../Modules/Orchard.Email/Services/SmtpMessageChannel.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index a1bdf7ba9..945b1c79e 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -76,19 +76,19 @@ namespace Orchard.Email.Services { try { foreach (var recipient in emailMessage.Recipients.Split(new [] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.To.Add(new MailAddress(recipient)); + mailMessage.To.Add(new MailAddress(recipient)); } foreach (var replyTo in emailMessage.ReplyTo.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.ReplyToList.Add(new MailAddress(replyTo)); + mailMessage.ReplyToList.Add(new MailAddress(replyTo)); } foreach (var bcc in emailMessage.Bcc.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.Bcc.Add(new MailAddress(bcc)); + mailMessage.Bcc.Add(new MailAddress(bcc)); } foreach (var cc in emailMessage.CC.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) { - mailMessage.CC.Add(new MailAddress(cc)); + mailMessage.CC.Add(new MailAddress(cc)); } _smtpClientField.Value.Send(mailMessage);