Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/milkshakesoftware/premailer.net
C# library that moves your stylesheets to inline style attributes, for maximum compatibility with E-mail clients.
https://github.com/milkshakesoftware/premailer.net
csharp css css3 email email-template premailer stylesheets
Last synced: 5 days ago
JSON representation
C# library that moves your stylesheets to inline style attributes, for maximum compatibility with E-mail clients.
- Host: GitHub
- URL: https://github.com/milkshakesoftware/premailer.net
- Owner: milkshakesoftware
- License: mit
- Created: 2011-04-13T11:37:03.000Z (over 13 years ago)
- Default Branch: main
- Last Pushed: 2024-03-13T04:38:09.000Z (7 months ago)
- Last Synced: 2024-03-27T11:05:13.650Z (6 months ago)
- Topics: csharp, css, css3, email, email-template, premailer, stylesheets
- Language: C#
- Homepage: http://milkshakesoftware.github.com/PreMailer.Net/
- Size: 1.96 MB
- Stars: 639
- Watchers: 32
- Forks: 117
- Open Issues: 29
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PreMailer.Net ![.NET Core build](https://github.com/milkshakesoftware/PreMailer.Net/workflows/.NET%20Core%20build/badge.svg) [![Nuget count](https://img.shields.io/nuget/v/PreMailer.Net.svg?style=flat-square)](https://www.nuget.org/packages/PreMailer.Net/)
C# Library for moving CSS to inline style attributes, to gain maximum E-mail client compatibility.
## Usage
### Static method on `PreMailer` class
```csharp
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
```csharp
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 tagsvar 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 to `link` elements with `href` values ending with `.css`.
- `removeStyleElements(bool = false)` - Removes elements that were used to source CSS (currently, only `style` 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 `` 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.
`` elements that match the `ignoreElements` selector won't be downloaded.
### Media queries
If you want to [apply mobile styles to your e-mail](http://help.campaignmonitor.com/topic.aspx?t=164), 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:
```csharp
var result = PreMailer.MoveCssInline(input, false, ignoreElements: "#ignore");
```And your mobile specific `style` block should have an ID of `ignore`:
```html
.target { width: 1337px; }
```### 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
```css
table {
-premailer-cellspacing: 5;
-premailer-width: 500;
}
```will make a `table` element render as
```html
```
### Custom DOM Processing
```csharp
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](http://nuget.org/List/Packages/PreMailer.Net)## Contributors
* [martinnormark](https://github.com/martinnormark)
* [robcthegeek](https://github.com/robcthegeek)[Among others](https://github.com/milkshakesoftware/PreMailer.Net/graphs/contributors)
## License
PreMailer.Net is available under the MIT license. See the [LICENSE](https://github.com/milkshakesoftware/PreMailer.Net/blob/master/LICENSE) file for more info.