https://github.com/eleith/emailjs
  
  
    html emails and attachments to any smtp server with nodejs 
    https://github.com/eleith/emailjs
  
        Last synced: 6 months ago 
        JSON representation
    
html emails and attachments to any smtp server with nodejs
- Host: GitHub
- URL: https://github.com/eleith/emailjs
- Owner: eleith
- License: mit
- Created: 2011-02-23T21:14:18.000Z (over 14 years ago)
- Default Branch: main
- Last Pushed: 2023-09-06T03:45:39.000Z (about 2 years ago)
- Last Synced: 2025-05-09T21:14:31.470Z (6 months ago)
- Language: HTML
- Homepage:
- Size: 6.5 MB
- Stars: 2,199
- Watchers: 60
- Forks: 231
- Open Issues: 7
- 
            Metadata Files:
            - Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
 
Awesome Lists containing this project
- awesome-nodejs - emailjs - Html emails and attachments to any smtp server with nodejs.  (Repository / Email)
- awesome-github-star - emailjs
- awesome-nodejs - emailjs - Send text/HTML emails with attachments to any SMTP server. (Packages / Email)
- awesome-node - emailjs - Send text/HTML emails with attachments to any SMTP server. (Packages / Email)
- awesome-nodejs-cn - emailjs - 向任何SMTP服务器发送带有附件的文本/HTML电子邮件. (目录 / 邮箱)
- awesome-nodejs-cn - emailjs - **star:2196** 发送带有附件的文本/HTML电子邮件到任何SMTP服务器 ![star > 2000][Awesome] (包 / 邮件)
- awesome-nodejs - emailjs - html emails and attachments to any smtp server with nodejs - ★ 1688 (Email)
- awesome-nodejs-cn - emailjs - 向任何 SMTP 服务器发送带有附件的文本 / HTML 电子邮件 (包 / 电子邮件)
- fucking-awesome-nodejs - emailjs - Send text/HTML emails with attachments to any SMTP server. (Packages / Email)
- fucking-awesome-nodejs - emailjs - Send text/HTML emails with attachments to any SMTP server. (Packages / Email)
- awesome-nodejs - emailjs - 发送电子邮件(smtp 协议) (Uncategorized / Uncategorized)
README
          # emailjs [](https://github.com/eleith/emailjs/actions?query=workflow%3A.github%2Fworkflows%2Ftest.yml) [](https://github.com/eleith/emailjs/actions?query=workflow%3A.github%2Fworkflows%2Flint.yml)
send emails, html and attachments (files, streams and strings) from node.js to any smtp server
## INSTALLING
    npm install emailjs
## FEATURES
- works with SSL and TLS smtp servers
- supports smtp authentication ('PLAIN', 'LOGIN', 'CRAM-MD5', 'XOAUTH2')
- emails are queued and the queue is sent asynchronously
- supports sending html emails and emails with multiple attachments (MIME)
- attachments can be added as strings, streams or file paths
- supports utf-8 headers and body
- built-in type declarations
- automatically handles [greylisting](http://projects.puremagic.com/greylisting/whitepaper.html)
## REQUIRES
- auth access to an SMTP Server
- if your service (ex: gmail) uses two-step authentication, use an application specific password
## EXAMPLE USAGE - text only emails
```js
import { SMTPClient } from 'emailjs';
const client = new SMTPClient({
	user: 'user',
	password: 'password',
	host: 'smtp.your-email.com',
	ssl: true,
});
// send the message and get a callback with an error or details of the message that was sent
client.send(
	{
		text: 'i hope this works',
		from: 'you ',
		to: 'someone , another ',
		cc: 'else ',
		subject: 'testing emailjs',
	},
	(err, message) => {
		console.log(err || message);
	}
);
```
## EXAMPLE USAGE - using async/await
```js
// assuming top-level await for brevity
import { SMTPClient } from 'emailjs';
const client = new SMTPClient({
	user: 'user',
	password: 'password',
	host: 'smtp.your-email.com',
	ssl: true,
});
try {
	const message = await client.sendAsync({
		text: 'i hope this works',
		from: 'you ',
		to: 'someone , another ',
		cc: 'else ',
		subject: 'testing emailjs',
	});
	console.log(message);
} catch (err) {
	console.error(err);
}
```
## EXAMPLE USAGE - html emails and attachments
```js
import { SMTPClient } from 'emailjs';
const client = new SMTPClient({
	user: 'user',
	password: 'password',
	host: 'smtp.your-email.com',
	ssl: true,
});
const message = {
	text: 'i hope this works',
	from: 'you ',
	to: 'someone , another ',
	cc: 'else ',
	subject: 'testing emailjs',
	attachment: [
		{ data: 'i hope this works!', alternative: true },
		{ path: 'path/to/file.zip', type: 'application/zip', name: 'renamed.zip' },
	],
};
// send the message and get a callback with an error or details of the message that was sent
client.send(message, function (err, message) {
	console.log(err || message);
});
// you can continue to send more messages with successive calls to 'client.send',
// they will be queued on the same smtp connection
// or instead of using the built-in client you can create an instance of 'smtp.SMTPConnection'
```
## EXAMPLE USAGE - sending through outlook
```js
import { SMTPClient, Message } from 'emailjs';
const client = new SMTPClient({
	user: 'user',
	password: 'password',
	host: 'smtp-mail.outlook.com',
	tls: {
		ciphers: 'SSLv3',
	},
});
const message = new Message({
	text: 'i hope this works',
	from: 'you ',
	to: 'someone , another ',
	cc: 'else ',
	subject: 'testing emailjs',
	attachment: [
		{ data: 'i hope this works!', alternative: true },
		{ path: 'path/to/file.zip', type: 'application/zip', name: 'renamed.zip' },
	],
});
// send the message and get a callback with an error or details of the message that was sent
client.send(message, (err, message) => {
	console.log(err || message);
});
```
## EXAMPLE USAGE - attaching and embedding an image
```js
import { SMTPClient, Message } from 'emailjs';
const client = new SMTPClient({
	user: 'user',
	password: 'password',
	host: 'smtp-mail.outlook.com',
	tls: {
		ciphers: 'SSLv3',
	},
});
const message = new Message({
	text: 'i hope this works',
	from: 'you ',
	to: 'someone , another ',
	cc: 'else ',
	subject: 'testing emailjs',
	attachment: [
		{
			data:
				'i hope this works! here is an image: ![]() ',
 ',
		},
		{ path: 'path/to/file.zip', type: 'application/zip', name: 'renamed.zip' },
		{
			path: 'path/to/image.jpg',
			type: 'image/jpg',
			headers: { 'Content-ID': '' },
		},
	],
});
// send the message and get a callback with an error or details of the message that was sent
client.send(message, (err, message) => {
	console.log(err || message);
});
```
# API
## new SMTPClient(options)
```js
// options is an object with the following recognized schema:
const options = {
	user, // username for logging into smtp
	password, // password for logging into smtp
	host, // smtp host (defaults to 'localhost')
	port, // smtp port (defaults to 25 for unencrypted, 465 for `ssl`, and 587 for `tls`)
	ssl, // boolean or object (if true or object, ssl connection will be made)
	tls, // boolean or object (if true or object, starttls will be initiated)
	timeout, // max number of milliseconds to wait for smtp responses (defaults to 5000)
	domain, // domain to greet smtp with (defaults to os.hostname)
	authentication, // array of preferred authentication methods ('PLAIN', 'LOGIN', 'CRAM-MD5', 'XOAUTH2')
	logger, // override the built-in logger (useful for e.g. Azure Function Apps, where console.log doesn't work)
};
// ssl/tls objects are an abbreviated form of [`tls.connect`](https://nodejs.org/dist/latest-v14.x/docs/api/tls.html#tls_tls_connect_options_callback)'s options
// the missing items are: `port`, `host`, `path`, `socket`, `timeout` and `secureContext`
// NOTE: `host` is trimmed before being used to establish a connection;
// however, the original untrimmed value will still be visible in configuration.
```
## SMTPClient#send(message, callback)
```js
// message can be a smtp.Message (as returned by email.message.create)
// or an object identical to the first argument accepted by email.message.create
// callback will be executed with (err, message)
// either when message is sent or an error has occurred
```
## new Message(headers)
```js
// headers is an object with the following recognized schema:
const headers = {
	from, // sender of the format (address or name 
 or "name" )
	to, // recipients (same format as above), multiple recipients are separated by a comma
	cc, // carbon copied recipients (same format as above)
	bcc, // blind carbon copied recipients (same format as above)
	text, // text of the email
	subject, // string subject of the email
	attachment, // one attachment or array of attachments
};
// the `from` field is required.
// at least one `to`, `cc`, or `bcc` header is also required.
// you can also add whatever other headers you want.
```
## Message#attach(options)
Can be called multiple times, each adding a new attachment.
```js
// options is an object with the following recognized schema:
const options = {
	// one of these fields is required
	path, // string to where the file is located
	data, // string of the data you want to attach
	stream, // binary stream that will provide attachment data (make sure it is in the paused state)
	// better performance for binary streams is achieved if buffer.length % (76*6) == 0
	// current max size of buffer must be no larger than Message.BUFFERSIZE
	// optionally these fields are also accepted
	type, // string of the file mime type
	name, // name to give the file as perceived by the recipient
	charset, // charset to encode attatchment in
	method, // method to send attachment as (used by calendar invites)
	alternative, // if true, will be attached inline as an alternative (also defaults type='text/html')
	inline, // if true, will be attached inline
	encoded, // set this to true if the data is already base64 encoded, (avoid this if possible)
	headers, // object containing header=>value pairs for inclusion in this attachment's header
	related, // an array of attachments that you want to be related to the parent attachment
};
```
## Message#checkValidity()
Synchronously validate that a Message is properly formed.
```js
const message = new Message(options);
const { isValid, validationError } = message.checkValidity();
if (isValid) {
	// ...
} else {
	// first error encountered
	console.error(validationError);
}
```
## new SMTPConnection(options={})
```js
// options is an object with the following recognized schema:
const options = {
	user, // username for logging into smtp
	password, // password for logging into smtp
	host, // smtp host (defaults to 'localhost')
	port, // smtp port (defaults to 25 for unencrypted, 465 for `ssl`, and 587 for `tls`)
	ssl, // boolean or object (if true or object, ssl connection will be made)
	tls, // boolean or object (if true or object, starttls will be initiated)
	timeout, // max number of milliseconds to wait for smtp responses (defaults to 5000)
	domain, // domain to greet smtp with (defaults to os.hostname)
	authentication, // array of preferred authentication methods ('PLAIN', 'LOGIN', 'CRAM-MD5', 'XOAUTH2')
	logger, // override the built-in logger (useful for e.g. Azure Function Apps, where console.log doesn't work)
};
// ssl/tls objects are an abbreviated form of [`tls.connect`](https://nodejs.org/dist/latest-v14.x/docs/api/tls.html#tls_tls_connect_options_callback)'s options
// the missing items are: `port`, `host`, `path`, `socket`, `timeout` and `secureContext`
// NOTE: `host` is trimmed before being used to establish a connection;
// however, the original untrimmed value will still be visible in configuration.
```
To target a Message Transfer Agent (MTA), omit all options.
## SMTPConnection#authentication
associative array of currently supported SMTP authentication mechanisms
## Authors
eleith
zackschuster
## Testing
    npm install -d
    npm test
## Contributions
issues and pull requests are welcome