PreMailer.Net
2.5.0
See the version list below for details.
dotnet add package PreMailer.Net --version 2.5.0
NuGet\Install-Package PreMailer.Net -Version 2.5.0
<PackageReference Include="PreMailer.Net" Version="2.5.0" />
paket add PreMailer.Net --version 2.5.0
#r "nuget: PreMailer.Net, 2.5.0"
// Install PreMailer.Net as a Cake Addin #addin nuget:?package=PreMailer.Net&version=2.5.0 // Install PreMailer.Net as a Cake Tool #tool nuget:?package=PreMailer.Net&version=2.5.0
PreMailer.Net
C# Library for moving CSS to inline style attributes, to gain maximum E-mail client compatibility.
Usage
Static method on PreMailer
class
string htmlSource = File.ReadAllText(@"C:\Workspace\testmail.html");
var result = PreMailer.MoveCssInline(htmlSource);
result.Html // Resultant HTML, with CSS in-lined.
result.Warnings // string[] of any warnings that occurred during processing.
Set up PreMailer
instance
string htmlSource = File.ReadAllText(@"C:\Workspace\testmail.html");
var pm = new PreMailer(htmlSource);
pm.AddAnalyticsTags(source, medium, campaign, content, domain = null); // Optional to add analytics tags
var result = pm.MoveCssInline(...);
result.Html // Resultant HTML, with CSS in-lined.
result.Warnings // string[] of any warnings that occurred during processing.
Options
The following options can be passed to the PreMailer.MoveCssInline
method to configure it's behaviour:
baseUri(Uri = null)
- Base URL to apply tolink
elements withhref
values ending with.css
.removeStyleElements(bool = false)
- Removes elements that were used to source CSS (currently, onlystyle
is supported).ignoreElements(string = null)
- CSS selector of element(s) not to inline. Useful for mobile styles (see below).css(string = null)
- A string containing a style-sheet for inlining.stripIdAndClassAttributes(bool = false)
- True to strip ID and class attributes.removeComments(bool = false)
- True to remove comments, false to leave them intact.
External style sheets
Sometimes it's handy to reference external style sheets with a <link href="..." />
element. PreMailer will download and use external style sheets as long as the value of href
ends with .css
.
Both absolute and relative URLs are supported. If the URL is relative, you must specify the baseUri
parameter in either the constructor, or when calling the static MoveCssInline
method.
<link />
elements that match the ignoreElements
selector won't be downloaded.
Media queries
If you want to apply mobile styles to your e-mail, you should put your
mobile specific styles in its own style
block that targets the appropriate devices using media queries.
But since you cannot know by the time of sending an e-mail whether or not it will be viewed on a mobile device, the style
block that targets mobile devices should not be inlined!
To ignore a style
block, you need to specify an ignore selector when calling the MoveCssInline
method, like this:
var result = PreMailer.MoveCssInline(input, false, ignoreElements: "#ignore");
And your mobile specific style
block should have an ID of ignore
:
<style type="text/css" id="ignore">.target { width: 1337px; }</style>
Premailer specific CSS becomes HTML attributes
Premailer looks for the use of CSS attributes prefixed with -premailer
and will proxy the value through to the DOM element as an attribute.
For example
table {
-premailer-cellspacing: 5;
-premailer-width: 500;
}
will make a table
element render as
<table cellspacing="5" width="500">
Custom DOM Processing
using(var pm = new PreMailer(html)){
var document = pm.Document;
// use AngleSharp to process document before moving css inline ...
var result = pm.MoveCssInline();
}
Notes
- Pseudo classes/elements which not supported by external dependencies, or doesn't make sense in email, will be ignored and logged to the
InlineResult.Warnings
collection.
Installation
NuGet: PreMailer.Net
Contributors
License
PreMailer.Net is available under the MIT license. See the LICENSE file for more info.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.1
- AngleSharp (>= 1.0.7)
-
.NETStandard 2.0
- AngleSharp (>= 1.0.7)
NuGet packages (30)
Showing the top 5 NuGet packages that depend on PreMailer.Net:
Package | Downloads |
---|---|
Kentico.Xperience.Libraries
The runtime assemblies for libraries and applications that use Kentico Xperience API. |
|
ImmediaC.SimpleCms
ASP.NET Core based CMS |
|
evernote-cloud-sdk-windows
Evernote Cloud SDK for Windows |
|
ActionMailerNext
Package Description |
|
FenixAlliance.ACL.SDK
Application Component for the Alliance Business Suite. |
GitHub repositories (5)
Showing the top 5 popular GitHub repositories that depend on PreMailer.Net:
Repository | Stars |
---|---|
smartstore/SmartStoreNET
Open Source ASP.NET MVC Enterprise eCommerce Shopping Cart Solution
|
|
smartstore/Smartstore
A modular, scalable and ultra-fast open-source all-in-one eCommerce platform built on ASP.NET Core 7
|
|
SparkDevNetwork/Rock
An open source CMS, Relationship Management System (RMS) and Church Management System (ChMS) all rolled into one.
|
|
TerribleDev/OwinOAuthProviders
OAuth providers for Owin
|
|
DigitalRuby/MailDemon
Smtp server for mass emailing, managing email lists and more. Built on .NET Core. Linux, MAC and Windows compatible.
|
Version | Downloads | Last updated |
---|---|---|
2.6.0 | 231,143 | 5/22/2024 |
2.5.0 | 342,845 | 11/24/2023 |
2.4.0 | 3,113,976 | 11/2/2021 |
2.3.0 | 74,136 | 10/8/2021 |
2.2.0 | 3,045,195 | 4/8/2020 |
2.1.3 | 543,951 | 10/30/2019 |
2.1.1 | 67,100 | 9/16/2019 |
2.1.0 | 39,149 | 9/6/2019 |
2.0.1 | 641,253 | 12/7/2018 |
2.0.0 | 978,465 | 7/18/2018 |
2.0.0-beta2 | 96,279 | 3/21/2017 |
2.0.0-beta1 | 2,819 | 3/21/2017 |
1.5.5 | 905,280 | 11/7/2016 |
1.5.4 | 137,471 | 8/2/2016 |
1.5.3 | 81,520 | 4/15/2016 |
1.5.2 | 20,136 | 4/12/2016 |
1.5.1 | 28,376 | 3/29/2016 |
1.5.0 | 24,624 | 2/23/2016 |
1.4.3 | 48,032 | 12/16/2015 |
1.4.2 | 214,213 | 7/29/2015 |
1.4.1 | 43,779 | 5/22/2015 |
1.4.0 | 4,628 | 5/3/2015 |
1.3.1 | 72,021 | 3/22/2015 |
1.3.0 | 67,466 | 3/1/2015 |
1.2.9 | 165,190 | 11/19/2014 |
1.2.8 | 18,109 | 10/28/2014 |
1.2.7 | 272,646 | 7/28/2014 |
1.2.6 | 36,202 | 5/22/2014 |
1.2.5 | 2,350 | 5/22/2014 |
1.2.4 | 120,325 | 2/18/2014 |
1.2.3 | 8,293 | 11/25/2013 |
1.2.2 | 2,621 | 11/13/2013 |
1.2.1 | 2,381 | 11/12/2013 |
1.2.0 | 2,412 | 11/11/2013 |
1.1.3 | 2,744 | 11/7/2013 |
1.1.2 | 16,770 | 6/5/2012 |
1.1.1 | 17,735 | 11/5/2011 |
1.1.0 | 3,166 | 9/29/2011 |
1.0.0 | 3,987 | 9/12/2011 |
What's Changed
* Bump AngleSharp from 0.16.1 to 1.0.7. Only the IMarkupFormatter from AngleSharp is exposed as public api and that interface has not changed in that version jump so this should not cause any breakages for users.
* Dependency Bumps for the Tests and Benchmark projects.
* Fix race condition when running unit tests by @jasekiw in https://github.com/milkshakesoftware/PreMailer.Net/pull/374
* Normalize all file line endings by @jasekiw in https://github.com/milkshakesoftware/PreMailer.Net/pull/365
* Update benchmark project framework by @jasekiw in https://github.com/milkshakesoftware/PreMailer.Net/pull/351
* Use correct framework by @kasperk81 https://github.com/milkshakesoftware/PreMailer.Net/pull/334
* Update CI triggers to main branch by @martinnormark https://github.com/milkshakesoftware/PreMailer.Net/pull/332
* Bug triage by @martinnormark https://github.com/milkshakesoftware/PreMailer.Net/pull/328
* More efficient selector matching of all elements by @patrikwlund https://github.com/milkshakesoftware/PreMailer.Net/pull/326
* Read text node instead of InnerHtml for CSS by @patrikwlund https://github.com/milkshakesoftware/PreMailer.Net/pull/325
* Include a benchmark that sets all MoveCssInline() flags by @patrikwlund https://github.com/milkshakesoftware/PreMailer.Net/pull/324
* Realistic benchmark by @patrikwlund https://github.com/milkshakesoftware/PreMailer.Net/pull/323
* Decent optimizations for CssAttributeCollection by @patrikwlund https://github.com/milkshakesoftware/PreMailer.Net/pull/322
New Contributors
* @patrikwlund made their first contribution in https://github.com/milkshakesoftware/PreMailer.Net/pull/323
* @kasperk81 made their first contribution in https://github.com/milkshakesoftware/PreMailer.Net/pull/334
* @jasekiw made their first contribution in https://github.com/milkshakesoftware/PreMailer.Net/pull/351
Full Changelog: https://github.com/milkshakesoftware/PreMailer.Net/compare/v2.4.0...v2.5.0