Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • Hotfix/1389-projectForbiddenCharacters
  • Issue/1910-MigrationtoNET6.0
  • Issue/1968-replaceContactEmails
  • Issue/2263-changeMailingDomain
  • Issue/2309-docs
  • Issue/50-signatureOfMails
  • Product/1089-htmlEmail
  • Product/1287-dotnet5Sharepoint
  • Product/407-net5migration
  • Sprint/2020-20
  • Sprint/2021-01
  • Sprint/2021-03
  • Sprint/2021-05
  • Sprint/2021-22
  • Sprint/2021-23
  • Sprint/2022-01
  • Sprint/2022-05
  • Sprint/2023
  • Topic/1126-enableHTMLEmail
  • Topic/1226-emailLibraryMigration
  • Topic/1334-dotnet5migration
  • dev
  • gitkeep
  • master
  • test_localfeed
  • v1.0.0
  • v1.0.1
  • v1.1.0
  • v1.2.0
  • v1.3.0
  • v2.0.0
  • v2.0.1
  • v2.1.0
  • v2.2.0
  • v2.3.0
  • v2.3.1
  • v2.3.2
  • v2.3.3
38 results

Target

Select target project
  • coscine/backend/libraries/email
1 result
Select Git revision
  • Hotfix/1389-projectForbiddenCharacters
  • Issue/1910-MigrationtoNET6.0
  • Issue/1968-replaceContactEmails
  • Issue/2263-changeMailingDomain
  • Issue/2309-docs
  • Issue/50-signatureOfMails
  • Product/1089-htmlEmail
  • Product/1287-dotnet5Sharepoint
  • Product/407-net5migration
  • Sprint/2020-20
  • Sprint/2021-01
  • Sprint/2021-03
  • Sprint/2021-05
  • Sprint/2021-22
  • Sprint/2021-23
  • Sprint/2022-01
  • Sprint/2022-05
  • Sprint/2023
  • Topic/1126-enableHTMLEmail
  • Topic/1226-emailLibraryMigration
  • Topic/1334-dotnet5migration
  • dev
  • gitkeep
  • master
  • test_localfeed
  • v1.0.0
  • v1.0.1
  • v1.1.0
  • v1.2.0
  • v1.3.0
  • v2.0.0
  • v2.0.1
  • v2.1.0
  • v2.2.0
  • v2.3.0
  • v2.3.1
  • v2.3.2
  • v2.3.3
38 results
Show changes
Commits on Source (5)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<Version>2.3.2</Version></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()
......
......@@ -4,7 +4,7 @@
<RootNamespace>Coscine.Email</RootNamespace>
<AssemblyName>Coscine.Email</AssemblyName>
<TargetFramework>net6.0</TargetFramework>
<Version>2.3.1</Version>
<Version>2.3.2</Version>
</PropertyGroup>
<PropertyGroup>
<Authors>RWTH Aachen University</Authors>
......