【问题标题】:NodeMailer - G-Suite - Service Account - Send as Group EmailNodeMailer - G-Suite - 服务帐户 - 作为组电子邮件发送
【发布时间】: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'
}

设置:

我有以下设置:

  1. 拥有一位用户 (User@MyDomain.com) 的 G-Suite(基本)帐户
  2. 在 Google Cloud Console 和域范围委派(-> 服务帐户)中启用 Gmail API
  3. 从第 2 步授予服务帐户的相关权限
  4. 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


【解决方案1】:

在这篇文章中查看答案:send a group email address with Nodemailer with G Suite OAuth2

我猜你没有像邮件中那样设置发送。

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 2019-11-06
    • 2018-03-15
    • 2018-06-26
    • 1970-01-01
    • 2018-02-19
    • 2017-09-23
    • 2021-06-04
    • 2019-10-03
    相关资源
    最近更新 更多