Gmail-API für das versenden von E-mails in Node.js
Haftungsausschluss:
- Ich habe die Google-eigenen Node.js quickstart guide und erfolgreich eine Verbindung herstellen und verwenden Sie die
gmail.users.labels.list()
Funktionalität. - Ich habe für die Fragen/Antworten hier, wie diese eine (das ist nicht mit der Node.js API bin ich zu Fragen), oder diese eine (ähnlich diese eine), die augenscheinlich das gleiche problem habe ich auch aber die Lösung funktioniert nicht.
Mein problem:
Bei der Verwendung Google Node.js API ich bekomme einen Fehler beim Versuch zu senden eine E-Mail. Der Fehler ist:
{
"code": 403,
"errors": [{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}]
}
Mein setup:
fs.readFile(secretlocation, function processClientSecrets(err, content) {
if (err) {
console.log('Error loading client secret file: ' + err);
return;
}
authorize(JSON.parse(content), sendMessage);
});
function sendMessage(auth) {
var raw = makeBody('[email protected]', '[email protected]', 'subject', 'message test');
gmail.users.messages.send({
auth: auth,
userId: 'me',
message: {
raw: raw
}
}, function(err, response) {
res.send(err || response)
});
}
Die Funktion processClientSecrets
ist aus dem Google-Anleitung, die ich oben erwähnt. Es liest meine .json
- Datei, das hat mein access_token
und refresh_token
. Die makeBody
- Funktion ist, um eine codierte Textteil.
In der config variabels habe ich auch:
var SCOPES = [
'https://mail.google.com/',
'https://www.googleapis.com/auth/gmail.modify',
'https://www.googleapis.com/auth/gmail.compose',
'https://www.googleapis.com/auth/gmail.send'
];
, Warum es funktionieren sollte:
- der Autorisierungs-Prozess funktioniert für die
gmail.users.labels.list()
Methode. - den Nachrichtentext ich Teste funktioniert, wenn ich test es bei Google-test-Seite.
Meine Frage:
Ist mein setup falsch? Gab es änderungen in der API? Was bin ich?
- Stellen Sie sicher, dass Sie die erforderliche Bereiche berechtigt: developers.google.com/gmail/api/v1/reference/users/messages/...
- Ich, aber immer noch nicht funktioniert, danke für den Hinweis. Ich hatte es auch zum testen in die Google-tool. Derzeit habe ich diese Auth-Bereiche statt:
https://mail.google.com/, gmail.compose, gmail.modify, gmail.send
- Gehen Sie zu der Oauth-Spielplatz, Autorisierung der Gmail-Bereiche, und nehmen Sie die
access token
undrefresh token
und setzen Sie diese in Ihre.json
-Datei. Haben Sie immer noch eine Fehlermeldung angezeigt? - vielen Dank für die überprüfung dieses heraus. Tat Schritt, die Sie vorgeschlagen, und jetzt ist der Fehler anders aus:
{"code":400,"errors":[{"domain":"global","reason":"invalidArgument","message":"'raw' RFC822 payload message string or uploading message via /upload/* URL required"}]}
- Hmm, das ist ärgerlich. Haben Sie versucht, die
raw
-string url-safe (ersetzen Sie alle+
mit-
und alle/
mit_
)? - Verdammt 🙁 Dann weiß ich nicht. Hoffentlich jemand anderes kann chime in.
- gefunden zu meinem problem(en). Vielen Dank für die überprüfung dieses!
- Super!!! Kein problem. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, also ich fand das problem(s).
Problem #1
Während der folgenden Node.js quickstart guide das Beispiel in diesem tutorial hat
Und als ich die
.json
wie das aussieht:diese Token, wo produziert unter Berücksichtigung nur die
auth/gmail.readonly
Umfang in der tutorial-code.Gelöscht da ich den ersten
.json
, Hinzugefügt, die Bereiche, die aus meiner endgültigen Umfang array (i posted in Frage) und lief die tutorial-setup erneut aus, erhalten Sie ein neues token.Problem #2
In das übergebene Objekt der API-ich war senden:
aber das ist falsch,
message
- Taste aufgerufen werden sollresource
.Endgültige setup:
Dies ist, was ich Hinzugefügt, um das tutorial den code:
Und rufen Sie alles mit:
Content-Type: text/html;
stattContent-Type: text/plain;
.'raw' RFC822 payload message string or uploading message via /upload/* URL required [400].
. Dies kann behoben werden, indem die Aktualisierung von google-auth-api auf die neueste verstion. github.com/google/google-api-nodejs-client/issues/979const gmail = google.gmail({version: 'v1', auth});
imsendMessage()
. Auchres
imsendMessage()
wurde nicht definiert. Nach kommentieren Sie es aus, bekam ich diese Fehlermeldung:Error: Insufficient Permission
. Wer sonst mit diesem Problem?Also für alle, die sich bei diesen versuchen, um eine test-E-Mail, gesendet von deren API, aber kann man diese Arbeit hier ist, was du tun musst:
Schritt 1:
Ersetzen Sie die
mit dabei:
Schritt 2:
Am Ende von googles Beispiel-code, fügen Sie diese:
Schritt 3(Optional)
Löschen Sie diese Zeile:
Und diese:
(So dass Sie don T get die random-Beschriftungen in der Konsole)