Моя функция (развернутая как облачная функция Firebase) использует Nodemailer для отправки электронной почты с помощью Gmail.
Я получаю ошибку Error: unauthorized_client
, несмотря на указание всего, как в https://nodemailer.com/smtp/oauth2/#oauth -2lo
unauthorized_client - этот клиент не авторизован для использования запрошенного типа предоставления. Например, если вы ограничите, какие приложения могут использовать неявное предоставление, вы вернете эту ошибку для других приложений.
Проблема может быть в моем коде или в настройке учетных данных OAuth в На консоли GCP я не смог найти способ специально включить область действия Gmail SMTP OAuth2 (https://mail.google.com/) для моей службы.
Я нашел только статьи о том, как добавить области учетных записей служб в G Suite. Нужно ли активировать его, чтобы это можно было выполнить?
function.js
const nodemailer = require('nodemailer');
const serviceAccountRelease = require('./config/serviceAccountRelease');
const mailConfig = require('./config/mailConfig');
exports.sendMail = (subject, message, callback) => {
const authOptions = {
auth: {
type: 'OAuth2',
user: mailConfig.from, // serviceAccountRelease.client_email
serviceClient: serviceAccountRelease.client_id,
privateKey: serviceAccountRelease.private_key,
},
};
const transporterOptions = {
service: "gmail",
// host: 'smtp.gmail.com',
// port: 465,
// secure: true,
...authOptions
};
const transporter = nodemailer.createTransport(transporterOptions);
transporter.on('token', token => console.log(token));
const mailOptions = {
from: mailConfig.from, // serviceAccountRelease.client_email,
to: mailConfig.to,
subject: subject,
text: message
};
return transporter.sendMail(mailOptions, (error, response) => {
error ? console.error("Error:", error) : console.log("Info:", info);
transporter.close();
return callback ? callback(error, response) : {error, response};
});
};
Журнал консоли:
> var {sendMail} = require('./sendMail');
undefined
> sendMail("Subject","Message")
undefined
> Error: Error: unauthorized_client
at /Users/User/Developer/Project/functions/node_modules/nodemailer/lib/xoauth2/index.js:259:33
at PassThrough.<anonymous> (/Users/User/Developer/Project/functions/node_modules/nodemailer/lib/xoauth2/index.js:328:20)
at Object.onceWrapper (events.js:299:28)
at PassThrough.emit (events.js:210:5)
at PassThrough.EventEmitter.emit (domain.js:540:23)
at endReadableNT (_stream_readable.js:1200:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'EAUTH',
command: 'AUTH XOAUTH2'
}