https://github.com/eldoy/waveorb-mailer
Send emails made for Waveorb
https://github.com/eldoy/waveorb-mailer
Last synced: about 1 month ago
JSON representation
Send emails made for Waveorb
- Host: GitHub
- URL: https://github.com/eldoy/waveorb-mailer
- Owner: eldoy
- License: mit
- Created: 2021-06-13T20:59:53.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-07T12:18:57.000Z (over 3 years ago)
- Last Synced: 2025-01-03T15:27:17.291Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 637 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Waveorb Mailer
Send emails with [Waveorb.](https://waveorb.com) Boasts the following features:
* Send email with [mxmail](https://github.com/eldoy/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.](https://waveorb.com)
### Installation
```
npm i waveorb-mailer
```
### Templates
In `app/layouts` add a file called `mail.js`:
```js
module.exports = async function(mail, $, data) {
return /* html */`
${mail.subject || 'Waveorb Mailer'}
body { background-color: gold; }
${mail.content}
Best regards
`
}
```
Then in your `app/mail` directory add a file called `mail1.js` (or whatever):
```js
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:
```js
// ...
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:
```js
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:
```js
await mailer.send('mail1', $, options, data)
// ...
content: `mail1 html content link ${data.key}`
// ...
```
You can also use [Mustache](https://github.com/janl/mustache.js):
```js
// ...
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`:
```yaml
host: smtp.ethereal.email
port: 587
auth:
user: virginia.cassin10@ethereal.email
pass: 1md9Xes49Nbfka6aFw
```
Create a plugin in `app/plugins` called `mailer.js`:
```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.
```js
// Use mailer from plugin
const mailer = $.app.mailer
// Send email
const options = {
to: 'Vidar Eldøy ',
attachment: [file]
}
// All possible options:
{
to: 'vidar@eldoy.com',
from: 'vidar@eldoy.com',
cc: 'cc@eldoy.com',
bcc: 'bcc@eldoy.com',
subject: 'hello',
html: '
Hello
',
text: 'Hello',
replyTo: 'vidar@eldoy.com',
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!