diff --git a/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs b/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs index bd915ae5e..9d4011924 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; using System.Web.Mvc; +using Orchard.ContentManagement; +using Orchard.Data; +using Orchard.Email.Models; using Orchard.Email.Services; using Orchard.Localization; using Orchard.Logging; @@ -10,15 +13,20 @@ namespace Orchard.Email.Controllers { [Admin] public class EmailAdminController : Controller { private readonly ISmtpChannel _smtpChannel; + private readonly IOrchardServices _orchardServices; + private readonly ITransactionManager _transactionManager; - public EmailAdminController(ISmtpChannel smtpChannel) { + public EmailAdminController(ISmtpChannel smtpChannel, IOrchardServices orchardServices, ITransactionManager transactionManager) { _smtpChannel = smtpChannel; + _orchardServices = orchardServices; + _transactionManager = transactionManager; T = NullLocalizer.Instance; } public Localizer T { get; set; } - public ActionResult TestMailSettings(string to, string subject, string body, string replyTo, string bcc, string cc) { + [HttpPost] + public ActionResult TestSettings(TestSmtpSettings testSettings) { ILogger logger = null; try { var fakeLogger = new FakeLogger(); @@ -27,18 +35,37 @@ namespace Orchard.Email.Controllers { logger = smtpChannelComponent.Logger; smtpChannelComponent.Logger = fakeLogger; } - _smtpChannel.Process(new Dictionary { - {"Recipients", to}, - {"Subject", subject}, - {"Body", body}, - {"ReplyTo",replyTo}, - {"Bcc", bcc}, - {"CC",cc} - }); - if (!string.IsNullOrEmpty(fakeLogger.Message)) { + + // Temporarily update settings so that the test will actually use the specified host, port, etc. + var smtpSettings = _orchardServices.WorkContext.CurrentSite.As(); + + smtpSettings.Address = testSettings.From; + smtpSettings.Host = testSettings.Host; + smtpSettings.Port = testSettings.Port; + smtpSettings.EnableSsl = testSettings.EnableSsl; + smtpSettings.RequireCredentials = testSettings.RequireCredentials; + smtpSettings.UserName = testSettings.UserName; + smtpSettings.Password = testSettings.Password; + + if (!smtpSettings.IsValid()) { + fakeLogger.Error("Invalid settings."); + } + else { + _smtpChannel.Process(new Dictionary { + {"Recipients", testSettings.To}, + {"Subject", testSettings.Subject}, + {"Body", testSettings.Body}, + {"ReplyTo", testSettings.ReplyTo}, + {"Bcc", testSettings.Bcc}, + {"CC", testSettings.Cc} + }); + } + + if (!String.IsNullOrEmpty(fakeLogger.Message)) { return Json(new { error = fakeLogger.Message }); } - return Json(new {status = T("Message sent").Text}); + + return Json(new {status = T("Message sent.").Text}); } catch (Exception e) { return Json(new {error = e.Message}); @@ -48,6 +75,9 @@ namespace Orchard.Email.Controllers { if (smtpChannelComponent != null) { smtpChannelComponent.Logger = logger; } + + // Undo the temporarily changed smtp settings. + _transactionManager.Cancel(); } } @@ -62,5 +92,21 @@ namespace Orchard.Email.Controllers { Message = exception == null ? format : exception.Message; } } + + public class TestSmtpSettings { + public string From { get; set; } + public string ReplyTo { get; set; } + public string Host { get; set; } + public int Port { get; set; } + public bool EnableSsl { get; set; } + public bool RequireCredentials { get; set; } + public string UserName { get; set; } + public string Password { get; set; } + public string To { get; set; } + public string Cc { get; set; } + public string Bcc { get; set; } + public string Subject { get; set; } + public string Body { get; set; } + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs index 79bbbb333..27ea30d8e 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs @@ -1,7 +1,5 @@ -using System.ComponentModel; -using System.Configuration; +using System.Configuration; using System.Net.Configuration; -using System.Net.Mail; using Orchard.ContentManagement; using System; using Orchard.ContentManagement.Utilities; 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 55194836c..e822d126c 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 @@ -64,14 +64,14 @@ -
- - -
+
+ + +
@@ -82,10 +82,17 @@ @using (Script.Foot()) {