Skip to content

Commit eacba82

Browse files
committed
Update newtonsoft and initialize smtp parameters on start
1 parent 26a7d01 commit eacba82

10 files changed

Lines changed: 69 additions & 38 deletions

File tree

azure-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ stages:
5555
buildContext: '$(Pipeline.Workspace)/emailservice-build'
5656
tags: |
5757
$(Build.BuildId)
58-
latest
58+
latest

src/Client/Client.csproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515

1616
<ItemGroup>
1717
<PackageReference Include="Microsoft.Extensions.Http" Version="2.2.0" />
18-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
18+
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
19+
</ItemGroup>
20+
21+
<ItemGroup>
22+
<ProjectReference Include="..\PublicAPI\PublicAPI.csproj" />
1923
</ItemGroup>
2024

2125
</Project>

src/Client/HttpEmailSender.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Newtonsoft.Json;
2+
using RTUITLab.EmailService.PublicAPI.Requests;
23
using System;
34
using System.Net.Http;
45
using System.Text;

src/Client/SendEmailRequest.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/EmailService.LogsViewer/EmailService.LogsViewer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
10+
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
1111
</ItemGroup>
1212

1313
<ItemGroup>

src/EmailService.sln

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29905.134
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.3.32611.2
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailService", "EmailService\EmailService.csproj", "{B5045CB1-D33E-452C-8B1A-A515CBC0CF67}"
77
EndProject
@@ -11,7 +11,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csp
1111
EndProject
1212
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublicAPI", "PublicAPI\PublicAPI.csproj", "{D092C687-8707-4D0C-AD8A-F4F1FB1718F2}"
1313
EndProject
14-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailService.LogsViewer", "EmailService.LogsViewer\EmailService.LogsViewer.csproj", "{5AD09402-E028-4541-B765-9253BE73F3C0}"
14+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailService.LogsViewer", "EmailService.LogsViewer\EmailService.LogsViewer.csproj", "{5AD09402-E028-4541-B765-9253BE73F3C0}"
15+
EndProject
16+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{80C866E4-6597-41B0-A31A-62778B894901}"
17+
ProjectSection(SolutionItems) = preProject
18+
..\azure-pipelines.yml = ..\azure-pipelines.yml
19+
EndProjectSection
1520
EndProject
1621
Global
1722
GlobalSection(SolutionConfigurationPlatforms) = preSolution

src/EmailService/Controllers/EmailController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
using Microsoft.AspNetCore.Mvc;
55
using Microsoft.Extensions.Options;
66
using MimeKit;
7-
using Models.Requests;
87
using Models.Options;
8+
using RTUITLab.EmailService.PublicAPI.Requests;
99

1010
namespace EmailService.Controllers
1111
{
@@ -19,7 +19,7 @@ public EmailController(IOptions<EmailServiceOptions> emailSenderOptions)
1919
{
2020
this.options = emailSenderOptions.Value;
2121
}
22-
22+
// TODO: extract send logic to separate service from HTTP Controller
2323
private async Task<string> SendEmailAsync(string email, string subject, string message)
2424
{
2525
MimeMessage mailMessage = new MimeMessage();
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using MailKit.Net.Smtp;
2+
using MailKit.Security;
3+
using Microsoft.Extensions.Hosting;
4+
using Microsoft.Extensions.Logging;
5+
using Microsoft.Extensions.Options;
6+
using Models.Options;
7+
using System;
8+
using System.Threading;
9+
using System.Threading.Tasks;
10+
11+
namespace EmailService.Services.Initialization
12+
{
13+
public class SmtpOptionsValidator : IHostedService
14+
{
15+
private readonly IOptions<EmailServiceOptions> emailSenderOptions;
16+
private readonly ILogger<SmtpOptionsValidator> logger;
17+
18+
public SmtpOptionsValidator(
19+
IOptions<EmailServiceOptions> emailSenderOptions,
20+
ILogger<SmtpOptionsValidator> logger)
21+
{
22+
this.emailSenderOptions = emailSenderOptions;
23+
this.logger = logger;
24+
}
25+
public async Task StartAsync(CancellationToken cancellationToken)
26+
{
27+
logger.LogInformation("Checking smtp parameters to {Host} as {Email}", emailSenderOptions.Value.SmtpHost, emailSenderOptions.Value.Email);
28+
29+
using var client = new SmtpClient();
30+
try
31+
{
32+
await client.ConnectAsync(emailSenderOptions.Value.SmtpHost, emailSenderOptions.Value.SmtpPort, SecureSocketOptions.Auto, cancellationToken);
33+
await client.AuthenticateAsync(emailSenderOptions.Value.Email, emailSenderOptions.Value.Password, cancellationToken);
34+
await client.DisconnectAsync(true, cancellationToken);
35+
logger.LogInformation("SMTP optinos validated successfully");
36+
}
37+
catch (Exception ex)
38+
{
39+
logger.LogCritical(ex, "Can't connect to STMP host");
40+
throw;
41+
}
42+
}
43+
44+
public Task StopAsync(CancellationToken cancellationToken)
45+
{
46+
return Task.CompletedTask;
47+
}
48+
}
49+
}

src/EmailService/Startup.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using EmailService.Middlewares;
2+
using EmailService.Services.Initialization;
23
using EmailService.Services.Logs;
34
using Microsoft.AspNetCore.Builder;
45
using Microsoft.AspNetCore.Hosting;
@@ -25,6 +26,7 @@ public void ConfigureServices(IServiceCollection services)
2526
services.AddControllers();
2627

2728
services.Configure<EmailServiceOptions>(Configuration.GetSection(nameof(EmailServiceOptions)));
29+
services.AddHostedService<SmtpOptionsValidator>();
2830

2931
services.AddSingleton<ILogsWebSocketHandler>(LogsWebSocketHandler.Instance);
3032
}

src/Models/Requests/SendEmailRequest.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)