The following worked for me, there are two parts:
01) app.js
02) Google
and OAuth2
setup
app.js
var nodemailer = require("nodemailer");
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: local_settings.my_gmail_username,
clientId: local_settings.my_oauth_client_id,
clientSecret: local_settings.my_oauth_client_secret,
refreshToken: local_settings.my_oauth_refresh_token,
accessToken: local_settings.my_oauth_access_token
}
});
var mail = {
from: "John Smith <me@mydomain.com>",
to: "user@userdomain.com",
subject: "Registration successful",
text: "You successfully registered an account at www.mydomain.com",
html: "<p>You successfully registered an account at www.mydomain.com</p>"
}
transporter.sendMail(mail, function(err, info) {
if (err) {
console.log(err);
} else {
// see https://nodemailer.com/usage
console.log("info.messageId: " + info.messageId);
console.log("info.envelope: " + info.envelope);
console.log("info.accepted: " + info.accepted);
console.log("info.rejected: " + info.rejected);
console.log("info.pending: " + info.pending);
console.log("info.response: " + info.response);
}
transporter.close();
});
Google and OAuth Setup
The code above requires the following setup:
01)
Go to https://console.developers.google.com
02)
If you don't have a project, you will be prompted to create one

03)
Click on Create Project
04)
Click on Create

05)
Enter a Project Name
and click Create

06)
Select the Gmail API
07)
Click on Enable

08)
Click on Create Credentials
09)
Enter the required settings
10)
Give the OAuth client a name and ensure you add https://developers.google.com/oauthplayground
as a redirect URI
in order to generate the refresh
and access
tokens later

11)
Define the consent screen settings
12)
Click I'll do this later
and Done
13)
Click on the Edit
icon, to view your Client ID
and Client Secret
14)
To generate access
and refresh
tokens, go to https://developers.google.com/oauthplayground
15)
Click on the cog
icon in the top right, check Use your own OAuth credentials
and enter Client ID
and Client Secret
16)
In the left column, select Gmail API v1
and click Authorise APIs

17)
If you are signed into multiple accounts, when prompted select the relevant account
18)
Click Allow

19)
Click Exchange authorisation code for tokens

I'm not sure why there is a count down on the access
token, but hopefully the message at the bottom of the screen means that the token won't expire.