{"id":21602411,"url":"https://github.com/a-patel/litexemail","last_synced_at":"2025-04-11T02:33:25.553Z","repository":{"id":109325606,"uuid":"130588247","full_name":"a-patel/LiteXEmail","owner":"a-patel","description":"LiteXEmail is simple yet powerful and very high-performance sms mechanism and incorporating both synchronous and asynchronous usage with some advanced usages which can help us to handle sending email more easier!","archived":false,"fork":false,"pushed_at":"2022-05-17T16:11:26.000Z","size":142,"stargazers_count":8,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-09T07:49:53.336Z","etag":null,"topics":["amazonses","asp-net-core","aspnet-core","aspnetcore","csharp","email","emailhelper","emailutil","emailutility","litex","mailchimp","mailgun","mailkit","mailmessage","message","netcore","nuget","sendgrid","sendinblue","smtp"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/a-patel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-22T16:57:22.000Z","updated_at":"2021-11-13T02:52:07.000Z","dependencies_parsed_at":"2023-04-22T16:01:10.107Z","dependency_job_id":null,"html_url":"https://github.com/a-patel/LiteXEmail","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-patel%2FLiteXEmail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-patel%2FLiteXEmail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-patel%2FLiteXEmail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/a-patel%2FLiteXEmail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/a-patel","download_url":"https://codeload.github.com/a-patel/LiteXEmail/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247999840,"owners_count":21031044,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amazonses","asp-net-core","aspnet-core","aspnetcore","csharp","email","emailhelper","emailutil","emailutility","litex","mailchimp","mailgun","mailkit","mailmessage","message","netcore","nuget","sendgrid","sendinblue","smtp"],"created_at":"2024-11-24T19:13:18.423Z","updated_at":"2025-04-11T02:33:25.536Z","avatar_url":"https://github.com/a-patel.png","language":null,"funding_links":["https://www.paypal.me/iamaashishpatel","https://www.buymeacoffee.com/iamaashishpatel","https://www.patreon.com/iamaashishpatel"],"categories":[],"sub_categories":[],"readme":"# LiteXEmail\n\n\u003e LiteXEmail is simple yet powerful and very high-performance email message sending mechanism and incorporating both synchronous and asynchronous usage with some advanced usages which can help us to handle sending email more easier!\n\n\n\nProvide email message service for ASP.NET Core (2.0 and later) applications.\n\nSmall library to abstract email message functionalities. Quick setup for any email message provider and very simple wrapper for the widely used email providers. LiteXEmail uses the least common denominator of functionality between the supported providers to send email messages solution. Abstract interface to implement any kind of basic email message services. Having a default/generic implementation to wrap the SMTP, SendGrid, MailKit, Mailgun, MailChimp, AmazonSES, SendinBlue. An email message abstraction.\n\nVery simple configuration in advanced ways. Purpose of this package is to bring a new level of ease to the developers who deal with different email message provider integration with their system and implements many advanced features. You can also write your own and extend it also extend existing providers. Easily migrate or switch between one to another provider with no code breaking changes.\n\nLiteXEmail is an interface to unify the programming model for various email providers. The Core library contains all base interfaces and tools. One should install at least one other LiteXEmail package to get email message implementation.\n\n\n\n\n\n## Email Providers :books:\n\n- [Smtp](docs/Smtp.md) [![](https://img.shields.io/nuget/dt/LiteX.Email.svg)](https://www.nuget.org/packages/LiteX.Email/) [![](https://img.shields.io/nuget/v/LiteX.Email.svg)](https://www.nuget.org/packages/LiteX.Email/)\n- [SendGrid](docs/SendGrid.md) [![](https://img.shields.io/nuget/dt/LiteX.Email.SendGrid.svg)](https://www.nuget.org/packages/LiteX.Email.SendGrid/) [![](https://img.shields.io/nuget/v/LiteX.Email.SendGrid.svg)](https://www.nuget.org/packages/LiteX.Email.SendGrid/)\n- [AmazonSES](docs/AmazonSES.md) [![](https://img.shields.io/nuget/dt/LiteX.Email.AmazonSES.svg)](https://www.nuget.org/packages/LiteX.Email.AmazonSES/) [![](https://img.shields.io/nuget/v/LiteX.Email.AmazonSES.svg)](https://www.nuget.org/packages/LiteX.Email.AmazonSES/)\n- [MailKit](docs/MailKit.md) [![](https://img.shields.io/nuget/dt/LiteX.Email.MailKit.svg)](https://www.nuget.org/packages/LiteX.Email.MailKit/) [![](https://img.shields.io/nuget/v/LiteX.Email.MailKit.svg)](https://www.nuget.org/packages/LiteX.Email.MailKit/)\n- [Mailgun](docs/Mailgun.md) [![](https://img.shields.io/nuget/dt/LiteX.Email.Mailgun.svg)](https://www.nuget.org/packages/LiteX.Email.Mailgun/) [![](https://img.shields.io/nuget/v/LiteX.Email.Mailgun.svg)](https://www.nuget.org/packages/LiteX.Email.Mailgun/)\n- [MailJet](docs/MailJet.md) - coming soon\n- [MailChimp](docs/MailChimp.md) - coming soon\n- [SendinBlue](docs/SendinBlue.md) - coming soon\n- [ElasticEmail](docs/ElasticEmail.md) - coming soon\n\n\n\n## Features :pager:\n\n- Attachment\n- ReplyTo\n- Cc, Bcc (multiple)\n- Async compatible\n- Thread safe, concurrency ready\n- Obsolete sync methods\n- Multiple provider support (using provider factory)\n- Interface based API to support the test driven development and dependency injection\n- Leverages a provider model on top of ILiteXEmailSender under the hood and can be extended with your own implementation\n\n\n\n## Basic Usage :page_facing_up:\n\n### Step 1 : Install the package :package:\n\n\u003e Choose one kinds of email provider type that you needs and install it via [Nuget](https://www.nuget.org/profiles/iamaashishpatel).\n\u003e To install LiteXEmail, run the following command in the [Package Manager Console](http://docs.nuget.org/docs/start-here/using-the-package-manager-console)\n\n```Powershell\nPM\u003e Install-Package LiteX.Email\nPM\u003e Install-Package LiteX.Email.SendGrid\nPM\u003e Install-Package LiteX.Email.AmazonSES\nPM\u003e Install-Package LiteX.Email.MailKit\nPM\u003e Install-Package LiteX.Email.Mailgun\n```\n\n\n### Step 2 : Configuration 🔨\n\n\u003e Different types of email provider have their own way to config.\n\u003e Here are samples that show you how to config.\n\n\n##### 2.1 : AppSettings\n\n```js\n{\n  //LiteX Smtp settings\n  \"SmtpConfig\": {\n    \"Email\": \"--- REPLACE WITH YOUR Email ---\",\n    \"DisplayName\": \"--- REPLACE WITH YOUR DisplayName ---\",\n    \"Host\": \"--- REPLACE WITH Host Host ---\",\n    \"Port\": 587, //\"--- REPLACE WITH YOUR Port (int) ---\",\n    \"Username\": \"--- REPLACE WITH YOUR Username ---\",\n    \"Password\": \"--- REPLACE WITH YOUR Password ---\",\n    \"EnableSsl\": true, //\"--- REPLACE WITH YOUR EnableSsl (boolean) ---\",\n    \"UseDefaultCredentials\": false, //\"--- REPLACE WITH YOUR UseDefaultCredentials (boolean) ---\",\n    \"EnableLogging\": true\n  },\n\n  //LiteX SendGrid settings\n  \"SendGridConfig\": {\n    \"SendGridApiKey\": \"--- REPLACE WITH YOUR SendGridApiKey ---\",\n    \"EnableLogging\": true\n  },\n\n  //LiteX AmazonSES settings\n  \"AmazonSESConfig\": {\n    \"AmazonSESAccessKey\": \"--- REPLACE WITH YOUR AmazonSESAccessKey ---\",\n    \"AmazonSESSecretKey\": \"--- REPLACE WITH YOUR AmazonSESSecretKey ---\",\n    \"AmazonRegion\": \"--- REPLACE WITH YOUR AmazonRegion ---\",\n    \"EnableLogging\": true\n  },\n\n  //LiteX MailKit settings\n  \"MailKitConfig\": {\n    \"Email\": \"--- REPLACE WITH YOUR Email ---\",\n    \"DisplayName\": \"--- REPLACE WITH YOUR DisplayName ---\",\n    \"Host\": \"--- REPLACE WITH Host Host ---\",\n    \"Port\": 587, //\"--- REPLACE WITH YOUR Port (int) ---\",\n    \"Username\": \"--- REPLACE WITH YOUR Username ---\",\n    \"Password\": \"--- REPLACE WITH YOUR Password ---\",\n    \"EnableSsl\": false,\n    \"UseDefaultCredentials\": false,\n    \"EnableLogging\": true\n  },\n\n  //LiteX Mailgun settings\n  \"MailgunConfig\": {\n    \"ApiKey\": \"api:key-fakeapikey\",\n    \"ApiBaseUri\": \"https://api.mailgun.net/v3/\",\n    \"RequestUri\": \"fakesandbox.mailgun.org/messages\",\n    \"From\": \"postmaster@fakesandbox.mailgun.org\",\n    \"EnableLogging\": true\n  },\n\n  //LiteX MailChimp settings\n  \"MailChimpConfig\": {\n    \"MailChimpApiKey\": \"--- REPLACE WITH YOUR MailChimpApiKey ---\",\n    \"EnableLogging\": true\n  },\n\n  //LiteX SendinBlue settings\n  \"SendinBlueConfig\": {\n    \"SendinBlueApiKey\": \"--- REPLACE WITH YOUR  ---\",\n    \"EnableLogging\": true\n  }\n}\n```\n\n##### 2.2 : Configure Startup Class\n\n```cs\npublic class Startup\n{\n    public void ConfigureServices(IServiceCollection services)\n    {\n        #region LiteX Email (SMTP)\n\n        // 1. Use default configuration from appsettings.json's 'SmtpConfig'\n        services.AddLiteXSmtpEmail();\n\n        //OR\n        // 2. Load configuration settings using options.\n        services.AddLiteXSmtpEmail(option =\u003e\n        {\n            option.Host = \"\";\n            option.Username = \"\";\n            option.Password = \"\";\n            option.Port = 443;\n            option.Email = \"\";\n            option.EnableSsl = true;\n            option.UseDefaultCredentials = true;\n            option.DisplayName = \"\";\n            option.EnableLogging = true;\n        });\n\n        //OR\n        // 3. Load configuration settings on your own.\n        // (e.g. appsettings, database, hardcoded)\n        var smtpConfig = new SmtpConfig()\n        {\n            Host = \"\",\n            Username = \"\",\n            Password = \"\",\n            Port = 443,\n            Email = \"\",\n            EnableSsl = true,\n            UseDefaultCredentials = true,\n            DisplayName = \"\",\n            EnableLogging = true\n        };\n        services.AddLiteXSmtpEmail(smtpConfig);\n\n        #endregion\n\n        #region LiteX Email (SendGrid)\n\n        // 1. Use default configuration from appsettings.json's 'SendGridConfig'\n        services.AddLiteXSendGridEmail();\n\n        //OR\n        // 2. Load configuration settings using options.\n        services.AddLiteXSendGridEmail(option =\u003e\n        {\n            option.SendGridApiKey = \"\";\n            option.EnableLogging = true;\n        });\n\n        //OR\n        // 3. Load configuration settings on your own.\n        // (e.g. appsettings, database, hardcoded)\n        var sendGridConfig = new SendGridConfig()\n        {\n            SendGridApiKey = \"\",\n            EnableLogging = true\n        };\n        services.AddLiteXSendGridEmail(sendGridConfig);\n\n        #endregion\n\n        #region LiteX Email (MailKit)\n\n        // 1. Use default configuration from appsettings.json's 'MailKitConfig'\n        services.AddLiteXMailKitEmail();\n\n        //OR\n        // 2. Load configuration settings using options.\n        services.AddLiteXMailKitEmail(option =\u003e\n        {\n            option.Host = \"\";\n            option.Username = \"\";\n            option.Password = \"\";\n            option.Port = 443;\n            option.Email = \"\";\n            option.EnableSsl = true;\n            option.UseDefaultCredentials = true;\n            option.DisplayName = \"\";\n            option.EnableLogging = true;\n        });\n\n        //OR\n        // 3. Load configuration settings on your own.\n        // (e.g. appsettings, database, hardcoded)\n        var mailKitConfig = new MailKitConfig()\n        {\n            Host = \"\",\n            Username = \"\",\n            Password = \"\",\n            Port = 443,\n            Email = \"\",\n            EnableSsl = true,\n            UseDefaultCredentials = true,\n            DisplayName = \"\",\n            EnableLogging = true\n        };\n        services.AddLiteXMailKitEmail(mailKitConfig);\n\n        #endregion\n\n        #region LiteX Email (AmazonSES)\n\n        // 1. Use default configuration from appsettings.json's 'AmazonSESConfig'\n        services.AddLiteXAmazonSESEmail();\n\n        //OR\n        // 2. Load configuration settings using options.\n        services.AddLiteXAmazonSESEmail(option =\u003e\n        {\n            option.AmazonSESAccessKey = \"\";\n            option.AmazonSESSecretKey = \"\";\n            option.AmazonRegion = \"\";\n            option.EnableLogging = true;\n        });\n\n        //OR\n        // 3. Load configuration settings on your own.\n        // (e.g. appsettings, database, hardcoded)\n        var amazonSESConfig = new AmazonSESConfig()\n        {\n            AmazonSESAccessKey = \"\",\n            AmazonSESSecretKey = \"\",\n            AmazonRegion = \"\",\n            EnableLogging = true\n        };\n        services.AddLiteXAmazonSESEmail(amazonSESConfig);\n\n        #endregion\n\n        #region LiteX Email (Mailgun)\n\n        // 1. Use default configuration from appsettings.json's 'MailgunConfig'\n        services.AddLiteXMailgunEmail();\n\n        //OR\n        // 2. Load configuration settings using options.\n        services.AddLiteXMailgunEmail(option =\u003e\n        {\n            option.ApiKey = \"\";\n            option.ApiBaseUri = \"\";\n            option.RequestUri = \"\";\n            option.From = \"\";\n            option.EnableLogging = true;\n        });\n\n        //OR\n        // 3. Load configuration settings on your own.\n        // (e.g. appsettings, database, hardcoded)\n        var mailgunConfig = new MailgunConfig()\n        {\n            ApiKey = \"\",\n            ApiBaseUri = \"\",\n            RequestUri = \"\",\n            From = \"\",\n            EnableLogging = true\n        };\n        services.AddLiteXMailgunEmail(mailgunConfig);\n\n        #endregion\n\n\n        // add logging (optional)\n        services.AddLiteXLogging();\n    }\n}\n```\n\n\n### Step 3 : Use in Controller or Business layer :memo:\n\n```cs\n/// \u003csummary\u003e\n/// Customer controller\n/// \u003c/summary\u003e\n[Route(\"api/[controller]\")]\npublic class CustomerController : Controller\n{\n    #region Fields\n\n    private readonly ILiteXEmailSender _emailSender;\n\n    #endregion\n\n    #region Ctor\n\n    /// \u003csummary\u003e\n    /// Ctor\n    /// \u003c/summary\u003e\n    /// \u003cparam name=\"emailSender\"\u003e\u003c/param\u003e\n    public CustomerController(ILiteXEmailSender emailSender)\n    {\n        _emailSender = emailSender;\n    }\n\n    #endregion\n\n    #region Methods\n\n    /// \u003csummary\u003e\n    /// Get Email Provider Type\n    /// \u003c/summary\u003e\n    /// \u003creturns\u003e\u003c/returns\u003e\n    [HttpGet]\n    [Route(\"get-email-provider-type\")]\n    public IActionResult GetEmailProviderType()\n    {\n        return Ok(_emailSender.EmailProviderType.ToString());\n    }\n\n    /// \u003csummary\u003e\n    /// Send Email \n    /// \u003c/summary\u003e\n    /// \u003cparam name=\"emailMessage\"\u003eEmail Message\u003c/param\u003e\n    /// \u003creturns\u003e\u003c/returns\u003e\n    [HttpPost]\n    [Route(\"send-email\")]\n    public async Task\u003cIActionResult\u003e SendEmailToCustomer(EmailMessage emailMessage)\n    {\n        var message = EnsureValidEmailMessage(emailMessage);\n\n        var subject = message.Subject;\n        var body = message.Body;\n        var fromAddress = message.FromAddress;\n        var fromName = message.FromName;\n        var toAddress = message.ToAddress;\n        var toName = message.ToName;\n        var replyToAddress = message.ReplyToAddress;\n        var replyToName = message.ReplyToName;\n        var isHtml = message.IsHtml;\n        var mailPriority = message.MailPriority;\n\n        IEnumerable\u003cstring\u003e bcc = new List\u003cstring\u003e() { message.Bcc };\n        IEnumerable\u003cstring\u003e cc = new List\u003cstring\u003e() { message.Cc };\n\n        // async\n        var result = await _emailSender.SendEmailAsync(subject, body, fromAddress, fromName, toAddress, toName, replyToAddress, replyToName, bcc, cc, isHtml: isHtml, priority: mailPriority);\n\n        //// sync\n        //var result = _emailSender.SendEmail(subject, body, fromAddress, fromName, toAddress, toName, replyToAddress, replyToName, bcc, cc, isHtml: isHtml, priority: mailPriority);\n        //var result = _emailSender.SendEmail(subject, body, fromAddress, fromName, toAddress, toName, replyToAddress, replyToName, bcc, cc, isHtml: isHtml, priority: mailPriority);\n\n        return Ok(result);\n    }\n\n    /// \u003csummary\u003e\n    /// Send email with attachment\n    /// \u003c/summary\u003e\n    /// \u003cparam name=\"emailMessage\"\u003eEmail Message\u003c/param\u003e\n    /// \u003cparam name=\"file\"\u003eAttachment\u003c/param\u003e\n    /// \u003creturns\u003e\u003c/returns\u003e\n    [HttpPost]\n    [Route(\"send-email-with-attachment\")]\n    [AddSwaggerFileUploadButton]\n    public async Task\u003cIActionResult\u003e SendEmailToCustomerWithAttachment(EmailMessage emailMessage, IFormFile file)\n    {\n        var message = EnsureValidEmailMessage(emailMessage);\n\n        var subject = message.Subject;\n        var body = message.Body;\n        var fromAddress = message.FromAddress;\n        var fromName = message.FromName;\n        var toAddress = message.ToAddress;\n        var toName = message.ToName;\n        var replyToAddress = message.ReplyToAddress;\n        var replyToName = message.ReplyToName;\n        var isHtml = message.IsHtml;\n        var mailPriority = message.MailPriority;\n\n        IEnumerable\u003cstring\u003e bcc = new List\u003cstring\u003e() { message.Bcc };\n        IEnumerable\u003cstring\u003e cc = new List\u003cstring\u003e() { message.Cc };\n        List\u003cAttachment\u003e attachments = new List\u003cAttachment\u003e\n            {\n                new Attachment()\n                {\n                    ContentType = file?.ContentType,\n                    Filename = file?.FileName,\n                    Data = file?.OpenReadStream()\n                }\n            };\n\n        // async\n        var result = await _emailSender.SendEmailAsync(subject, body, fromAddress, fromName, toAddress, toName, replyToAddress, replyToName, bcc, cc, attachments: attachments, isHtml: isHtml, priority: mailPriority);\n\n        //// sync\n        //var result = _emailSender.SendEmail(subject, body, fromAddress, fromName, toAddress, toName, replyToAddress, replyToName, bcc, cc, attachments: attachments, isHtml: isHtml, priority: mailPriority);\n        //var result = _emailSender.SendEmail(subject, body, fromAddress, fromName, toAddress, toName, replyToAddress, replyToName, bcc, cc, isHtml: isHtml, priority: mailPriority);\n\n        return Ok(result);\n    }\n\n    #endregion\n\n    #region Utilities\n\n    private EmailMessage EnsureValidEmailMessage(EmailMessage emailMessage)\n    {\n        var message = new EmailMessage()\n        {\n            Subject = emailMessage.Subject ?? \"LiteX Email!\",\n            Body = emailMessage.Body ?? \"Welcome to LiteX Email Service!\",\n            FromAddress = emailMessage.FromAddress ?? \"acc.aashishpatel@gmail.com\",\n            FromName = emailMessage.FromName ?? \"LiteX\",\n            ToAddress = emailMessage.ToAddress ?? \"developer.aashishpatel@gmail.com\",\n            ToName = emailMessage.ToName ?? \"Aashish Patel\",\n            ReplyToAddress = emailMessage.ReplyToAddress ?? \"aashish.mrcool@gmail.com\",\n            ReplyToName = emailMessage.ReplyToName ?? \"Ashish Patel\",\n            Bcc = emailMessage.FromAddress ?? \"patelashish_90@yahoo.com\",\n            Cc = emailMessage.FromAddress ?? \"toaashishpatel@outlook.com\",\n            IsHtml = emailMessage.IsHtml,\n            MailPriority = emailMessage.MailPriority,\n        };\n\n        message.Body = $\"{message.Body} - Provider: {_emailSender.EmailProviderType.ToString()}\";\n\n        return message;\n    }\n\n    #endregion\n}\n```\n\n\n## Todo List :clipboard:\n\n#### Storage Providers\n\n- [x] Smtp\n- [x] SendGrid\n- [x] AmazonSES\n- [x] MailKit\n- [x] Mailgun\n- MailJet\n- MailChimp\n- SendinBlue\n- ElasticEmail\n\n\n#### Basic Storage API\n\n- [x] SendEmail\n\n\n#### Coming soon\n\n- .NET Standard 2.1 support\n- .NET 5.0 support\n- Remove sync methods\n- Response Result\n- Bulk Email\n\n\n\n\n\n---\n\n\n\n\n\n## Give a Star! :star:\n\nFeel free to request an issue on github if you find bugs or request a new feature. Your valuable feedback is much appreciated to better improve this project. If you find this useful, please give it a star to show your support for this project.\n\n\n\n## Support :telephone:\n\n\u003e Reach out to me at one of the following places!\n\n- Email :envelope: at \u003ca href=\"mailto:toaashishpatel@gmail.com\" target=\"_blank\"\u003e`toaashishpatel@gmail.com`\u003c/a\u003e\n- NuGet :package: at \u003ca href=\"https://www.nuget.org/profiles/iamaashishpatel\" target=\"_blank\"\u003e`@iamaashishpatel`\u003c/a\u003e\n\n\n\n## Author :boy:\n\n* **Ashish Patel** - [A-Patel](https://github.com/a-patel)\n\n\n##### Connect with me\n\n| Linkedin | Website | Medium | NuGet | GitHub | Microsoft | Facebook | Twitter | Instagram | Tumblr |\n|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|\n| [![linkedin](https://img.icons8.com/ios-filled/96/000000/linkedin.png)](https://www.linkedin.com/in/iamaashishpatel) | [![website](https://img.icons8.com/wired/96/000000/domain.png)](https://aashishpatel.netlify.app/) | [![medium](https://img.icons8.com/ios-filled/96/000000/medium-monogram.png)](https://medium.com/@iamaashishpatel) | [![nuget](https://img.icons8.com/windows/96/000000/nuget.png)](https://nuget.org/profiles/iamaashishpatel) | [![github](https://img.icons8.com/ios-glyphs/96/000000/github.png)](https://github.com/a-patel) | [![microsoft](https://img.icons8.com/ios-filled/90/000000/microsoft.png)](https://docs.microsoft.com/en-us/users/iamaashishpatel) | [![facebook](https://img.icons8.com/ios-filled/90/000000/facebook.png)](https://www.facebook.com/aashish.mrcool) | [![twitter](https://img.icons8.com/ios-filled/96/000000/twitter.png)](https://twitter.com/aashish_mrcool) | [![instagram](https://img.icons8.com/ios-filled/90/000000/instagram-new.png)](https://www.instagram.com/iamaashishpatel/) | [![tumblr](https://img.icons8.com/ios-filled/96/000000/tumblr--v1.png)](https://iamaashishpatel.tumblr.com/) |\n\n\n\n## Donate :dollar:\n\nIf you find this project useful — or just feeling generous, consider buying me a beer or a coffee. Cheers! :beers: :coffee:\n\n| PayPal | BMC | Patreon |\n| ------------- | ------------- | ------------- |\n| [![PayPal](https://www.paypalobjects.com/webstatic/en_US/btn/btn_donate_pp_142x27.png)](https://www.paypal.me/iamaashishpatel) | [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/iamaashishpatel) | [![Patreon](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/iamaashishpatel) |\n\n\n\n## License :lock:\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa-patel%2Flitexemail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fa-patel%2Flitexemail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa-patel%2Flitexemail/lists"}