mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Allow SMTP settings to be set in web.config
This commit is contained in:
@@ -1,4 +1,8 @@
|
|||||||
using Orchard.ContentManagement;
|
using System.ComponentModel;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.Net.Configuration;
|
||||||
|
using System.Net.Mail;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
using System;
|
using System;
|
||||||
using Orchard.ContentManagement.Utilities;
|
using Orchard.ContentManagement.Utilities;
|
||||||
|
|
||||||
@@ -46,9 +50,23 @@ namespace Orchard.Email.Models {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool IsValid() {
|
public bool IsValid() {
|
||||||
return !String.IsNullOrWhiteSpace(Host)
|
var section = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
|
||||||
&& Port > 0
|
if (section != null && !String.IsNullOrWhiteSpace(section.Network.Host)) {
|
||||||
&& !String.IsNullOrWhiteSpace(Address);
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// establish if the settings are defined in the web.config file
|
||||||
|
var smtpClient = new SmtpClient();
|
||||||
|
|
||||||
|
if (!String.IsNullOrWhiteSpace(Address)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!String.IsNullOrWhiteSpace(Host) && Port == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return String.IsNullOrWhiteSpace(smtpClient.Host);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -54,6 +54,9 @@
|
|||||||
<HintPath>..\..\..\..\lib\newtonsoft.json\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\..\..\..\lib\newtonsoft.json\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration">
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="System.Web.ApplicationServices" />
|
<Reference Include="System.Web.ApplicationServices" />
|
||||||
<Reference Include="System.Web.DynamicData" />
|
<Reference Include="System.Web.DynamicData" />
|
||||||
|
@@ -10,7 +10,7 @@ using Orchard.Messaging.Services;
|
|||||||
using Orchard.Messaging.Models;
|
using Orchard.Messaging.Models;
|
||||||
|
|
||||||
namespace Orchard.Email.Services {
|
namespace Orchard.Email.Services {
|
||||||
[Obsolete]
|
[Obsolete("Use ISmtpChannel instead")]
|
||||||
public class EmailMessagingChannel : IMessagingChannel {
|
public class EmailMessagingChannel : IMessagingChannel {
|
||||||
private readonly IOrchardServices _orchardServices;
|
private readonly IOrchardServices _orchardServices;
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ namespace Orchard.Email.Services {
|
|||||||
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
|
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
|
||||||
|
|
||||||
context.MailMessage.From = new MailAddress(smtpSettings.Address);
|
context.MailMessage.From = new MailAddress(smtpSettings.Address);
|
||||||
context.MailMessage.IsBodyHtml = context.MailMessage.Body != null && context.MailMessage.Body.Contains("<") && context.MailMessage.Body.Contains(">");
|
context.MailMessage.IsBodyHtml = !String.IsNullOrWhiteSpace(context.MailMessage.Body) && context.MailMessage.Body.Contains("<") && context.MailMessage.Body.Contains(">");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
smtpClient.Send(context.MailMessage);
|
smtpClient.Send(context.MailMessage);
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Net.Mail;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.Email.Models;
|
using Orchard.Email.Models;
|
||||||
@@ -21,10 +22,12 @@ namespace Orchard.Email.Services {
|
|||||||
var workContext = _orchardServices.WorkContext;
|
var workContext = _orchardServices.WorkContext;
|
||||||
var smtpSettings = workContext.CurrentSite.As<SmtpSettingsPart>();
|
var smtpSettings = workContext.CurrentSite.As<SmtpSettingsPart>();
|
||||||
|
|
||||||
|
var smtpClient = new SmtpClient();
|
||||||
|
|
||||||
if (smtpSettings == null || !smtpSettings.IsValid()) {
|
if (smtpSettings == null || !smtpSettings.IsValid()) {
|
||||||
var urlHelper = new UrlHelper(workContext.HttpContext.Request.RequestContext);
|
var urlHelper = new UrlHelper(workContext.HttpContext.Request.RequestContext);
|
||||||
var url = urlHelper.Action("Email", "Admin", new {Area = "Settings"});
|
var url = urlHelper.Action("Email", "Admin", new {Area = "Settings"});
|
||||||
yield return new NotifyEntry {Message = T("The <a href=\"{0}\">SMTP settings</a> needs to be configured.", url), Type = NotifyType.Warning};
|
yield return new NotifyEntry {Message = T("The <a href=\"{0}\">SMTP settings</a> need to be configured.", url), Type = NotifyType.Warning};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.Configuration;
|
||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.DisplayManagement;
|
using Orchard.DisplayManagement;
|
||||||
using Orchard.Logging;
|
using Orchard.Logging;
|
||||||
@@ -61,12 +61,16 @@ namespace Orchard.Email.Services {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
var mailMessage = new MailMessage {
|
var mailMessage = new MailMessage {
|
||||||
From = new MailAddress(_smtpSettings.Address),
|
|
||||||
Subject = emailMessage.Subject,
|
Subject = emailMessage.Subject,
|
||||||
Body = _shapeDisplay.Display(template),
|
Body = _shapeDisplay.Display(template),
|
||||||
IsBodyHtml = true
|
IsBodyHtml = true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var section = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
|
||||||
|
mailMessage.From = !String.IsNullOrWhiteSpace(_smtpSettings.Address)
|
||||||
|
? new MailAddress(_smtpSettings.Address)
|
||||||
|
: new MailAddress(section.From);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
foreach (var recipient in emailMessage.Recipients.Split(new [] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) {
|
foreach (var recipient in emailMessage.Recipients.Split(new [] {',', ';'}, StringSplitOptions.RemoveEmptyEntries)) {
|
||||||
mailMessage.To.Add(new MailAddress(recipient));
|
mailMessage.To.Add(new MailAddress(recipient));
|
||||||
@@ -80,8 +84,13 @@ namespace Orchard.Email.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private SmtpClient CreateSmtpClient() {
|
private SmtpClient CreateSmtpClient() {
|
||||||
|
// if no properties are set in the dashboard, use the web.config value
|
||||||
|
if (String.IsNullOrWhiteSpace(_smtpSettings.Host)) {
|
||||||
|
return new SmtpClient();
|
||||||
|
}
|
||||||
|
|
||||||
var smtpClient = new SmtpClient {
|
var smtpClient = new SmtpClient {
|
||||||
UseDefaultCredentials = !_smtpSettings.RequireCredentials
|
UseDefaultCredentials = !_smtpSettings.RequireCredentials,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!smtpClient.UseDefaultCredentials && !String.IsNullOrWhiteSpace(_smtpSettings.UserName)) {
|
if (!smtpClient.UseDefaultCredentials && !String.IsNullOrWhiteSpace(_smtpSettings.UserName)) {
|
||||||
|
@@ -1,27 +1,37 @@
|
|||||||
@model Orchard.Email.Models.SmtpSettingsPart
|
@using System.Configuration
|
||||||
@using System.Net.Mail;
|
@using System.Net.Mail
|
||||||
|
@model Orchard.Email.Models.SmtpSettingsPart
|
||||||
|
@{
|
||||||
|
var smtpClient = new SmtpClient();
|
||||||
|
|
||||||
|
dynamic section = ConfigurationManager.GetSection("system.net/mailSettings/smtp");
|
||||||
|
}
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>@T("Email")</legend>
|
<legend>@T("Email")</legend>
|
||||||
<div>
|
<div>
|
||||||
<label for="@Html.FieldIdFor(m => m.Address)">@T("Sender email address")</label>
|
<label for="@Html.FieldIdFor(m => m.Address)">@T("Sender email address")</label>
|
||||||
@Html.EditorFor(m => m.Address)
|
@Html.TextBoxFor(m => m.Address, new { @class = "text medium", placeholder = (string) section.From })
|
||||||
@Html.ValidationMessage("Address", "*")
|
@Html.ValidationMessage("Address", "*")
|
||||||
|
<span class="hint">@T("The default email address to use as a sender.")</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="@Html.FieldIdFor(m => m.Host)">@T("Host name")</label>
|
<label for="@Html.FieldIdFor(m => m.Host)">@T("Host name")</label>
|
||||||
@Html.EditorFor(m => m.Host)
|
@Html.TextBoxFor(m => m.Host, new { placeholder = smtpClient.Host, @class = "text medium" })
|
||||||
@Html.ValidationMessage("Host", "*")
|
@Html.ValidationMessage("Host", "*")
|
||||||
|
<span class="hint">@T("The SMTP server domain, e.g. <i>smtp.mailprovider.com</i>.")</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="@Html.FieldIdFor(m => m.Port)">@T("Port number")</label>
|
<label for="@Html.FieldIdFor(m => m.Port)">@T("Port number")</label>
|
||||||
@Html.EditorFor(m => m.Port)
|
@Html.TextBoxFor(m => m.Port, new { placeholder = smtpClient.Port, @class = "text small" })
|
||||||
@Html.ValidationMessage("Port", "*")
|
@Html.ValidationMessage("Port", "*")
|
||||||
|
<span class="hint">@T("The SMTP server port, usually 25.")</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@Html.EditorFor(m => m.EnableSsl)
|
@Html.EditorFor(m => m.EnableSsl)
|
||||||
<label for="@Html.FieldIdFor(m => m.EnableSsl)" class="forcheckbox">@T("Enable SSL communications")</label>
|
<label for="@Html.FieldIdFor(m => m.EnableSsl)" class="forcheckbox">@T("Enable SSL communications")</label>
|
||||||
@Html.ValidationMessage("EnableSsl", "*")
|
@Html.ValidationMessage("EnableSsl", "*")
|
||||||
|
<span class="hint">@T("Check if the SMTP server requires SSL communications.")</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@Html.EditorFor(m => m.RequireCredentials)
|
@Html.EditorFor(m => m.RequireCredentials)
|
||||||
@@ -31,13 +41,15 @@
|
|||||||
<div data-controllerid="@Html.FieldIdFor(m => m.RequireCredentials)">
|
<div data-controllerid="@Html.FieldIdFor(m => m.RequireCredentials)">
|
||||||
<div>
|
<div>
|
||||||
<label for="@Html.FieldIdFor(m => m.UserName)">@T("User name")</label>
|
<label for="@Html.FieldIdFor(m => m.UserName)">@T("User name")</label>
|
||||||
@Html.EditorFor(m => m.UserName)
|
@Html.TextBoxFor(m => m.UserName, new { @class = "text" })
|
||||||
@Html.ValidationMessage("UserName", "*")
|
@Html.ValidationMessage("UserName", "*")
|
||||||
|
<span class="hint">@T("The username for authentication.")</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="@Html.FieldIdFor(m => m.Password)">@T("Password")</label>
|
<label for="@Html.FieldIdFor(m => m.Password)">@T("Password")</label>
|
||||||
@Html.PasswordFor(m => m.Password)
|
@Html.TextBoxFor(m => m.Password, new { type = "password", @class = "text medium" })
|
||||||
@Html.ValidationMessage("Password", "*")
|
@Html.ValidationMessage("Password", "*")
|
||||||
|
<span class="hint">@T("The password for authentication.")</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
Reference in New Issue
Block a user