waveorb-mailer
v0.2.1
Published
Waveorb email client with support for templates and layouts
Downloads
10
Readme
Waveorb Mailer
Send emails with Waveorb. Boasts the following features:
- Send email with mxmail
- Layout support
- Supports HTML, Markdown and Mustache templates
- Automatically converts HTML to use as text version
Made for the Waveorb web app development platform.
Installation
npm i waveorb-mailer
Templates
In app/layouts
add a file called mail.js
:
module.exports = async function(mail, $, data) {
return /* html */`
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>${mail.subject || 'Waveorb Mailer'}</title>
<style>
body { background-color: gold; }
</style>
</head>
<body>
<div class="content">${mail.content}</div>
<div>Best regards</div>
</body>
</html>
`
}
Then in your app/mail
directory add a file called mail1.js
(or whatever):
module.exports = async function($, data) {
return {
layout: 'mail',
subject: 'mail1',
content: `mail1 html content link ${data.key}`
}
}
The email content can be written in Markdown:
// ...
format: 'markdown',
content: `# Hello`
// ...
The layout can't do Markdown, it has to be HTML.
You can use the file option to set the content from a file:
module.exports = async function($, data) {
return {
layout: 'mail',
subject: 'mail1',
file: 'data/markdown/mail.md'
}
}
The markdown will be automatically transformed to HTML if it's a markdown file.
Variables
You can pass variables through the data
parameter:
await mailer.send('mail1', $, options, data)
// ...
content: `mail1 html content link ${data.key}`
// ...
You can also use Mustache:
// ...
content: `mail1 html content link {{data.key}}`
// ...
Both of these techniques work in the layout as well.
Configuration
If you don't provide a config file emails will be sent through mx record lookup.
To use your own email server to send mail, create a file called mail.yml
in app/config
:
host: smtp.ethereal.email
port: 587
auth:
user: [email protected]
pass: 1md9Xes49Nbfka6aFw
Create a plugin in app/plugins
called mailer.js
:
const mailer = require('waveorb-mailer')
module.exports = async function(app) {
app.mailer = mailer(app.config.mail)
}
Send email
Emails will automatically include the text version which is converted from the HTML in your templates.
// Use mailer from plugin
const mailer = $.app.mailer
// Send email
const options = {
to: 'Vidar Eldøy <[email protected]>',
attachment: [file]
}
// All possible options:
{
to: '[email protected]',
from: '[email protected]',
cc: '[email protected]',
bcc: '[email protected]',
subject: 'hello',
html: '<h1>Hello</h1>',
text: 'Hello',
replyTo: '[email protected]',
attachment: [readStream]
}
// Parameters: name, $, options, data
const data = { key: 'hello' }
const result = await mailer.send('mail1', $, options, data)
// Returns delivered and failed emails
{
delivered: [{ result, mail }],
failed: [{ result, mail }]
}
MIT licensed. Enjoy!