Nodemailer: oauth gmail-Fehler: { [Fehler: nicht autorisierter_client] Code: 'EAUTH' }

Erstellt am 13. Feb. 2016  ·  6Kommentare  ·  Quelle: nodemailer/nodemailer

Ich habe mich mit Google Oauth eingerichtet. Ich habe in das Feld accessToken eingefügt, was von der Anmeldung mit Google zurückgegeben wurde. Ich komme nicht über diesen Fehler { [Error: unauthorized_client] code: 'EAUTH' } .

var express = require('express'),
    nodemailer = require('nodemailer'),
    xoauth2 = require('xoauth2'),
    router = express.Router();

// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        xoauth2: xoauth2.createXOAuth2Generator({
            user: "[email protected]",
            clientId: '925......4cui6indku1jgr7g7kpg6.apps.googleusercontent.com',
            clientSecret: "Y1l..........N7xkKd1x",
            refreshToken: "1/LFVq94wxy6uWMP............QqEWxIgOrJDtdun6zK6XiATCKT",
            accessToken: 'eyJ0eXAiOiJKV....................Zxd4uAPJlZqAdJwcHO3prmVSOtTo4PvEXkzhFJJo'
        })
    }
});

/*

 |--------------------------------------------------------------------------
 | POST /sendEmails
 |--------------------------------------------------------------------------
 */
 router.post('/sendToList', function(req, res){
    console.log(req.body);

    // setup e-mail data with unicode symbols
    var mailOptions = {
        from: '[email protected]', // sender address
        to: '[email protected], [email protected]', // list of receivers
        subject: 'Hello ✔', // Subject line
        text: 'Hello world 🐴', // plaintext body
        html: '<b>Hello world 🐴</b>' // html body
    };

    // send mail with defined transport object
    transporter.sendMail(mailOptions, function(error, info){
        if(error){
            return console.log(error);
        }
        console.log('Message sent: ' + info.response);
    });

 });

 module.exports = router;

Hilfreichster Kommentar

Für alle, die Probleme mit "unauthorized_client" haben, gilt Folgendes:

Verwenden eines Dienstkontos
Haben Sie ein Google Suite-Konto angehängt
Habe alle 2-Bein-Anweisungen befolgt unter: https://nodemailer.com/smtp/oauth2/#oauth -2lo
Ich habe es endlich nach der Dokumentation hier gelöst: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

Im Wesentlichen geht es
https://admin.google.com/ yourgsuitedomain.com /ManageOauthClients
Hinzufügen einer Client-ID (aus dem Dienstkonto) und eines Bereichs: https://mail.google.com/ (letzter Schrägstrich wichtig)

Danach funktionierten E-Mails.

Alle 6 Kommentare

Kann hier nicht viel helfen, Gmail ist wirklich wählerisch. Manchmal muss der Client erneut autorisiert werden, manchmal fehlt der richtige Bereich ( "https://mail.google.com/" ). Nodemailer gibt das Zugriffstoken einfach unverändert an Gmail weiter oder generiert das nächste mithilfe des Aktualisierungstokens, ändert jedoch keine Berechtigungen usw.

Gemischter Segen, froh, dass Google Mail eine so gute Sicherheit bietet, aber eine Qual für Entwickler!

Hallo @connor11528 hast du das Problem

Für alle, die Probleme mit "unauthorized_client" haben, gilt Folgendes:

Verwenden eines Dienstkontos
Haben Sie ein Google Suite-Konto angehängt
Habe alle 2-Bein-Anweisungen befolgt unter: https://nodemailer.com/smtp/oauth2/#oauth -2lo
Ich habe es endlich nach der Dokumentation hier gelöst: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

Im Wesentlichen geht es
https://admin.google.com/ yourgsuitedomain.com /ManageOauthClients
Hinzufügen einer Client-ID (aus dem Dienstkonto) und eines Bereichs: https://mail.google.com/ (letzter Schrägstrich wichtig)

Danach funktionierten E-Mails.

@AdamCraven

Vielen Dank für die obige Nachricht.
Ich habe Probleme mit der OAuth-Methode 2LO zum Senden von Google Mail über den Nodemailer behoben. (die weniger sicheren und 3LO Methoden funktionieren, aber für die einfachste Replikation versuche ich, die 2LO Methode zum Laufen zu bringen)

Mir ist aufgefallen, dass Sie ein G Suite-Konto angehängt haben - meine Einrichtung erfolgt über Firebase (und ich führe den Nodemailer-Code in Firebase Cloud Functions mit einem Dienstkonto aus, das mit einem Firebase-Projekt verbunden ist) und frage mich, ob meine Probleme darauf zurückzuführen sind Ich habe kein G Suite-Konto.

Vielen Dank für zusätzliche Informationen, die Sie haben könnten!

Ich konnte versuchen, mich für die G Suite für die Domain anzumelden, die mit unserem Firebase-Webprojekt verknüpft ist, und das scheint das Problem zu lösen.
Danke nochmal für den Tipp oben!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen