Моя программа nodejs не может отправлять сообщения с помощью API Gmail.
Решение от Gmail API для отправки писем в Node.js у меня не работает.
Я кодирую электронное письмо с помощью
var {google} = require('googleapis');
// to and from = "some name <blaw.blaw.com"
function makeBody(to, from, subject, message) {
var str = ["Content-Type: text/plain; charset=\"UTF-8\"\r\n",
"MIME-Version: 1.0\r\n",
"Content-Transfer-Encoding: 7bit\r\n",
"to: ", to, "\r\n",
"from: ", from, "\r\n",
"subject: ", subject, "\r\n\r\n",
message
].join('');
encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');
return encodedMail;
}
Затем перейдите в проводник Google API https://developers.google.com/apis-explorer/#p/ введите gmail.users.messages.send и строку, сгенерированную из вышеуказанного make_body.
Электронное письмо будет успешно отправлено. Итак, я знаю, что указанная выше кодировка в порядке.
Когда моя программа пыталась отправить, используя следующее, она терпит неудачу с ошибкой
Ошибка: строка сообщения о полезной нагрузке 'raw' RFC822 или загрузка сообщения через / upload / * требуется URL-адрес
function sendMessage(auth) {
var gmail = google.gmail('v1');
var raw = makeBody('john g <[email protected]>', 'john g<[email protected]>', 'test subject', 'test message #2');
gmail.users.messages.send({
auth: auth,
userId: 'me',
resource: {
raw: raw
}
}, function(err, response) {
console.log(err || response)
});
}
Токен аутентификации хорош, так как я могу вызвать gmail.users.labels.list и использую ту же авторизацию при использовании проводника API.
Q1: Кто-нибудь знает, почему вышеперечисленное не работает?
Q2: Gmail API для отправки писем в Node .js не объясняет, почему необработанное сообщение электронной почты заключено в поле ресурса. Я пробовал просто сырой и не помогло.
Это не удается.
gmail.users.messages.send({
auth: auth,
userId: 'me',
resource: {
raw: raw
}
}, function(err, response) {
console.log(err || response)
});
и так делает
gmail.users.messages.send({
auth: auth,
userId: 'me',
raw: raw
}, function(err, response) {
console.log(err || response)
});
как и этот GMAIL API для отправки электронной почты с вложением
gmail.users.messages.send({
auth: auth,
userId: 'me',
data: raw
}, function(err, response) {
console.log(err || response)
});
Кто-нибудь знает, где описано, как передать «запрошенное тело», которое запрашивает api explorer?
Q3: Почему API Google требует замены в кодировке base64?
Я пробовал кодировать с помощью
const Base64 = require("js-base64").Base64
var encodedMail = Base64.encode(str);
Когда я загружаю это в проводник API, я получаю сообщение об ошибке
"message": "Недопустимое значение для ByteString: