diff --git a/client/package.json b/client/package.json index 0b27d87..ad50256 100755 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "pod-noms.web", - "version": "0.17.0", + "version": "0.18.0", "license": "MIT", "scripts": { "ng": "ng", diff --git a/server/Services/IMailSender.cs b/server/Services/IMailSender.cs new file mode 100644 index 0000000..88ba954 --- /dev/null +++ b/server/Services/IMailSender.cs @@ -0,0 +1,7 @@ +using System.Threading.Tasks; + +namespace PodNoms.Api.Services { + public interface IMailSender { + Task SendEmail(string email, string subject, string message); + } +} diff --git a/server/Services/MailgunSender.cs b/server/Services/MailgunSender.cs new file mode 100644 index 0000000..54ad2ae --- /dev/null +++ b/server/Services/MailgunSender.cs @@ -0,0 +1,46 @@ +using System; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using PodNoms.Api.Models; +using System.Net; + +namespace PodNoms.Api.Services { + public class MailgunSender : IMailSender { + private readonly EmailSettings _emailSettings; + private readonly ILogger _logger; + public MailgunSender(IOptions emailSettings, ILogger logger){ + _emailSettings = emailSettings.Value; + _logger = logger; + } + + public async Task SendEmail(string email, string subject, string message){ + using (var client = new HttpClient { BaseAddress = new Uri(_emailSettings.ApiBaseUri) }) { + client.DefaultRequestHeaders.Authorization = + new AuthenticationHeaderValue("Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes(_emailSettings.ApiKey))); + + _logger.LogInformation($"From: {_emailSettings.From}\nTo: {email}\nApi key: {_emailSettings.ApiKey}"); + + var content = new FormUrlEncodedContent(new[] + { + new KeyValuePair("from", _emailSettings.From), + new KeyValuePair("to", email), + new KeyValuePair("subject", subject), + new KeyValuePair("html", message) + }); + + var result = await client.PostAsync(_emailSettings.RequestUri, content).ConfigureAwait(false); + if (result.StatusCode == HttpStatusCode.OK) + return true; + + _logger.LogError($"Error {result.StatusCode} sending mail\n{result.ReasonPhrase}"); + return false; + } + } + } +} diff --git a/server/Startup.cs b/server/Startup.cs index ed9ef66..becec7f 100755 --- a/server/Startup.cs +++ b/server/Startup.cs @@ -156,7 +156,7 @@ namespace PodNoms.Api { services.AddScoped(); services.AddScoped(); services.AddScoped(); - services.AddScoped(); + services.AddScoped(); services.AddSingleton(typeof(HubLifetimeManager), typeof(DebugHubLifetimeManager)); diff --git a/server/appsettings.json b/server/appsettings.json index ca0b093..b285e03 100755 --- a/server/appsettings.json +++ b/server/appsettings.json @@ -8,7 +8,7 @@ } }, "App": { - "Version": "0.17.0", + "Version": "0.18.0", "RssUrl": "http://localhost:5000/rss/" }, "ConnectionStrings": {