Как добавить параметры в функции Gmail API с помощью NodejS - PullRequest
0 голосов
/ 26 января 2019

Я использую Gmail API для отправки электронных писем из формы. Я успешно могу отправить электронное письмо со следующей функцией:

function sendMessage(auth, callback) {
  const gmail = google.gmail({version: 'v1', auth});
  var base64EncodedEmail = btoa(`To: REDACTED\n` +
             `Subject: Test 2\n` +
             `Date:\r\n` + // Removing timestamp
             `Message-Id:\r\n` + // Removing message id
             `From:\r\n` + // Removing from
             `Name - Test 2\nSecond Line\n3rd Line\n\nThis is a test to see if the email was sent correctly.`) // Adding our actual message

  var mail = base64EncodedEmail;

  var request = gmail.users.messages.send({
    'auth': auth,
    'userId': 'me',
    'resource': { 
      'raw': mail
      }
    }, function(err, gmailMessage) {
      if (callback) {
        return callback(err, gmailMessage);
      }

      if (err) {
        console.log('Error while trying to send gmail message => ' + err);
      }
  });
}

Это называется так: authorize(JSON.parse(content), sendMessage);

Как видите, в него не передается параметр (я полагаю, что параметр auth, который он принимает, взят из функции authorize).

Все хорошо, но я явно не хочу жестко кодировать эту информацию в переменной base64EncodedEmail. У меня сейчас есть форма электронной почты, которая помещает информацию о форме в этот формат и кодирует ее с помощью base64, чтобы я мог передать ее в сыром виде. Но вот в чем дело, я не могу понять, как отредактировать свою функцию, чтобы позволить мне передать эту строку base64 в качестве параметра. В идеале это выглядело бы так:

function sendMessageTest(auth, mail, callback) {
  const gmail = google.gmail({version: 'v1', auth});
  //console.log(message);
  //var mail = message; // the b64 string
  console.log(callback);

  var request = gmail.users.messages.send({
    'auth': auth,
    'userId': 'me',
    'resource': { 
      'raw': mail
      }
    }, function(err, gmailMessage) {
      if (callback) {
        return callback(err, gmailMessage);
      }

      if (err) {
        console.log('Error while trying to send gmail message => ' + err);
      }
  });
}

Это я пытался назвать так:

authorize(JSON.parse(content), sendMessageTest('', base64EncodedEmail));

Я знаю, что параметр фактически передается успешно, потому что я могу получить строку B64 для записи на консоль внутри функции, но меня приветствует следующее сообщение об ошибке:

    callback(oAuth2Client);
    ^

TypeError: callback is not a function

Я действительно не уверен, что я делаю здесь не так. Это из официальной документации для узла, здесь , которая содержит код запуска, который я использую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...