diff --git a/src/Email.Tests/Email.Tests.csproj b/src/Email.Tests/Email.Tests.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..de237a6820c6a51a940996909608ab5c026f0308
--- /dev/null
+++ b/src/Email.Tests/Email.Tests.csproj
@@ -0,0 +1,22 @@
+<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>
diff --git a/src/Email.Tests/EmailTest.cs b/src/Email.Tests/EmailTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..24bab35c10fb155332e98156e3697f969ca26038
--- /dev/null
+++ b/src/Email.Tests/EmailTest.cs
@@ -0,0 +1,40 @@
+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
diff --git a/src/Email.sln b/src/Email.sln
index 7a34c35ed6d4742b72061d5a65d998263bf76d80..be1df033ba2210b93152da5cea42a8859f7b1d53 100644
--- a/src/Email.sln
+++ b/src/Email.sln
@@ -1,9 +1,11 @@
 
 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
diff --git a/src/Email/Email.cs b/src/Email/Email.cs
index a0e3e23bc204d7ff1f46247693893691a39b1b5f..dd89fa8e0202145809e176f1a570571a1a80284d 100644
--- a/src/Email/Email.cs
+++ b/src/Email/Email.cs
@@ -1,37 +1,33 @@
-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.Host = host;
+                _client.Authenticate(credentialName, credentialPassword);
+            }            
         }
 
         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)
+        private static MimeMessage CreateMailMessage(string from, string to, string cc, string mailSubject, string content)
         {
-            MailMessage mail = new MailMessage(from, to)
-            {
-                Subject = HttpUtility.HtmlDecode(mailSubject),
-                IsBodyHtml = true
-                
-            };
-            mail.SubjectEncoding = System.Text.Encoding.UTF8;
+            MimeMessage email = new MimeMessage();
+
+            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()