diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/FodyWeavers.xml b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/FodyWeavers.xml
new file mode 100644
index 000000000..5d6962159
--- /dev/null
+++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/FodyWeavers.xsd b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/FodyWeavers.xsd
new file mode 100644
index 000000000..3f3946e28
--- /dev/null
+++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN.Abp.ElsaNext.Email.csproj b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN.Abp.ElsaNext.Email.csproj
new file mode 100644
index 000000000..8277c0b2b
--- /dev/null
+++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN.Abp.ElsaNext.Email.csproj
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ net10.0
+ LINGYUN.Abp.ElsaNext.Email
+ LINGYUN.Abp.ElsaNext.Email
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN/Abp/ElsaNext/Email/AbpElsaNextEmailModule.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN/Abp/ElsaNext/Email/AbpElsaNextEmailModule.cs
new file mode 100644
index 000000000..b73c13f66
--- /dev/null
+++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN/Abp/ElsaNext/Email/AbpElsaNextEmailModule.cs
@@ -0,0 +1,38 @@
+using Elsa.Features.Services;
+using LINGYUN.Abp.ElsaNext.Email.Extensions;
+using LINGYUN.Abp.ElsaNext.Localization;
+using Volo.Abp.Emailing;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace LINGYUN.Abp.ElsaNext.Email;
+
+[DependsOn(
+ typeof(AbpEmailingModule),
+ typeof(AbpElsaNextModule))]
+public class AbpElsaNextEmailModule : AbpModule
+{
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ PreConfigure(elsa =>
+ {
+ elsa.UseAbpEmail();
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddVirtualJson("/LINGYUN/Abp/ElsaNext/Email/Localization/Resources");
+ });
+ }
+}
diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN/Abp/ElsaNext/Email/Activities/SendEmail.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN/Abp/ElsaNext/Email/Activities/SendEmail.cs
new file mode 100644
index 000000000..a9cc3e01e
--- /dev/null
+++ b/aspnet-core/modules/elsa/LINGYUN.Abp.ElsaNext.Email/LINGYUN/Abp/ElsaNext/Email/Activities/SendEmail.cs
@@ -0,0 +1,274 @@
+using Elsa.Extensions;
+using Elsa.Workflows;
+using Elsa.Workflows.Attributes;
+using Elsa.Workflows.Models;
+using Elsa.Workflows.UIHints;
+using LINGYUN.Abp.ElsaNext.Email.Contracts;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.IO;
+using System.Net.Mail;
+using System.Net.Mime;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Emailing;
+using Volo.Abp.Json;
+
+namespace LINGYUN.Abp.ElsaNext.Email.Activities;
+
+[Activity("Elsa", "Email", "Send an email message.", Kind = ActivityKind.Task)]
+public class SendEmail : Activity
+{
+ ///
+ /// The sender's email address.
+ ///
+ [Input(Description = "The sender's email address.")]
+ public Input From { get; set; } = null!;
+
+ ///
+ /// The recipients email addresses.
+ ///
+ [Input(Description = "The recipients email addresses.", UIHint = InputUIHints.MultiText)]
+ public Input> To { get; set; } = null!;
+
+ ///
+ /// The CC recipient email addresses.
+ ///
+ [Input(
+ Description = "The CC recipient email addresses.",
+ UIHint = InputUIHints.MultiText,
+ Category = "More")]
+ public Input> Cc { get; set; } = null!;
+
+ ///
+ /// The BCC recipients email addresses.
+ ///
+ [Input(
+ Description = "The BCC recipients email addresses.",
+ UIHint = InputUIHints.MultiText,
+ Category = "More")]
+ public Input> Bcc { get; set; } = null!;
+
+ ///
+ /// The subject of the email message.
+ ///
+ [Input(Description = "The subject of the email message.")]
+ public Input Subject { get; set; } = null!;
+
+ ///
+ /// The attachments to send with the email message.
+ ///
+ [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