open-index/open-npm huggingface dataset:
npm package: @mailframe/mailframe
Description: Small library that makes it super easy to manage and dispatch emails
Author: Petros Kyriakou
Latest version: 0.0.1

<p align="center">
  <a href="" rel="noopener">
 <img src="https://i.imgur.com/K8iNOa8.png" alt="Messageraft"></a>
</p>

<h2 align="center">Mailframe</h3>

<div align="center">

![Status](https://img.shields.io/badge/status-active-success.svg)
[![Version](https://img.shields.io/npm/v/@mailframe/mailframe.svg)](https://npmjs.org/package/@mailframe/cli)
[![License](https://img.shields.io/npm/l/@mailframe/mailframe)](https://github.com/pitops/mailframe/blob/main/package.json)
[![GitHub Issues](https://img.shields.io/github/issues/pitops/mailframe.svg)](https://github.com/pitops/mailframe/issues)
[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/pitops/mailframe.svg)](https://github.com/pitops/mailframe/pulls)
</div>

## <p align = "center">💡 Small library that makes it super easy to manage and dispatch emails</p>

## 📝 Table of Contents

<!-- toc -->
- [About](#about)
- [Getting Started](#getting-started)
<!-- tocstop -->

<!-- about -->
## 🧐 About <a name = "about"></a>
Mailframe is a small library that helps organize email templates, and easily dispatch emails with dynamic templating built-in retries, and more.

It was originally developed for use with [MessageRaft](https://github.com/messageraft/cli) but it can also be used without (check the custom dispatcher example)

* [mustache.js](https://github.com/janl/mustache.js/) template syntax
* Automatic retries on **408, 413, 429, 500, 502, 503, 504** status codes (using  [ky](https://github.com/sindresorhus/ky))
* Automatic conversion of html to text and dispatch both

> [MessageRaft](https://github.com/messageraft/cli) needs to be setup separately if using the built-in method of dispatching emails

<!-- aboutstop -->

## 🏁 Getting Started <a name ="getting-started"></a>

### Step 1 - Setup Messageraft

Follow the instructions found [here](https://github.com/messageraft/cli) to install and setup MessageRaft.

### Step 2 - Install Mailframe

```sh-session
$ npm install @mailframe/mailframe

OR

$ yarn add mailframe 
```

### Step 3 - Usage

Please checkout the example [here](https://github.com/pitops/mailframe/tree/main/examples/default-usage) for usage.

### Step 3.1 - Custom dispatcher

In case you don't want to use MessageRaft and instead you prefer to use an email provider directly you can do that. Please check the example [here](https://github.com/pitops/mailframe/tree/main/examples/custom-dispatcher) for details

## 🤝 Contributions welcome
npm package: @mailhyuil/ng-libs
Description: Simple UI components for Angular
Author: mailhyuil
Latest version: 0.0.59

# @mailhyuil/ng-libs

## tailwind.config.js 설정

```js
{
   content: [
      './src/**/*.html',
      'node_modules/@mailhyuil/ng-libs/**/*.html',
   ],
}
```
npm package: @mailiam/shared
Description: Shared types and utilities for Mailiam SDK
Author: Mailiam
Latest version: 0.2.0

# @mailiam/shared

Shared types, errors, constants, and utilities for Mailiam SDK packages.

This package is used internally by `@mailiam/node` and `@mailiam/client`. You typically don't need to install this directly unless you're building custom integrations.

## Installation

```bash
npm install @mailiam/shared
```

## Exports

### Types

- `SendEmailRequest` - Email send request structure
- `SendEmailResponse` - Email send response structure
- `SendBatchRequest` - Batch send request structure
- `SendBatchResponse` - Batch send response structure
- `BatchEmailResult` - Individual batch result
- `EmailAddress` - Email address type
- `FormSubmission` - Form submission data
- `FormSubmissionResponse` - Form submission response
- `MailiamErrorResponse` - API error response
- `ApiKeyType` - API key types
- `RateLimitInfo` - Rate limit information

### Error Classes

- `MailiamError` - Base error class
- `AuthenticationError` - Authentication failure
- `RateLimitError` - Rate limit exceeded
- `ValidationError` - Request validation failure
- `NetworkError` - Network request failure
- `ApiError` - General API error

### Constants

- `DEFAULT_API_BASE_URL` - Default API URL
- `API_VERSION` - Current API version
- `DEFAULT_TIMEOUT` - Default request timeout
- `DEFAULT_RETRY_CONFIG` - Default retry configuration
- `HTTP_STATUS` - HTTP status code constants
- `ENDPOINTS` - API endpoint paths
- `HEADERS` - Header name constants
- `USER_AGENT` - SDK user agent

### Utilities

- `isValidEmail()` - Validate email format
- `normalizeEmailAddress()` - Normalize email to string
- `normalizeEmailAddresses()` - Normalize array of emails
- `validateEmailContent()` - Validate text/html content
- `sleep()` - Promise-based sleep
- `calculateBackoff()` - Calculate exponential backoff
- `isRetryableStatusCode()` - Check if status is retryable
- `isNetworkError()` - Check if error is network-related

## Usage

```typescript
import {
  type SendEmailRequest,
  AuthenticationError,
  DEFAULT_API_BASE_URL,
  isValidEmail
} from '@mailiam/shared';

// Use types
const request: SendEmailRequest = {
  from: 'hello@example.com',
  to: 'user@example.com',
  subject: 'Test',
  html: '<p>Test</p>'
};

// Use utilities
if (isValidEmail('user@example.com')) {
  console.log('Valid email');
}

// Use errors
throw new AuthenticationError('Invalid API key');
```

## License

MIT
npm package: @mailing-toolkit/cli
Description: CLI tools for creating e-mails templates
Author: Dawid Karwot
Latest version: 0.8.5

# Mailing-Toolkit CLI

The command-line tool for developers to work on creating HTML emails templates.

## Commands
- **serve** - Start the web dev server(https://modern-web.dev/docs/dev-server/overview/) with found HTML files
- **validate** - Lint the HTML files in the current directory with ESLint
- **send** - Send the email to the specified email address(in config file or as an argument) via selected service()
- **spaceimage** - Generate a space image with the specified width and height
- **start** - Combine all commands in one interactive mode.
- **config** - Open the configuration file in the default editor(create if not exists)
- **maildev** - Start the maildev server(https://github.com/maildev/maildev)
- **text** - Creates a text version of the HTML file(in development)
- **help** - Display help for the CLI or a specific command


## Installation

```bash
$ yarn global add @mailing-toolkit/cli
```
# or...
```bash
$ npm install -g @mailing-toolkit/cli
```

then to generate the configuration file run:
```bash
$ mailing-toolkit config
```
npm package: @mailing-toolkit/eslint-plugin
Description: Eslint plugin for E-mail templates
Author: Dawid Karwot
Latest version: 0.8.1

# eslint-plugin-mailing-plugin

Eslint plugin for E-mail templates

## Installation

You'll first need to install [ESLint](https://eslint.org/):

```sh
npm i eslint --save-dev
```

Next, install `eslint-plugin-mailing-plugin`:

```sh
npm install eslint-plugin-mailing-plugin --save-dev
```

## Usage

Add `mailing-plugin` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix:

```json
{
    "plugins": [
        "mailing-plugin"
    ]
}
```


Then configure the rules you want to use under the rules section.

```json
{
    "rules": {
        "mailing-plugin/rule-name": 2
    }
}
```



## Configurations

<!-- begin auto-generated configs list -->
TODO: Run eslint-doc-generator to generate the configs list (or delete this section if no configs are offered).
<!-- end auto-generated configs list -->



## Rules

<!-- begin auto-generated rules list -->
TODO: Run eslint-doc-generator to generate the rules list.
<!-- end auto-generated rules list -->
npm package: @mailingui/cli
Description: Add MailingUI components to your repo.
Author: MailingUI
Latest version: 0.0.8

# Mailing UI

## Description

MailingUI is a set of _opinionated_ React components, built on top of [React.email](https://react.email), designed to make the creation of emails easier.

> "We believe that email is an extremely important medium for people to communicate. However, we need to stop developing emails like 2010, and rethink how email can be done in 2022 and beyond. Email development needs a revamp. A renovation. Modernized for the way we build web apps today"  
—[React.email](https://react.email).

All of our components are completely **open-sourced** and intended for a
*copy-and-paste* use. Currently, we don't have any plans in releasing MailingUI as an npm
package.

## Documentation

- To get started, please visit [Docs - Guide](https://mailingui.com/docs/guide/introduction)
- View our components at [Docs - Components](https://mailingui.com/docs/components/overview)
- View our templates at [Templates](https://mailingui.com/templates/minimal/overview)

## CLI
### Initialize MailingUI

Download all the necessary starting files for you to start working with MailingUI.

```shell
npx @mailingui/cli init
```

- `-p`, `--path` define base path to your MailingUI components (default: `"./src/mailingui"`)
- `-o`, `--overwrite` overwrite existing configuration (default: false)
- `-h`, `--help` display help for command

### Add Component(s)

Add all or specific components to your project. See [components](https://mailingui.com/docs/components) for the full list.

```shell
npx @mailingui/cli add --all
```

- `-o`, `--overwrite` automatically overwrite existing components (default: false)
- `-a`, `--all` download all available components (default: false)
- `-h`, `--help`` display help for command
npm package: @mailintegrate/minte-typescript
Description: A client library for Mail Integrate APIs
Author: Mail Integrate
Latest version: 0.0.2

# minte-typescript

Client library for [mailintegrate](https://mailintegrate.com)

## Installation

Install
```
npm install @mailintegrate/minte-typescript
```
or
```
yarn add @mailintegrate/minte-typescript
```

## Usage
- Create Mail Integrate Account [Getting Started](https://app.mailintegrate.com/docs/getting-started)
- Create Domain
- Copy Api Key

```ts
import { mailIntegrate } from "@mailintegrate/minte-typescript"

const minte = mailIntegrate({ apiKey: "..." });

const messages = await minte.getMessages("test@test.mailintegrate.com");
```
npm package: @mailmeteor/ts-sdk
Description: Official Mailmeteor SDK for Node.js and TypeScript
Author: Mailmeteor
Latest version: 0.0.3

# Mailmeteor SDK

Official Mailmeteor SDK for Node.js and TypeScript.

## Installation

```bash
npm install @mailmeteor/ts-sdk
```

## Usage

### Basic Example

```typescript
import { MailmeteorSDK } from '@mailmeteor/ts-sdk'

const mailmeteor = new MailmeteorSDK({
  key: 'your-api-key',
})

// Use the SDK
const subscriptions = await mailmeteor.billingSubscription.getSubscriptions()
```

### Custom Base URL

You can specify a custom base URL when initializing the SDK:

```typescript
const mailmeteor = new MailmeteorSDK({
  key: 'your-api-key',
  baseUrl: 'https://custom-api.example.com/v1',
})
```

## API Resources

The SDK provides access to the following resources:

- `billingAddons` - Manage billing add-ons
- `billingSubscription` - Manage billing subscriptions
- `billing` - General billing operations

## TypeScript Support

The SDK is written in TypeScript and includes complete type definitions. You can import types from the SDK:

```typescript
import { MailmeteorTypes } from '@mailmeteor/ts-sdk'

// Use generated types
type Subscription = MailmeteorTypes.Subscription
```
npm package: @mailok/nuxt-base
Description: Create Nuxt extendable layer with this GitHub template.
Author: Angel Nuñez
Latest version: 0.0.3

# Nuxt Layer Starter

Create Nuxt extendable layer with this GitHub template.

## Setup

Make sure to install the dependencies:

```bash
pnpm install
```

## Working on your theme

Your theme is at the root of this repository, it is exactly like a regular Nuxt project, except you can publish it on NPM.

The `.playground` directory should help you on trying your theme during development.

Running `pnpm dev` will prepare and boot `.playground` directory, which imports your theme itself.

## Distributing your theme

Your Nuxt layer is shaped exactly the same as any other Nuxt project, except you can publish it on NPM.

To do so, you only have to check if `files` in `package.json` are valid, then run:

```bash
npm publish --access public
```

Once done, your users will only have to run:

```bash
npm install --save your-theme
```

Then add the dependency to their `extends` in `nuxt.config`:

```ts
defineNuxtConfig({
  extends: 'your-theme'
})
```

## Development Server

Start the development server on http://localhost:3000

```bash
pnpm dev
```

## Production

Build the application for production:

```bash
pnpm build
```

Or statically generate it with:

```bash
pnpm generate
```

Locally preview production build:

```bash
pnpm preview
```

Checkout the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
npm package: @mailok/store-lite
Description: Minimalist store for Rxjs with Facades
Latest version: 1.0.0

###  Store-lite

This library is just a utility that facilitates the implementation of the Facade + Rxjs pattern.
This pattern was [presented](https://www.youtube.com/watch?v=h-F5uYM69a4&list=PLOETEcp3DkCpimylVKTDe968yNmNIajlR&index=53 "presented") in the ng-conf 2019 by [Thomas Burleson](https://twitter.com/ThomasBurleson "Thomas Burleson") . In addition to other articles such as:
- [View Facades + RxJS!](https://blog.angularindepth.com/angular-you-may-not-need-ngrx-e80546cc56ee "View Facades + RxJS!")
- [Why I stopped using NGRX](https://medium.com/@liorcaspi9/why-i-stopped-using-ngrx-68dfc3cf3be9 "Why I stopped using NGRX")


[Read readme complete](https://github.com/mailok/store-lite "Read readme complete")
npm package: @mailok/use-state
Description: Minimalist store Rxjs to represent the state of a component with a reactive approach
Latest version: 1.0.0

useState
=======

Minimalist store Rxjs to represent the state of a component with a reactive approach.


```
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { fromState, useState } from '@mailok/useState';
import { Observable } from 'rxjs';

const [count$, updateCount] = useState<number>(0);
const [loading$, setLoading] = useState<boolean>(false);
const [error$, setError] = useState<any>(null);

@Component({
  selector: 'lite-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppComponent {
  @fromState(count$) count$: Observable<number>;
  @fromState(loading$) loading$: Observable<boolean>;
  @fromState(error$) error$: Observable<any>;

  constructor() {}

  increment(): void {
    updateCount(state => state + 1);
  }

  decrement(): void {
    updateCount(state => state - 1);
  }

  toggleLoading() {
    setLoading(state => !state);
  }

  toggleError() {
    setError(state => (!state ? { code: '503', message: 'Service Unavailable' } : null));
  }
}

```


```
<mat-card>

  <mat-card-header>
    <mat-card-subtitle>Counter: {{count$ | async}}</mat-card-subtitle>
  </mat-card-header>

  <mat-card-content>
    <pre>{{error$ | async | json}}</pre>
  </mat-card-content>

  <mat-card-actions>
    <button mat-raised-button (click)="increment()">
      <mat-icon>plus_one</mat-icon>
    </button>
    <button mat-raised-button color="warn" (click)="decrement()">
      <mat-icon>exposure_neg_1</mat-icon>
    </button>
    <button mat-stroked-button color="primary" (click)="toggleLoading()">
      <mat-icon *ngIf="!(loading$ | async)">refresh</mat-icon>
      <mat-spinner *ngIf="(loading$ | async)" color="primary" [diameter]="35"></mat-spinner>
    </button>
    <button mat-stroked-button color="warn" (click)="toggleError()">
      <mat-icon>bug_report</mat-icon>
    </button>
  </mat-card-actions>
</mat-card>
```
npm package: @mailonline/vast-xml2js
Description: MOL VAST xml2js method
Author: MailOnline
Latest version: 0.3.0

# @mailonline/vast-xml2js

> Simple wrapper on top of [xml-js](https://www.npmjs.com/package/xml-js) to ensure that is used on a consistent way and to make it easy to change in case is needed on the future.

## See also
* [Root README](../../README.md)
npm package: @mailonline/video-ad-sdk
Description: Video ad SDK to load and play video ads
Author: MailOnline
Latest version: 1.4.0

# Video Ad SDK
[![Build Status](https://api.travis-ci.org/MailOnline/mol-video-ad-sdk.svg?branch=master)](https://travis-ci.org/MailOnline/mol-video-ad-sdk) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/MailOnline/mol-video-ad-sdk/blob/master/LICENSE) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![codecov](https://codecov.io/gh/MailOnline/mol-video-ad-sdk/branch/master/graph/badge.svg)](https://codecov.io/gh/MailOnline/mol-video-ad-sdk) [![Known Vulnerabilities](https://snyk.io/test/github/MailOnline/mol-video-ad-sdk/badge.svg?targetFile=package.json)](https://snyk.io/test/github/MailOnline/mol-video-ad-sdk?targetFile=package.json)

To run video ads in the browser there are many alternatives. The most famous one is probably Google's [IMA SDK](https://developers.google.com/interactive-media-ads/docs/sdks/html5/) for HTML5. There are two main cons with that SDK. It only works through DoubleClick and it is a black box very hard to debug and to maintain. This SDK tries to offer an alternative to play video ads that can work with any player in the world and any ad server that supports the VAST specification. And since it is open source you can read the code and debug if you need to.

## DEMO
Demo [here!](https://mailonline.github.io/mol-video-ad-sdk/demo/index.html).

## Documentation
Currently we only have the API which you can check [here](https://mailonline.github.io/mol-video-ad-sdk/docs/index.html).

## Compiling and Testing
We use [nvm](https://github.com/creationix/nvm) to decide which of node to use.

So after you clone the repo you just need to run
```
$ nvm use
```
to install the supported node version, then run [`yarn`](https://yarnpkg.com/lang/en/docs/cli/#toc-default-command)'s default command
```
$ yarn
```
to install and build the packages and finally you can run
```
$ yarn test
```
to run the tests.

## Discussion
Please open an issue if you have any questions or concerns.

## License
This project is licensed under the MIT license, Copyright (c) 2018 MailOnline. For more information see [LICENSE](./LICENSE)
npm package: @mailonline/videojs-vast-vpaid
Description: VAST plugin to use with video.js
Author: MailOnline
Latest version: 0.3.0

# @mailonline/videojs-vast-vpaid

> This plugin allows videojs to monetise its videos. To do so, it implements the [VAST](https://www.iab.com/guidelines/digital-video-ad-serving-template-vast-4-0/) and [VPAID](https://www.iab.com/guidelines/digital-video-player-ad-interface-definition-vpaid-2-0/) specifications from IAB.

## See also
* [Root README](../../README.md)
npm package: @mailoop/js-toolbox
Description: Boilerplate for npm modules with ES6 features and syntax
Author: Mailoop Tech Team
Latest version: 0.0.6

# NPM Module Boilerplate

[![Build Status](https://travis-ci.org/flexdinesh/npm-module-boilerplate.svg?branch=master)](https://travis-ci.org/flexdinesh/npm-module-boilerplate) [!type=dev) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

**Mailoop Javascript Toolbox** ✨

Javascript toolbox from Mailoop Tech Team

Happy hacking =)

# Contribute

* **ES6/ESNext** - Write _ES6_ code and _Babel_ will transpile it to ES5 for backwards compatibility
* **Test** - _Mocha_ with _Istanbul_ coverage
* **Lint** - Preconfigured _ESlint_ with _Airbnb_ config
* **CI** - _TravisCI_ configuration setup
* **Minify** - Built code will be minified for performance

# Commands
- `yarn run clean` - Remove `lib/` directory
- `yarn test` - Run tests with linting and coverage results.
- `yarn test:only` - Run tests without linting or coverage.
- `yarn test:watch` - You can even re-run tests on file changes!
- `yarn test:prod` - Run tests with minified code.
- `yarn run test:examples` - Test written examples on pure JS for better understanding module usage.
- `yarn run lint` - Run ESlint with airbnb-config
- `yarn run cover` - Get coverage report for your code.
- `yarn run build` - Babel will transpile ES6 => ES5 and minify the code.
- `yarn run prepublish` - Hook for npm. Do all the checks before publishing your module.

# Installation


# License

MIT © Mailoop Tech Team
npm package: @mailpace/mailpace.js
Description: The official Node.js library for the https://mailpace.com API
Latest version: 0.1.3

# MailPace Node.js Library

[![<ORG_NAME>](https://circleci.com/gh/mailpace/mailpace.js.svg?style=svg)](https://app.circleci.com/pipelines/github/mailpace/mailpace.js)
[![codecov](https://codecov.io/gh/mailpace/mailpace.js/branch/master/graph/badge.svg?token=QDLVU2JGyD)](https://codecov.io/gh/mailpace/mailpace.js)
[![npm version](https://badge.fury.io/js/%40mailpace%2Fmailpace.js.svg)](https://badge.fury.io/js/%40mailpace%2Fmailpace.js)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)

This is the official Node.js library for the https://mailpace.com transactional email API

## Quick Start

### Pre-requisites

First you will need to retrieve your API token for your sending domain from [MailPace](https://app.mailpace.com). You can find it under Organization -> Domain -> API Tokens

Your domain must have completed DKIM authorization and have an active plan to send emails.

### Installation

If using NPM

`npm install --save @mailpace/mailpace.js`

If using Yarn

`yarn add @mailpace/mailpace.js`

### Sending an email

```javascript
const MailPace = require('@mailpace/mailpace.js');
const client = new MailPace.DomainClient('API_TOKEN_HERE');

client
  .sendEmail({
    from: 'test@test.com',
    to: 'test@test.com',
    subject: 'test',
    htmlbody: '<H1>HTML Email</h1>',
  })
  .then((r) => {
    console.log(r);
  });
```

## Documentation

See [the ./docs folder](https://github.com/mailpace/mailpace.js/tree/master/docs) for documentation and options

To regenerate the documentation, run `yarn docs:md`

## Issues, Support & Contributions

If you have any difficulties please contact support@mailpace.com or open an issue on github.

Contributions are always welcome

## License

MIT
npm package: @mailpeek/components
Description: Vue 3 email components with SSR render-to-HTML pipeline
Author: Aoife Shannon
Latest version: 0.1.1

# @mailpeek/components

14 Vue 3 components for building cross-client email HTML, with server-side rendering.

**[Docs](https://mailpeek.dev/components)** · **[GitHub](https://github.com/mailpeek/mailpeek)**

## Features

- **14 email components** — Layout, content, and utility primitives that compile to email-safe HTML
- **Server-side rendering** — `render()` function converts Vue email templates to HTML strings
- **Type-safe** — Full TypeScript support for all components and props
- **Zero dependencies** — Vue 3 peer dep only

## Installation

```bash
npm install @mailpeek/components
```

## Quick Start

```vue
<script setup>
import {
  EmailHtml, EmailHead, EmailBody, EmailContainer,
  EmailHeading, EmailText, EmailButton,
} from '@mailpeek/components'
</script>

<template>
  <EmailHtml>
    <EmailHead title="Welcome" />
    <EmailBody>
      <EmailContainer>
        <EmailHeading as="h1">Hello!</EmailHeading>
        <EmailText>Thanks for joining us.</EmailText>
        <EmailButton href="https://example.com">Get Started</EmailButton>
      </EmailContainer>
    </EmailBody>
  </EmailHtml>
</template>
```

## Server-Side Rendering

Use the `render()` function to convert any Vue email component to an HTML string:

```ts
import { render } from '@mailpeek/components'
import WelcomeEmail from './WelcomeEmail.vue'

const html = await render(WelcomeEmail, { name: 'Aoife' })
// Send with Resend, SendGrid, Nodemailer, etc.
```

## Components

### Layout

| Component | Description |
|-----------|-------------|
| `EmailHtml` | Root `<html>` element with xmlns attributes |
| `EmailHead` | `<head>` with meta tags, optional title, and style slot |
| `EmailBody` | `<body>` with configurable background and padding |
| `EmailContainer` | Centred content wrapper (default 600px) |
| `EmailSection` | Full-width section block |
| `EmailRow` | Horizontal row for multi-column layouts |
| `EmailColumn` | Column within a row |

### Content

| Component | Description |
|-----------|-------------|
| `EmailHeading` | Heading element (`h1`-`h6`) |
| `EmailText` | Paragraph text |
| `EmailButton` | Call-to-action button with link |
| `EmailImage` | Image with email-safe defaults |
| `EmailLink` | Inline hyperlink |

### Utility

| Component | Description |
|-----------|-------------|
| `EmailDivider` | Horizontal rule |
| `EmailPreviewText` | Hidden preview text for inbox snippets |

All components output table-based HTML with inline styles for maximum email client compatibility.

## Also Available

[`@mailpeek/preview`](https://www.npmjs.com/package/@mailpeek/preview) — Preview emails across Gmail, Outlook, and dark mode with compatibility scoring and accessibility checking.

## License

MIT
npm package: @mailprotector/haraka-plugin-prometheus
Description: A Haraka plugin for collecting metrics into Prometheus.
Author: Mailprotector Team
Latest version: 1.0.6

# haraka-plugin-prometheus
A Haraka plugin for collecting metrics into Prometheus.

## Install

Install with npm
```bash
npm install @mailprotector/haraka-plugin-prometheus --save
```

## Setup
### HTTP Server

Enable Haraka's HTTP server (see `listen` in http.ini) to listen on [port 9904](https://github.com/prometheus/prometheus/wiki/Default-port-allocations)

http.ini:
```ini
listen=[::]:9904
```

### Enable Plugin
Add to `plugin` file in the haraka config folder
```text
@mailprotector/haraka-plugin-prometheus
```

### Config

Config options are set in `prometheus.json`:

| Parameter      | Description                              | Type    | Default Value |
| -------------- | ---------------------------------------- | ------- | ------------- |
| enabled        | whether to enable the plugin             | boolean | true          |
| prefix         | prefix that gets appended to all metrics | string  | none          |
| default_labels | labels to add to all metrics             | map     | none          |

## Sending metrics from other plugins

You can push metrics into the `connection.notes.prometheus_metrics` array from any other Haraka plugin. They will be collected into Prometheus on the `disconnect` hook.

The format of the array is:

```javascript
connection.notes.prometheus_metrics = [
  { type: 'counter', name 'test_counter', help: '', value: 1, label_names: ['foo', 'bar'] },
  { type: 'gauge', name 'test_gauge', help: '', value: 1, label_names: ['foo', 'bar'] },
  { type: 'histogram', name 'test_histogram', help: '', value: 1, label_names: ['foo', 'bar'] },
  { type: 'summary', name 'test_summary', help: '', value: 1, label_names: ['foo', 'bar'] }
]
```

##

![alt text](https://mailprotector.com/wp-content/uploads/2022/07/MP-Left-RGB.png)

[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailprotector/haraka-plugin-queue-rails
Description: A Haraka plugin for relaying email to a Rails application via Action Mailbox.
Author: Mailprotector Team
Latest version: 1.1.6

# haraka-plugin-queue-rails
A Haraka plugin for relaying email to a Rails application via Action Mailbox.

## Install

Install with npm
```bash
npm install @mailprotector/haraka-plugin-queue-rails --save
```

## Setup
### Enable Plugin
Add to `plugin` file in the haraka config folder
```text
@mailprotector/haraka-plugin-queue-rails
```

### Config

Config options are set in `queue.rails.json`:

| Parameter               | Description                                          | Type   | Default Value |
| ----------------------- | ---------------------------------------------------- | ------ | ------------- |
| ACTION_MAILBOX_PASSWORD | action mailbox password                              | string | none          |
| ACTION_MAILBOX_URL      | action mailbox url endpoint                          | string | none          |
| USER_AGENT              | user agent to send action mailbox requests as        | string | none          |
| ENVELOPE_HEADER_NAME    | header name for envelope information (details below) | string | none          |

## Details
The following header from your `ENVELOPE_HEADER_NAME` config will be added to the email as a JSON string
```js
{
  "mail_from": transaction.mail_from,
  "rcpt_to": transaction.rcpt_to,
  "remote_ip": remote.ip,
  "remote_host": remote.host,
  "helo": hello.host
}
```

##
![alt text](https://mailprotector.com/wp-content/uploads/2022/07/MP-Left-RGB.png)
[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailprotector/haraka-plugin-rcpt-http
Description: A Haraka Plugin that checks recipients are valid via HTTP
Author: Mailprotector Team
Latest version: 1.1.6

# haraka-plugin-rcpt-http
A Haraka plugin for validating recipient addresses against an HTTP endpoint.

## Install

Install with npm
```bash
npm install @mailprotector/haraka-plugin-rcpt-http --save
```

## Setup
### Enable Plugin
Add to `plugin` file in the haraka config folder
```text
@mailprotector/haraka-plugin-rcpt-http
```

### Config

Config options are set in `rcpt_http.json`:

| Parameter      | Description                         | Type   | Default Value |
| -------------- | ----------------------------------- | ------ | ------------- |
| USERNAME       | HTTP server username                | string | none          |
| PASSWORD       | HTTP server password                | string | none          |
| RCPT_CHECK_URL | The URL endpoint of the HTTP server | string | none          |

## Details
The http API call uses a `POST` to `RCPT_URL` with `basic auth` if a USERNAME and PASSWORD are provided in config.
Without the User/Pass will do an unauthenticated POST to RCPT_URL.

The following POST body will be sent to RCPT_URL
```js
{
  email: params[0].original,
  ip: connection.remote.ip
}
```

##
![alt text](https://mailprotector.com/wp-content/uploads/2022/07/MP-Left-RGB.png)
[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailprotector/haraka-plugin-rcpt-to-accept-all
Description: Haraka plugin to accept all recipients
Author: Mailprotector Team
Latest version: 1.0.3

# haraka-plugin-rcpt-to-accept-all
A simple Haraka plugin for accepting any rcpt_to address.

## Warning!
This plugin accepts ALL rcpt_to addresses

## Intallation

Install with npm

```bash
npm install @mailprotector/haraka-plugin-rcpt-to-accept-all --save
```

Add to config file in config folder
```text
@mailprotector/haraka-plugin-rcpt-to-accept-all
```

##
![alt text](https://mailprotector.com/wp-content/uploads/2022/07/MP-Left-RGB.png)
[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailprotector/haraka-plugin-s3-fetch
Description: Haraka plugin that fetches certificates from s3
Author: npm@mailprotector.com
Latest version: 1.0.9

# haraka-plugin-s3-fetch
A Haraka plugin to fetch config files from an S3 bucket.

## Install
Install with npm

`npm install @mailprotector/haraka-plugin-s3-fetch --save`

## Setup

### Enable Plugin
Add to `plugin` file in the haraka config folder
```text
@mailprotector/haraka-plugin-s3-fetch
```
### Config

Config options are set in `s3-fetch.json`:

**Files**

| Parameter | Description                            | Type   | Default Value |
| --------- | -------------------------------------- | ------ | ------------- |
| bucket    | s3 bucket name where file is located   | string | none          |
| key       | s3 key of file                         | string | none          |
| path      | local output path to store the file in | string | none          |

**Credentials**

There are a few options when it comes to setting AWS credentials. Optionally, you can add a `credentials` directive to the config file pass in specfic AWS credentials or STS session tokens.
Refer to the [AWS documentation](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html) for more details on passing credentials

| Parameter       | Description           | Type   | Default Value |
| --------------- | --------------------- | ------ | ------------- |
| accessKeyId     | AWS API key ID        | string | none          |
| secretAccessKey | AWS secret access key | string | none          |
| sessionToken    | STS assume role token | string | none          |
| region          | AWS region            | string | none          |

##

![alt text](https://i1.wp.com/mailprotector.com/wp-content/uploads/2020/03/cropped-logo-2x.png)

[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailprotector/haraka-plugin-secrets-manager
Description: A Haraka plugin for parsing config files with EJS to inject environment variables into config files on initialize
Author: Mailprotector Team
Latest version: 1.1.0

# haraka-plugin-secrets-manager
A Haraka plugin for parsing config files with EJS to inject environment variables into config files on initialize

## Install

Install with npm
```bash
npm install @mailprotector/haraka-plugin-secrets-manager --save
```

## Setup
### Enable Plugin
Add to `plugin` file in the haraka config folder
```text
@mailprotector/haraka-plugin-secrets-manager
```

### Setup Secrets
When Haraka initializes it loads your passed in config folder and parses each config file using EJS, passing in process.env as the model.
This allows us to set configuration files through environment variables on init, instead of keeping configs in plaintext on github.
Create an environment variable called CONFIG_PATH and set it to your absolute haraka config folder path.

### Example
```js
  process.env.CONFIG_PATH = '/etc/haraka/config
  process.env.TESTING = 'truth'
```

your_plugin_config.json
```json
{
  "eats_cake": "<%= TESTING %>"
}
```

will produce:
```json
{
  "eats_cake": "truth"
}
```
##
![alt text](https://i1.wp.com/mailprotector.com/wp-content/uploads/2020/03/cropped-logo-2x.png)
[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailprotector/haraka-plugin-smtp-auth
Description: A Haraka Plugin that connects to an HTTP endpoint, checks the credentials and returns a response.
Author: Mailprotector Team
Latest version: 1.0.3

# haraka-plugin-smtp-auth
A Haraka plugin for connecting to an HTTP endpoint to get a response.

## Install

Install with npm
```bash
npm install @mailprotector/haraka-plugin-smtp-auth --save
```

## Setup
### Enable Plugin
Add to `plugin` file in the haraka config folder
```text
@mailprotector/haraka-plugin-smtp-auth
```

### Config

Config options are set in `smtp_auth.json`:

| Parameter               | Description                                   | Type   | Default Value |
| ----------------------- | --------------------------------------------- | ------ | ------------- |
| USERNAME                | HTTP server username                          | string | none          |
| PASSWORD                | HTTP server password                          | string | none          |
| AUTH_URL                | The URL endpoint of the HTTP server           | string | none          |

## Details
The http API call uses a `POST` to `AUTH_URL`.

The following POST body will be sent to AUTH_URL. If USERNAME and PASSWORD are not empty, 
Basic Authentication will be used.

```js
{
  username: 
  password: 
}
```

##
![alt text](https://mailprotector.com/wp-content/uploads/2022/07/MP-Left-RGB.png)
[About Mailprotector](https://mailprotector.com/about-mailprotector)
npm package: @mailsac/api
Description: Official Mailsac API client library
Author: Forking Software LLC
Latest version: 1.0.8

# mailsac-typescript-api

Official Mailsac TypeScript and JavaScript Client Library

Compiled JavaScript files are published here, as well as TypeScript files and .d typings.

This library is generated from the openapi spec for mailsac
which can be seen at https://mailsac.com/openapi.yml or https://mailsac.com/openapi.json.

## Usage

```shell
npm install @mailsac/api
```

The official Mailsac API spec documentation which includes usage examples for this library:

https://mailsac.com/docs/api

or see the guides:

https://docs.mailsac.com

### [List of all mailsac client methods](methodList.md)

### Usage Example

Get started by instantiating a client library instance with an API key:

```typescript
import { Mailsac } from "@mailsac/api";
// or for javascript
// const { Mailsac } = require("@mailsac/api");

const mailsac = new Mailsac({ headers: {  "Mailsac-Key": process.env.MAILSAC_KEY } }); // api key from mailsac.com/v2/credentials
```

Then you can use the client to make requests:

```typescript
// list public messages on a public inbox (no need to create the inbox first!)
const messages = await mailsac.addresses.listMessages('test-public@mailsac.com');
console.log({ messages }); // [{...}, {...}, ...]

// reserve an enhanced private address - everybody starts with a free one.
const address = await mailsac.addresses.createAddress('test-private@mailsac.com');
console.log({ address }); // { _id: "test-private@mailsac-com", ... }
const myAddresses = await mailsac.addresses.list();
console.log({ myAddresses }); // [{ _id: "test-private@mailsac-com", ... }]

// got to your email client, send an email to the address....
// ...then check the mail
const messages = await mailsac.messages.listMessages('test-private@mailsac.com');
console.log({ messages }); // [{...}, {...}, ...]

```

There are many more API endpoints which are supported by the client library. Look at
`./mailsac-client.ts` under the `Mailsac` class to learn more.

Mailsac has features like custom subdomains of `msdc.co` which require no DNS config, so you can be receiving
private email for testing in seconds.
npm package: @mailsentry/node
Description: Official Node.js SDK for the MailSentry email validation API
Author: MailSentry
Latest version: 1.0.1

# @mailsentry/node

Official Node.js SDK for the [MailSentry](https://mailsentry.dev) email validation API.

## Installation

```bash
npm install @mailsentry/node
```

## Quick Start

```typescript
import MailSentry from "@mailsentry/node";

const client = new MailSentry({ apiKey: "ms_live_your_key_here" });

// Single verification
const result = await client.verify("user@example.com");
console.log(result.score, result.verdict);

// Bulk verification
const bulk = await client.bulkVerify([
  "user1@example.com",
  "user2@example.com",
  "user3@example.com",
]);
console.log(`Validated ${bulk.total} emails`);

// Get job details
const job = await client.getBulkJob(bulk.id);

// List recent jobs
const jobs = await client.listBulkJobs();
```

## Configuration

```typescript
const client = new MailSentry({
  apiKey: "ms_live_your_key_here", // Required
  baseUrl: "https://mailsentry.dev", // Optional (default)
  timeout: 30000, // Optional: request timeout in ms (default: 30s)
});
```

## API Reference

### `verify(email: string): Promise<ValidationResult>`

Validates a single email address. Returns score (0-100), verdict, and detailed checks across 8 validation layers.

### `bulkVerify(emails: string[], filename?: string): Promise<BulkJobResponse>`

Validates multiple emails in one request. Batch size depends on your plan.

### `getBulkJob(jobId: string): Promise<BulkJobDetail>`

Retrieves the full results of a bulk validation job.

### `listBulkJobs(): Promise<BulkJobListItem[]>`

Lists your 20 most recent bulk validation jobs.

## Error Handling

```typescript
import { MailSentryError } from "@mailsentry/node";

try {
  const result = await client.verify("user@example.com");
} catch (err) {
  if (err instanceof MailSentryError) {
    console.error(`API error ${err.status}: ${err.message}`);
  }
}
```

## Links

- [Documentation](https://mailsentry.dev/docs)
- [Sign up](https://mailsentry.dev/signup) — 1,000 free checks/month