【发布时间】:2020-10-20 19:26:43
【问题描述】:
问题:
我想通过 Gmail 和服务帐户从群组电子邮件发送电子邮件。但是,当尝试通过 Group@MyDomain.com 而不是 User@MyDomain.com 发送时,我得到:
Error: unauthorized_client
at /Users/fabianbosler/Projects/fb/fb-flow-app/server/node_modules/nodemailer/lib/xoauth2/index.js:264:33
at PassThrough.<anonymous> (/Users/fabianbosler/Projects/fb/fb-flow-app/server/node_modules/nodemailer/lib/xoauth2/index.js:333:20)
at Object.onceWrapper (events.js:421:28)
at PassThrough.emit (events.js:315:20)
at PassThrough.EventEmitter.emit (domain.js:547:15)
at endReadableNT (_stream_readable.js:1201:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EAUTH',
command: 'AUTH XOAUTH2'
}
设置:
我有以下设置:
- 拥有一位用户 (User@MyDomain.com) 的 G-Suite(基本)帐户
- 在 Google Cloud Console 和域范围委派(-> 服务帐户)中启用 Gmail API
- 从第 2 步授予服务帐户的相关权限
- User@MyDomain.com 是经理的组 (Group@MyDomain.com)
此设置可通过服务帐户以 User@MyDomain.com(来自第 1 步)的身份发送电子邮件:
const conf = require('../config/config');
import nodemailer from 'nodemailer';
import { to } from 'await-to-js';
const SENDER = 'User@MyDomain.com'
const SENDER_NAME = 'User'
const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: SENDER,
serviceClient: conf.GMAIL_CLIENT_ID,
privateKey: conf.GMAIL_CLIENT_PRIVATE_KEY,
},
});
transporter.on('token', (token) => {
console.log('A new access token was generated');
console.log('User: %s', token.user);
console.log('Access Token: %s', token.accessToken);
console.log('Expires: %s', new Date(token.expires));
});
export default async (sendTo, content) => {
return new Promise(async (resolve, reject) => {
let err, verify, result;
const contacts = {
from: {
name: HUMAN_READABLE_NAME,
address: SENDER,
},
to: sendTo,
};
const email = Object.assign({}, content, contacts);
[err, verify] = await to(transporter.verify());
if (err) {
console.log(err);
return reject(`verification failed: ${err}`);
}
[err, result] = await to(transporter.sendMail(email));
if (err) {
console.log(`sending failed: ${err}`);
return reject(err);
}
return resolve(result);
});
};
【问题讨论】:
-
我遇到了类似的问题,得到“需要 530-5.7.0 身份验证”。你解决了这个问题吗? TIA
标签: node.js gmail nodemailer google-workspace service-accounts