{"code": "ECONNECTION", "command": "CONN"} в нодмейлере - PullRequest
0 голосов
/ 02 марта 2019

Я создал облачную функцию Firebase HTTP для отправки почты при отправке запроса GET по сгенерированной ссылке, я использую nodemailer для отправки простой почты.Я использую идентификатор клиента, Client Secret и токен обновления, сгенерированный из Google OAuth 2.0 Playground, и генерирую токен доступа для аутентификации Gmail.

    const functions = require('firebase-functions');
    const user_name     = 'XXXXXXXX@gmail.com';
    const refresh_token = '1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    let access_token  = '';
    const client_id     = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    const client_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXX';

    const email_to = 'YYYYYYYYYYYYYYY@gmail.com';

    const nodemailer = require('nodemailer');

    let transporter = nodemailer
        .createTransport({
            service: 'Gmail',
            auth: {
                type: 'OAuth2',
                clientId: client_id,
                clientSecret: client_secret
            }
        });
    transporter.on('token', token => {
        console.log('A new access token was generated');
        console.log('User: %s', token.user);
        access_token = token.accessToken
        console.log('Access Token: %s', token.accessToken);
        console.log('Expires: %s', new Date(token.expires));
    });
    // setup e-mail data with unicode symbols
    let mailOptions = {
        from    : user_name, // sender address
        to      : email_to, // list of receivers
        subject : 'Hello ✔', // Subject line
        text    : 'Hello world ?', // plaintext body
        html    : '<b>Hello world ?</b>', // html body

        auth: {
            user         : user_name,
            refreshToken : refresh_token,
            accessToken  : access_token,
            expires      : 1494388182480
        }
    };

    // send mail with defined transport object
    exports.mail = functions.https.onRequest((req, res) => {
        transporter.sendMail(mailOptions).then( r => {
            return res.send(error);
        }).catch(e =>{
            return res.send(e);
        });
    });

Я получаю сообщение об ошибке: {"code": "ECONNECTION", "команда": "CONN"} при отправке запроса GET от Почтальона

я обнаружил, что transporter.on('token', ()=>{}) ничего не делает, он полностью экранирован моим кодом.

Тогда каксоздать access_token?

1 Ответ

0 голосов
/ 04 марта 2019

Очевидно, что nodemailer не работает в облачной функции firebase.

Это работало, когда я запускался локально с express

...