Отправка электронной почты из G-Suite на сервере nodejs с помощью API Gmail возвращает неверный запрос 400

Я хочу отправить электронное письмо из своей учетной записи G-Suite на сервере nodejs с помощью API Gmail. Я знаю, что с учетными данными все в порядке, потому что у меня нет проблем с получением сообщений / ярлыков из моего G-Suite.

это мой код:

const {GoogleAuth} = require('google-auth-library');

async sendMessage(to, from, subject, message) {
   let raw = makeBody(to, from, subject, message);
   let url = `https://www.googleapis.com/gmail/v1/users/${<MyEmail>}/messages/send`

   let option = {
       method: 'POST',
       headers: {
           'Content-Type': 'message/rfc822',
       },
       body: raw,
   };

  let client = await getClient()
  client.request({url, option}, (res, err) => {
    if (err) {
        console.log('error', err);
    } else {
        console.log('res');
    }
  });
}

async getClient() {
  try {
    let auth = new GoogleAuth({
        credentials: {
            client_email: <clientEmail>,
            private_key: <privateKey>,
        },
        scopes: [
            "https://mail.google.com/",
            "https://www.googleapis.com/auth/gmail.compose",
            "https://www.googleapis.com/auth/gmail.modify",
            "https://www.googleapis.com/auth/gmail.send"],
        clientOptions: {subject: <myEmail>}
    });
    const client = await auth.getClient();
    if (client)
        return client
  } catch (e) {
     console.log('error accured while getClient', e);
     return e;
  }
}

Я добавил области отправить, составить и изменить в Admin Google, к сожалению, я получил этот 400 неверный запрос:

 error [
    {
       domain: 'global',
       reason: 'invalidArgument',
       message: 'Invalid id value'
    }
 ]

person Nan fish    schedule 05.07.2020    source источник


Ответы (1)


Используйте библиотеку googleapis.

const {google} = require('googleapis');
const gmail = google.gmail('v1');

async sendMessage(to, from, subject, message) {
  let raw = makeBody(to, from, subject, message);

  let client = await auth.getClient()
  google.options({
    auth: client
  });

  const res = await gmail.users.messages.send({
    userId: 'me',
    requestBody: {
      raw: raw,
    },
  });
}

person mabruk    schedule 05.07.2020
comment
Прохладный! Ваш ответ решил мою проблему. спасибо миллион. - person Nan fish; 05.07.2020