Я использую 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
Я действительно не уверен, что я делаю здесь не так. Это из официальной документации для узла, здесь , которая содержит код запуска, который я использую.