Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Microsoft.Extensions.Logging;
using StudySharp.ApplicationServices.Commands;
using StudySharp.ApplicationServices.EmailService;
using StudySharp.ApplicationServices.EmailService.Constants;
using StudySharp.ApplicationServices.EmailService.Models;
using StudySharp.ApplicationServices.Queries;
using StudySharp.Domain.General;
Expand Down Expand Up @@ -47,9 +48,12 @@ public async Task<OperationResult> Add([FromBody] AddTagCommand addTagCommand)
}

[HttpPut]
public async Task<OperationResult> SendMessage([FromBody] Email email)
[AllowAnonymous]
public async Task<OperationResult> SendMessage()
{
await _emailService.SendEmailAsync(email.To, "Test", email.Message);
await _emailService.SendEmailAsync(
EmailTemplates.Default.Build("Text, token, url, etc."),
new EmailContact("User First and Last name", "kotohomka@gmail.com"));
return OperationResult.Ok();
}
}
Expand Down
6 changes: 5 additions & 1 deletion server/StudySharp.API/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
},
"EmailConfig": {
"Name": "StudySharp",
"From": "kotohomka@gmail.com"
"From": "info@studysharp.com",
"Port": 587,
"Smtp": "smtp.gmail.com",
"UserName": "ebashers.ss@gmail.com",
"Password": "Gfhjkm1!"
},
"AdminCredentials": {
"UserName": "barcat75@gmail.com",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
namespace StudySharp.Domain.Constants
{
public class EmailLayouts
{
public const string Default = @"<!DOCTYPE html>
<html lang='en'>

<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<meta http-equiv='X-UA-Compatible' content='ie=edge'>
<title>{0}</title>
<style type=""text/css"">
a[x-apple-data-detectors] {{color: inherit !important;}}
</style>
</head>

<body>

<div style='padding-top: 15px;'>
<h1>{1}</h1>
</div>

</body>";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using StudySharp.ApplicationServices.EmailService.Models;
using StudySharp.Domain.Constants;

namespace StudySharp.ApplicationServices.EmailService.Constants
{
public static class EmailTemplates
{
public static EmailTemplate Default { get; }
public static EmailTemplate ResetPassword { get; }

static EmailTemplates()
{
Default = new EmailTemplate
{
Body = "{0}",
Layout = EmailLayouts.Default,
Subject = "Default",
};
ResetPassword = new EmailTemplate
{
Body = "<a href='{0}'> Reset</a> - click to reset password",
Layout = EmailLayouts.Default,
Subject = "Study Sharp - ResetPassword",
};
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
using System.Threading.Tasks;
using StudySharp.ApplicationServices.EmailService.Models;

namespace StudySharp.ApplicationServices.EmailService
{
public interface IEmailService
{
public Task SendEmailAsync(string email, string subject, string message);
public Task SendEmailAsync(Email email, EmailContact contact);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using MailKit.Net.Smtp;
using Microsoft.Extensions.Options;
using MimeKit;
using StudySharp.ApplicationServices.EmailService.Models;
using StudySharp.ApplicationServices.Infrastructure.EmailService;

namespace StudySharp.ApplicationServices.EmailService
Expand All @@ -14,21 +15,21 @@ public MailKitEmailService(IOptions<EmailServiceSettings> options)
_settings = options.Value;
}

public async Task SendEmailAsync(string email, string subject, string message)
public async Task SendEmailAsync(Email email, EmailContact contact)
{
var emailMessage = new MimeMessage();

emailMessage.From.Add(new MailboxAddress(_settings.Name, _settings.From));
emailMessage.To.Add(new MailboxAddress(string.Empty, email));
emailMessage.Subject = subject;
emailMessage.To.Add(new MailboxAddress(contact.Name, contact.Email));
emailMessage.Subject = email.Subject;
emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
{
Text = message,
Text = email.Body,
};

using var client = new SmtpClient();
await client.ConnectAsync("smtp.gmail.com", 587, false);
await client.AuthenticateAsync("ebashers.ss@gmail.com", "Gfhjkm1!");
await client.ConnectAsync(_settings.Smtp, _settings.Port, false);
await client.AuthenticateAsync(_settings.UserName, _settings.Password);
await client.SendAsync(emailMessage);

await client.DisconnectAsync(true);
Expand Down
23 changes: 21 additions & 2 deletions server/StudySharp.ApplicationServices/EmailService/Models/Email.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,27 @@
using StudySharp.Domain.Constants;

namespace StudySharp.ApplicationServices.EmailService.Models
{
public class Email
{
public string To { get; set; }
public string Message { get; set; }
public Email(EmailTemplate template)
{
Subject = template.Subject;
Body = WrapAsHtmlDocument(template.Subject, template.Layout, template.Body);
}

public Email(string subject, string body, string layout = EmailLayouts.Default)
{
Subject = subject;
Body = WrapAsHtmlDocument(subject, layout, body);
}

public string Body { get; }
public string Subject { get; }

private static string WrapAsHtmlDocument(string subject, string layout, string body)
{
return string.Format(layout, subject, body);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace StudySharp.ApplicationServices.EmailService.Models
{
public class EmailContact
{
public EmailContact()
{
}

public EmailContact(string name, string email)
{
Name = name;
Email = email;
}

public string Name { get; set; }
public string Email { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace StudySharp.ApplicationServices.EmailService.Models
{
public class EmailTemplate
{
public string Subject { get; set; }
public string Layout { get; set; }
public string Body { get; set; }

public Email Build(params string[] bodyParams)
{
return new Email(Subject, string.Format(Body, bodyParams), Layout);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,9 @@ public class EmailServiceSettings
{
public string Name { get; set; }
public string From { get; set; }
public string Smtp { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Microsoft.EntityFrameworkCore;
using StudySharp.Domain.Constants;
using StudySharp.Domain.General;
using StudySharp.Domain.Models;
Expand Down