mirror of
https://github.com/mgerb/mywebsite
synced 2026-01-12 02:42:48 +00:00
153 lines
4.9 KiB
Markdown
153 lines
4.9 KiB
Markdown
# SMTP transport module for Nodemailer
|
|
|
|
[](https://travis-ci.org/andris9/nodemailer-smtp-transport)
|
|
[](http://badge.fury.io/js/nodemailer-smtp-transport)
|
|
|
|
Applies for Nodemailer v1.x and not for v0.x where transports are built-in.
|
|
|
|
## Setup
|
|
|
|
Install with npm
|
|
|
|
npm install nodemailer-smtp-transport
|
|
|
|
Require to your script
|
|
|
|
```javascript
|
|
var nodemailer = require('nodemailer');
|
|
var smtpTransport = require('nodemailer-smtp-transport');
|
|
```
|
|
|
|
## Usage
|
|
|
|
Create a Nodemailer transport object
|
|
|
|
```javascript
|
|
var transporter = nodemailer.createTransport(smtpTransport(options))
|
|
```
|
|
|
|
or (by using smtpTransport as default)
|
|
|
|
```javascript
|
|
var transporter = nodemailer.createTransport(options)
|
|
```
|
|
|
|
Where
|
|
|
|
* **options** defines connection data
|
|
* **options.port** is the port to connect to (defaults to 25 or 465)
|
|
* **options.host** is the hostname or IP address to connect to (defaults to 'localhost')
|
|
* **options.secure** defines if the connection should use SSL (if `true`) or not (if `false`)
|
|
* **options.auth** defines authentication data (see [authentication](#authentication) section below)
|
|
* **options.ignoreTLS** turns off STARTTLS support if true
|
|
* **options.name** optional hostname of the client, used for identifying to the server
|
|
* **options.localAddress** is the local interface to bind to for network connections
|
|
* **options.connectionTimeout** how many milliseconds to wait for the connection to establish
|
|
* **options.greetingTimeout** how many milliseconds to wait for the greeting after connection is established
|
|
* **options.socketTimeout** how many milliseconds of inactivity to allow
|
|
* **options.debug** if true, the connection emits all traffic between client and server as 'log' events
|
|
* **options.authMethod** defines preferred authentication method, eg. 'PLAIN'
|
|
* **options.tls** defines additional options to be passed to the socket constructor, eg. *{rejectUnauthorized: true}*
|
|
|
|
Alternatively you can use connection url with protocol 'smtp:' or 'smtps:'. Use query arguments for additional configuration values.
|
|
|
|
**Example**
|
|
|
|
```javascript
|
|
var transporter = nodemailer.createTransport(smtpTransport({
|
|
host: 'localhost',
|
|
port: 25,
|
|
auth: {
|
|
user: 'username',
|
|
pass: 'password'
|
|
}
|
|
}));
|
|
```
|
|
|
|
Or with connection url (gmail)
|
|
|
|
```javascript
|
|
var transporter = nodemailer.createTransport(
|
|
smtpTransport('smtps://username%40gmail.com:password@smtp.gmail.com')
|
|
);
|
|
```
|
|
|
|
## Authentication
|
|
|
|
If authentication data is not present, the connection is considered authenticated from the start.
|
|
|
|
Set authentcation data with `options.auth`
|
|
|
|
Where
|
|
|
|
* **auth** is the authentication object
|
|
* **auth.user** is the username
|
|
* **auth.pass** is the password for the user
|
|
* **auth.xoauth2** is the OAuth2 access token (preferred if both `pass` and `xoauth2` values are set) or an [XOAuth2](https://github.com/andris9/xoauth2) token generator object.
|
|
|
|
If a [XOAuth2](https://github.com/andris9/xoauth2) token generator is used as the value for `auth.xoauth2` then you do not need to set the value for `auth.user`. XOAuth2 generator generates required `accessToken` itself if it is missing or expired. In this case if the authentication fails, a new token is requested and the authentication is retried once. If it still fails, an error is returned.
|
|
|
|
Install xoauth2 module to use XOauth2 token generators (not included by default)
|
|
|
|
npm install xoauth2 --save
|
|
|
|
**XOAuth2 Example**
|
|
|
|
> **NB!** The correct OAuth2 scope for Gmail is `https://mail.google.com/`
|
|
|
|
```javascript
|
|
var nodemailer = require('nodemailer');
|
|
var generator = require('xoauth2').createXOAuth2Generator({
|
|
user: '{username}',
|
|
clientId: '{Client ID}',
|
|
clientSecret: '{Client Secret}',
|
|
refreshToken: '{refresh-token}',
|
|
accessToken: '{cached access token}' // optional
|
|
});
|
|
|
|
// listen for token updates
|
|
// you probably want to store these to a db
|
|
generator.on('token', function(token){
|
|
console.log('New token for %s: %s', token.user, token.accessToken);
|
|
});
|
|
|
|
// login
|
|
var transporter = nodemailer.createTransport(({
|
|
service: 'gmail',
|
|
auth: {
|
|
xoauth2: generator
|
|
}
|
|
}));
|
|
|
|
// send mail
|
|
transporter.sendMail({
|
|
from: 'sender@example.com',
|
|
to: 'receiver@example.com',
|
|
subject: 'hello world!',
|
|
text: 'Authenticated with OAuth2'
|
|
}, function(error, response) {
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log('Message sent');
|
|
}
|
|
});
|
|
```
|
|
|
|
## Using well-known services
|
|
|
|
If you do not want to specify the hostname, port and security settings for a well known service, you can use it by its name (case insensitive)
|
|
|
|
```javascript
|
|
smtpTransport({
|
|
service: 'gmail',
|
|
auth: ..
|
|
});
|
|
```
|
|
|
|
See the list of all supported services [here](https://github.com/andris9/nodemailer-wellknown#supported-services).
|
|
|
|
## License
|
|
|
|
**MIT**
|