Skip to content
Snippets Groups Projects
Commit c092b92b authored by Sandra Westerhoff's avatar Sandra Westerhoff Committed by Benedikt Heinrichs
Browse files

Update: Use of Mailkit

parent 3489aa58
No related branches found
No related tags found
2 merge requests!29Release: Sprint/2022 22 :robot:,!28Update: Use of Mailkit
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Coscine.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
<PackageReference Include="coverlet.collector" Version="3.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Email\Email.csproj" />
</ItemGroup>
</Project>
using NUnit.Framework;
using System;
using System.Threading.Tasks;
using Coscine.Configuration;
namespace Coscine.Email.Tests
{
public class EmailTest
{
private static readonly IConfiguration _configuration = new ConsulConfiguration();
private static readonly string _port = _configuration.GetStringAndWait("coscine/global/email/port");
private static readonly string _host = _configuration.GetStringAndWait("coscine/global/email/host");
private static readonly string _from = _configuration.GetStringAndWait("coscine/global/email/from");
private static readonly string to = "westerhoff@itc.rwth-aachen.de";
private static readonly string mailSubject = "Test Email";
private static readonly string content = "Das ist eine Test Email.";
[Test]
public void SendEmailTest()
{
Email email = new Email(_port, _host, null, null);
bool a = email.SendEmail(_from, to, null, mailSubject, content);
email.Dispose();
Assert.True(a);
}
[Test]
public async Task SendEmailAsyncTest()
{
Email email = new Email(_port, _host, null, null);
await email.SendEmailAsync(_from, to, null, mailSubject, content);
email.Dispose();
Assert.Pass();
}
}
}
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28803.352
# Visual Studio Version 17
VisualStudioVersion = 17.0.32112.339
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Email", "Email/Email.csproj", "{2A331B4B-50C2-43BD-9178-06F138B5E4DB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Email", "Email\Email.csproj", "{2A331B4B-50C2-43BD-9178-06F138B5E4DB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Email.Tests", "Email.Tests\Email.Tests.csproj", "{84D59E93-9BF9-4BCD-A9DF-166ECBAA57B2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
......@@ -15,6 +17,10 @@ Global
{2A331B4B-50C2-43BD-9178-06F138B5E4DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A331B4B-50C2-43BD-9178-06F138B5E4DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A331B4B-50C2-43BD-9178-06F138B5E4DB}.Release|Any CPU.Build.0 = Release|Any CPU
{84D59E93-9BF9-4BCD-A9DF-166ECBAA57B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84D59E93-9BF9-4BCD-A9DF-166ECBAA57B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84D59E93-9BF9-4BCD-A9DF-166ECBAA57B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84D59E93-9BF9-4BCD-A9DF-166ECBAA57B2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......
using System;
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using MimeKit.Text;
using System;
using System.IO;
using System.Net.Mail;
using System.Threading.Tasks;
using System.Web;
namespace Coscine.Email
{
// TODO: Migrate to Mailkit
public class Email : IEmail, IDisposable
{
private readonly SmtpClient _client;
public Email(string port, string host, string credentialName, string credentialPasswort, bool ssl = false)
public Email(string port, string host, string credentialName, string credentialPassword, bool ssl = false)
{
_client = new SmtpClient();
int.TryParse(port, out int portTemp);
_client.Port = portTemp;
_client.DeliveryMethod = SmtpDeliveryMethod.Network;
if (string.IsNullOrWhiteSpace(credentialName))
{
_client.UseDefaultCredentials = false;
}
else
bool parsed = int.TryParse(port, out int portTemp);
if (!parsed)
{
_client.Credentials = new System.Net.NetworkCredential(credentialName, credentialPasswort);
throw new FormatException("Please check the provided port!");
}
if (ssl)
_client.Connect(host, portTemp, ssl);
if (!string.IsNullOrEmpty(credentialName) && !string.IsNullOrEmpty(credentialPassword))
{
_client.EnableSsl = true;
_client.Authenticate(credentialName, credentialPassword);
}
_client.Host = host;
}
public bool SendEmail(string from, string to, string cc, string mailSubject, Stream content)
......@@ -43,11 +39,11 @@ namespace Coscine.Email
{
try
{
MailMessage mail = CreateMailMessage(from, to, cc, mailSubject, content);
MimeMessage mail = CreateMailMessage(from, to, cc, mailSubject, content);
_client.Send(mail);
return true;
}
catch (SmtpException)
catch (Exception)
{
return false;
}
......@@ -60,8 +56,8 @@ namespace Coscine.Email
public async Task SendEmailAsync(string from, string to, string cc, string mailSubject, string content)
{
MailMessage mail = CreateMailMessage(from, to, cc, mailSubject, content);
await _client.SendMailAsync(mail);
MimeMessage mail = CreateMailMessage(from, to, cc, mailSubject, content);
await _client.SendAsync(mail);
}
private static string StreamToString(Stream content)
......@@ -74,22 +70,21 @@ namespace Coscine.Email
return s;
}
private static MailMessage CreateMailMessage(string from, string to, string cc, string mailSubject, string content)
{
MailMessage mail = new MailMessage(from, to)
private static MimeMessage CreateMailMessage(string from, string to, string cc, string mailSubject, string content)
{
Subject = HttpUtility.HtmlDecode(mailSubject),
IsBodyHtml = true
MimeMessage email = new MimeMessage();
};
mail.SubjectEncoding = System.Text.Encoding.UTF8;
email.From.Add(MailboxAddress.Parse(from));
email.To.Add(MailboxAddress.Parse(to));
email.Subject = HttpUtility.HtmlDecode(mailSubject);
email.Body = new TextPart(TextFormat.Html) { Text = content };
if (!string.IsNullOrEmpty(cc))
{
mail.CC.Add(new MailAddress(cc));
email.Cc.Add(MailboxAddress.Parse(cc));
}
mail.Body = content;
return mail;
return email;
}
public void Dispose()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment