diff --git a/Elsa.sln b/Elsa.sln
index 190d01ced..97910b36f 100644
--- a/Elsa.sln
+++ b/Elsa.sln
@@ -116,6 +116,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Composition",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.EntityFrameworkCore.SqlServer", "src\modules\Elsa.Persistence.EntityFrameworkCore.SqlServer\Elsa.Persistence.EntityFrameworkCore.SqlServer.csproj", "{555A4306-3BAB-409E-8BB8-3171A5867B2C}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Email", "src\modules\Elsa.Email\Elsa.Email.csproj", "{1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -294,6 +296,10 @@ Global
{555A4306-3BAB-409E-8BB8-3171A5867B2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{555A4306-3BAB-409E-8BB8-3171A5867B2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{555A4306-3BAB-409E-8BB8-3171A5867B2C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{155227F0-A33B-40AA-A4B4-06F813EB921B} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F}
@@ -346,5 +352,6 @@ Global
{55AAF940-12DC-4793-805C-992AEF2C1E8D} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5}
{1AA0AEFC-BD58-4284-A6C5-AD15C5C79782} = {873BFC3E-63C2-4495-A503-5EC05DCD84E4}
{555A4306-3BAB-409E-8BB8-3171A5867B2C} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
+ {1E5BD8D9-55BE-41E2-B389-6AB9F26C22AF} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
EndGlobalSection
EndGlobal
diff --git a/src/modules/Elsa.Email/Activities/SendEmail.cs b/src/modules/Elsa.Email/Activities/SendEmail.cs
new file mode 100644
index 000000000..538bc3042
--- /dev/null
+++ b/src/modules/Elsa.Email/Activities/SendEmail.cs
@@ -0,0 +1,181 @@
+using System.Collections;
+using System.Text;
+using System.Text.Json;
+using Elsa.Email.Models;
+using Elsa.Email.Options;
+using Elsa.Email.Services;
+using Elsa.Workflows.Core;
+using Elsa.Workflows.Core.Attributes;
+using Elsa.Workflows.Core.Models;
+using Elsa.Workflows.Core.Services;
+using Elsa.Workflows.Management.Models;
+using Microsoft.Extensions.Options;
+using MimeKit;
+
+namespace Elsa.Email.Activities;
+
+///
+/// Send an email message.
+///
+[Activity("Email", "Send an email message.", Kind = ActivityKind.Task)]
+public class SendEmail : ActivityBase
+{
+ ///
+ /// The sender's email address.
+ ///
+ [Input(Description = "The sender's email address.")]
+ public Input From { get; set; }
+
+ [Input(Description = "The recipients email addresses.", UIHint = InputUIHints.MultiText)]
+ public Input> To { get; set; } = default!;
+
+ [Input(
+ Description = "The cc recipient email addresses.",
+ UIHint = InputUIHints.MultiText,
+ Category = "More")]
+ public Input> Cc { get; set; } = default!;
+
+ [Input(
+ Description = "The Bcc recipients email addresses.",
+ UIHint = InputUIHints.MultiText,
+ Category = "More")]
+ public Input> Bcc { get; set; } = default!;
+
+ [Input(Description = "The subject of the email message.")]
+ public Input Subject { get; set; } = default!;
+
+ [Input(
+ Description = "The attachments to send with the email message. Can be (an array of) a fully-qualified file path, URL, stream, byte array or instances of EmailAttachment.",
+ UIHint = InputUIHints.MultiLine
+ )]
+ public Input