Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
d257b58
Adds the SVG mime type (fixes #13).
GillesTourreau Sep 23, 2026
95f95f4
Increase the version to 1.3.0
GillesTourreau Sep 23, 2026
ce0b381
Adds the support of Mailjet as Emailing provider (fixes #14).
GillesTourreau Sep 25, 2026
79093a6
Add integration tests for the emailing providers.
GillesTourreau Sep 25, 2026
ff9cb90
Adds the support to configure the sender display name (fixes #16).
GillesTourreau Sep 25, 2026
412f76b
Add EmailingOptionsValidator to check the options of emailing feature.
GillesTourreau Sep 25, 2026
dc537d3
Fix warnings
GillesTourreau Sep 25, 2026
0f9ff35
Upgrades NuGet packages
GillesTourreau Sep 25, 2026
3c1456e
Fix warnings
GillesTourreau Sep 25, 2026
51264a5
Fix unit tests failed
GillesTourreau Sep 25, 2026
d4ba8e6
Add the README.md file for Emailing.Mailjet
GillesTourreau Sep 25, 2026
8c98b5b
Downgrade the version of Mailjet to v3.0.0
GillesTourreau Sep 25, 2026
f82dc26
Add the support of the errors for emailing feature (fixes #15).
GillesTourreau Sep 25, 2026
d66b579
Merge branch 'releases/v1.3.0' of https://github.com/PosInformatique/…
GillesTourreau Sep 28, 2026
6018f27
Upgrade Mailjet to the version 4.0.0
GillesTourreau Sep 28, 2026
fbf50bb
Updates the documentation
GillesTourreau Sep 28, 2026
14bd109
Fix release notes
GillesTourreau Sep 28, 2026
060052d
Adds the XUnit Analyzers
GillesTourreau Sep 28, 2026
a04e08f
Disable tracking for the e-mail with Mailjet provider.
GillesTourreau Sep 29, 2026
95eee8e
Fix the README of all the libraries
GillesTourreau Sep 30, 2026
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
2 changes: 1 addition & 1 deletion .github/workflows/github-actions-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
type: string
description: The version of the library
required: true
default: 1.2.0
default: 1.3.0
VersionSuffix:
type: string
description: The version suffix of the library (for example rc.1)
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Ignore Visual Studio temporary files, build results, and
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
Expand Down Expand Up @@ -416,3 +416,6 @@ FodyWeavers.xsd
*.msix
*.msm
*.msp

# For integrations tests
*.local.settings.json
28 changes: 20 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,40 @@

## Changelog

### 1.3.0

#### PosInformatique.Foundations.Emailing
- Added the support to specify the sender display name.
- Throws a `EmailProviderException` when the email provider fails to send an email.

#### PosInformatique.Foundations.Emailing.Mailjet
- New emailing provider to send emails using Mailjet.

#### PosInformatique.Foundations.MediaTypes
- Added support for SVG image MIME type.

### 1.2.0

#### PosInformatique.Foundations.People.AwesomeAssertions
- Add the support with AwesomeAssertions to assert the FirstName and LastName value objects.
- Added support with AwesomeAssertions to assert the FirstName and LastName value objects.

### 1.1.0

- Add the support of .NET 10.0 for all the packages.
- Added support of .NET 10.0 for all the packages.

#### PosInformatique.Foundations.Emailing
- Add the support to send emails with attachments.
- Add a new overload method `EmailRecipientCollection<TModel>.Add(EmailAddress, TModel)`.
- Added support to send emails with attachments.
- Added a new overload method `EmailRecipientCollection<TModel>.Add(EmailAddress, TModel)`.

#### PosInformatique.Foundations.Emailing.Azure
- Add the support to send emails with attachments.
- Upgrade the [Microsoft.Extensions.Azure](https://www.nuget.org/packages/Microsoft.Extensions.Azure) dependency to version 1.13.1 to fix security vulnerabilities.
- Added support to send emails with attachments.
- Upgraded the [Microsoft.Extensions.Azure](https://www.nuget.org/packages/Microsoft.Extensions.Azure) dependency to version 1.13.1 to fix security vulnerabilities.

#### PosInformatique.Foundations.Emailing.Graph
- Add the support to send emails with attachments.
- Added support to send emails with attachments.

#### PosInformatique.Foundations.Text.Templating.Scriban
- Upgrade the [Scriban](https://www.nuget.org/packages/Scriban) dependency to version 7.0.0 to fix security vulnerabilities.
- Upgraded the [Scriban](https://www.nuget.org/packages/Scriban) dependency to version 7.0.0 to fix security vulnerabilities.

### 1.0.0
- Initial version of the following packages:
Expand Down
18 changes: 12 additions & 6 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,35 @@
<ItemGroup>
<PackageVersion Include="AwesomeAssertions" Version="9.0.0" />
<PackageVersion Include="Azure.Communication.Email" Version="1.0.0" />
<PackageVersion Include="Azure.Identity" Version="1.17.1" />
<PackageVersion Include="FluentAssertions" Version="7.2.0" />
<PackageVersion Include="FluentValidation" Version="12.0.0" />
<PackageVersion Include="libphonenumber-csharp" Version="9.0.1" />
<PackageVersion Include="Mailjet.Api" Version="4.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(DotNetVersion)" Condition="'$(TargetFramework)' != 'net8.0'" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.25" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="Microsoft.Extensions.Azure" Version="1.13.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="$(DotNetVersion)" Condition="'$(TargetFramework)' != 'net8.0'" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="$(DotNetVersion)" />
<PackageVersion Include="Microsoft.Graph" Version="5.89.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.5.2" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.1.0" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.11.2" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.4.1" />
<PackageVersion Include="Moq" Version="4.21.0" />
<PackageVersion Include="PosInformatique.AwesomeAssertions.Json" Version="1.0.0" />
<PackageVersion Include="PosInformatique.Moq.Analyzers" Version="2.0.1" />
<PackageVersion Include="PosInformatique.Moq.Analyzers" Version="2.1.0" />
<PackageVersion Include="Scriban" Version="7.0.0" />
<PackageVersion Include="SonarAnalyzer.CSharp" Version="10.22.0.136894" />
<PackageVersion Include="SonarAnalyzer.CSharp" Version="10.34.0.3385" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
<PackageVersion Include="xunit.v3.core.mtp-v2" Version="3.2.2" />
<PackageVersion Include="xunit.analyzers" Version="2.1.0" />
<PackageVersion Include="xunit.v3.assert" Version="4.0.1" />
<PackageVersion Include="xunit.v3.core.mtp-v2" Version="4.0.1" />
</ItemGroup>
</Project>
4 changes: 4 additions & 0 deletions PosInformatique.Foundations.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
<Project Path="src/Emailing.Graph/Emailing.Graph.csproj" Id="5874e6da-a783-4e2d-8317-0e783a6ee511" />
<Project Path="tests/Emailing.Graph.Tests/Emailing.Graph.Tests.csproj" Id="3cace78b-a3ac-4a7a-b1f3-92dce29c5544" />
</Folder>
<Folder Name="/Emailing/MailJet/">
<Project Path="src/Emailing.Mailjet/Emailing.Mailjet.csproj" />
<Project Path="tests/Emailing.Mailjet.Tests/Emailing.Mailjet.Tests.csproj" />
</Folder>
<Folder Name="/Emailing/Templates/" />
<Folder Name="/Emailing/Templates/Razor/">
<Project Path="src/Emailing.Templates.Razor/Emailing.Templates.Razor.csproj" Id="2d0078a9-305d-43ad-aaa9-9f35f62f0873" />
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ You can install any package using the .NET CLI or NuGet Package Manager.
|<img src="./src/Emailing/Icon.png" alt="PosInformatique.Foundations.Emailing icon" width="48" height="48" />|[**Emailing**](./src/Emailing/README.md) | Template-based emailing infrastructure for .NET that lets you register strongly-typed email templates, create emails from models, and send them through pluggable providers. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.Emailing)](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing) |
|<img src="./src/Emailing/Icon.png" alt="PosInformatique.Foundations.Emailing.Azure icon" width="48" height="48" />|[**Emailing.Azure**](./src/Emailing.Azure/README.md) | `IEmailProvider` implementation for [PosInformatique.Foundations.Emailing](./src/Emailing/README.md) using **Azure Communication Service**. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.Emailing.Azure)](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing.Azure) |
|<img src="./src/Emailing/Icon.png" alt="PosInformatique.Foundations.Emailing.Graph icon" width="48" height="48" />|[**Emailing.Graph**](./src/Emailing.Graph/README.md) | `IEmailProvider` implementation for [PosInformatique.Foundations.Emailing](./src/Emailing/README.md) using **Microsoft Graph API**. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.Emailing.Graph)](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing.Graph) |
|<img src="./src/Emailing/Icon.png" alt="PosInformatique.Foundations.Emailing.Mailjet icon" width="48" height="48" />|[**Emailing.Mailjet**](./src/Emailing.Mailjet/README.md) | `IEmailProvider` implementation for [PosInformatique.Foundations.Emailing](./src/Emailing/README.md) using **Mailjet**. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.Emailing.Mailjet)](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing.Mailjet) |
|<img src="./src/Emailing/Icon.png" alt="PosInformatique.Foundations.Emailing.Templates.Razor icon" width="48" height="48" />|[**Emailing.Templates.Razor**](./src/Emailing.Templates.Razor/README.md) | Helpers to build EmailTemplate instances from Razor components for subject and HTML body, supporting strongly-typed models and reusable layouts. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.Emailing.Templates.Razor)](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing.Templates.Razor) |
|<img src="./src/EntityFramework.Migrations/Icon.png" alt="PosInformatique.Foundations.EntityFramework.Migrations icon" width="48" height="48" />|[**EntityFramework.Migrations**](./src/EntityFramework.Migrations/README.md) | Extension methods for the Entity Framework Core `MigrationBuilder` to rename foreign key and primary key constraints. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.EntityFramework.Migrations)](https://www.nuget.org/packages/PosInformatique.Foundations.EntityFramework.Migrations) |
|<img src="./src/MediaTypes/Icon.png" alt="PosInformatique.Foundations.MediaTypes icon" width="48" height="48" />|[**MediaTypes**](./src/MediaTypes/README.md) | Immutable `MimeType` value object with well-known media types and helpers to map between media types and file extensions. | [![NuGet](https://img.shields.io/nuget/v/PosInformatique.Foundations.MediaTypes)](https://www.nuget.org/packages/PosInformatique.Foundations.MediaTypes) |
Expand Down Expand Up @@ -82,7 +83,7 @@ for more details.

### Example with Microsoft.Graph

The [PosInformatique.Foundations.Emailing.Graph](https://www.nuget.org/packages/[PosInformatique.Foundations.Emailing.Graph/)
The [PosInformatique.Foundations.Emailing.Graph](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing.Graph/)
package depends on [Microsoft.Graph](https://www.nuget.org/packages/Microsoft.Graph/) **5.89.0**
for backward compatibility with a wide range of existing projects.

Expand All @@ -97,12 +98,12 @@ If your application requires a newer version, you can simply add an explicit ref

In this case, your project will use [Microsoft.Graph](https://www.nuget.org/packages/Microsoft.Graph/) **5.96.0**
while still consuming
[PosInformatique.Foundations.Emailing.Graph](https://www.nuget.org/packages/[PosInformatique.Foundations.Emailing.Graph/).
[PosInformatique.Foundations.Emailing.Graph](https://www.nuget.org/packages/PosInformatique.Foundations.Emailing.Graph/).
This is **recommended**, especially to benefit from the latest security updates and bug fixes of the underlying dependencies.

> The next versions of [PosInformatique.Foundations](https://github.com/PosInformatique/PosInformatique.Foundations) packages
> will updated their dependencies to newer versions, if there is security vulnerabilities reported by NuGet or GitHub advisories.
> This to force also developers to avoid using vulnerable versions of the dependencies when upgrading to the new versions of the packages.
> will update their dependencies to newer versions if there are security vulnerabilities reported by NuGet or GitHub advisories.
> This is also meant to force developers to avoid using vulnerable versions of the dependencies when upgrading to the new versions of the packages.

## 📄 License

Expand Down
2 changes: 1 addition & 1 deletion src/EmailAddresses.EntityFramework/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ This package depends on the base package [PosInformatique.Foundations.EmailAddre
## Use cases
- **Entity mapping**: enforce strong typing for email addresses at the persistence layer.
- **Consistency**: ensure the same validation rules are applied in your entities and database.
- **Safety**: prevent invalid strings being stored in your database
- **Safety**: prevent invalid strings from being stored in your database.

## Examples

Expand Down
18 changes: 9 additions & 9 deletions src/EmailAddresses.EntityFramework/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down Expand Up @@ -150,9 +150,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down Expand Up @@ -286,9 +286,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down
18 changes: 9 additions & 9 deletions src/EmailAddresses.FluentValidation/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down Expand Up @@ -41,9 +41,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down Expand Up @@ -72,9 +72,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down
18 changes: 9 additions & 9 deletions src/EmailAddresses.Json/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
"net10.0": {
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand All @@ -29,9 +29,9 @@
"net8.0": {
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand All @@ -54,9 +54,9 @@
"net9.0": {
"SonarAnalyzer.CSharp": {
"type": "Direct",
"requested": "[10.22.0.136894, )",
"resolved": "10.22.0.136894",
"contentHash": "6fI0XUWHvFIa/cvo1HuopV1Gh1hnKJq+XlTMJ2q71+6D3uVkl6Vxza3fFKQ9C4Bc7KFUFtukzRPmiH1be0JxOA=="
"requested": "[10.34.0.3385, )",
"resolved": "10.34.0.3385",
"contentHash": "FfjaQa9G9xdEyh14AYWeG6vLQ+2PZWkooI/w3cH5aGBGGeWmhjeWS+/luYoJDYgrXMI2ciBj42y6buhJJHO2ow=="
},
"StyleCop.Analyzers": {
"type": "Direct",
Expand Down
4 changes: 2 additions & 2 deletions src/EmailAddresses/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# PosInformatique.Foundations.EmailAddresses
# PosInformatique.Foundations.EmailAddresses

[![NuGet version](https://img.shields.io/nuget/v/PosInformatique.Foundations.EmailAddresses)](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses/)
[![NuGet downloads](https://img.shields.io/nuget/dt/PosInformatique.Foundations.EmailAddresses)](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses/)
Expand Down Expand Up @@ -72,6 +72,6 @@ list.Sort(); // Sorted alphabetically
## Links
- [NuGet package: EmailAddresses (core library)](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses/)
- [NuGet package: EmailAddresses.EntityFramework](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses.EntityFramework/)
- [NuGet package: EmailAddresses.FluentValidations](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses.FluentValidation/)
- [NuGet package: EmailAddresses.FluentValidation](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses.FluentValidation/)
- [NuGet package: EmailAddresses.Json](https://www.nuget.org/packages/PosInformatique.Foundations.EmailAddresses.Json/)
- [Source code](https://github.com/PosInformatique/PosInformatique.Foundations)
Loading
Loading