summaryrefslogtreecommitdiffstats
path: root/template/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'template/README.md')
-rw-r--r--template/README.md126
1 files changed, 126 insertions, 0 deletions
diff --git a/template/README.md b/template/README.md
new file mode 100644
index 0000000..104c9a8
--- /dev/null
+++ b/template/README.md
@@ -0,0 +1,126 @@
+
+# mail-template
+
+**Provides mechanisms for generating mails based on templates**
+
+---
+
+This crate provides a general interface for using template engine with the mail crate.
+
+It's core is the `TemplateEngine` trait which can be implemented to bind a template engine.
+When rendering a template the template engine implementing the `TemplateEngine` trait will
+produce a number of (wrapped) `Resource` instances representing the alternate bodies of amail as well as a number of additional `Resources` used for embedded content (e.g. logoimages) and attachments. This crate then takes this parts and composes a multipart mime mail from
+it.
+
+## Template Engine implementations
+
+A mail template engine has to do more then just taking a single text
+template (e.g. a handlebars template) and produce some output using
+string magic. It has to:
+
+1. consider alternate bodies, so it should render at last two
+ "text templates" (one text/plain, one html)
+
+2. consider which additional embeddings/attachments should be included
+ (all in the given template data are included, but you might
+ add additional ones, e.g. some logo image)
+
+As such text template engines like `Handle` bar can not directly
+be bound to the `TemplateEngine` trait.
+
+For using text template engine it's recommended to use
+the `mail-template-render-engine` (also exposed through the
+mail facade) which implements this overhead for any engine
+which can "just" render some text and provides default
+bindings to some common template engines (e.g. Handlebars).
+
+## Derive
+
+This crate requires template data to implement `InspectEmbeddedResources`
+which combined with some typing/generic design decisions allows to bind
+not just to template engines which use serialization to access template
+data but also to such which use static typing (like `askama`).
+
+As such it re-exports the `InspectEmbeddedResources` derive from
+`mail-derive`. Note that if you use the mail facade it also does
+re-export the derive.
+
+## Features
+
+- `askama-engine`, includes bindings for the askama template engine.
+- `serialize-to-content-id`, implements Serialize for `Embedded`,
+ `EmbeddedWithCId` which serializes the embedded type **into its
+ content id**. E.g. a image with content id `"q09cu3@example.com"`
+ will be serialized to the string `"q09cu3@example.com"`. This is
+ extremely useful for all template engines which use serialization
+ as their way to access template data.
+
+## Example
+
+```rust
+```
+
+## Road Map
+
+The current implementation has a number of limitations which should be lifted with
+future versions:
+
+- Only a limited subset of headers are/can be set through the template engine
+ (`Sender`, `From`, `To`, `Subject`) while some headers are set implicitly
+ when encoding the mail (e.g. `Date`, `Content-Type`, `Content-Disposition`).
+ But sometimes it would be useful to add some custom headers through the template
+ engine (both on the outermost and inner bodies).
+- `From`, `To`, `Subject` have to be given, but sometimes you might want to just
+ create the `Mail` type and then set them by yourself (through you _can_ currently
+ override them)
+- Re-use/integration of existing mail instances: Some times you might want to
+ use a `Mail` instance created some where else as a body for a multipart mail
+ generated from a template (e.g. some thing generating "special" attachments).
+
+Also there are some parts which are likely to change:
+
+- `MailSendData`/`MailSendDataBuilder` the name is
+ not very good it also needs to change to handle
+ the thinks listed above
+- `Embedded`, `EmbeddedWithCid`, embeddings and attachments
+ currently a `Embedded` instance is a wrapper around `Resource`
+ representing something which will become a mail body but is not
+ a main body (i.e. it not the text/html/.. you send) instead it
+ something embedded in the mail which is either used as attachment
+ or as a embedding (e.g. a logo image). Through the content disposition
+ the `Embedded` instance differs between thing embedded and internally
+ used or embedded and used as attachment at the same time many different
+ arrays are sometimes used to differ between them (e.g. in `MailParts`)
+ but there is no (type system) check to make sure a array of thinks used
+ as attachments can not contain a `Embedded` instance with content disposition
+ inline. The result will still be a valid mail, but likely not in the
+ way you expect it to be. This should be fixed one way or another (making
+ the different array type safe and lifting disposition to the type level
+ had been used but didn't play out nicely).
+- `serialize-to-content-id`, is a nice idea but has some problems in
+ some edge cases (e.g. when you want to serialize anything containing
+ a `Embedded` type for any usage BUT accessing it in an template). So
+ it might be removed, which means a import like `cid:{{data.mything}}`
+ (using some mustach pseudo template syntax) would become `cid:{{data.mything.cid}}`.
+
+
+## Documentation
+
+
+Documentation can be [viewed on docs.rs](https://docs.rs/mail-template).
+(once published)
+
+## License
+
+Licensed under either of
+
+* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
+* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
+
+at your option.
+
+### Contribution
+
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
+additional terms or conditions.