nodemailer в мобильной службе Azure не работает

Я пытаюсь отправить почту с помощью nodemailer. Сценарий работает на локальном компьютере, но я не могу включить nodemailer в мобильную службу Azure. Добавлен 'nodemailer': "*" в мой package.json, но все еще не может его включить.

Журналы говорят

TypeError: невозможно прочитать свойство «прототип» неопределенного

Я закомментировал полную логику, но ошибка осталась. Наконец-то закомментировано var nodemailer = require('nodemailer');

и ошибка исчезла.


person ribhu    schedule 05.11.2014    source источник
comment
Используете ли вы те же (или сопоставимые) версии node? Вы используете nodemailer 0.7 локально, но 1.0 удаленно? Можете ли вы дать полную трассировку стека?   -  person RickN    schedule 05.11.2014
comment
Ты прав. Версия Node на моей машине 0.10.29, а на моей машине 0.8.28. Есть идеи, как обновить версию nodejs на azure-mobile-service? Или как установить зависимости, совместимые с этой версией. Я проверил версию nodemailer, и она одинакова (1.3.0) на обеих машинах.   -  person ribhu    schedule 05.11.2014
comment
Не могу помочь вам там, извините. По словам разработчика, nodemailer 0.7.1 является последней версией, совместимой с 0.8. Вам нужно будет внести некоторые изменения в свой код - nodemailer 1.x не полностью совместим с версиями 0.x.   -  person RickN    schedule 05.11.2014
comment
Вы не можете обновить версию узла в Azure Mobile Services. Он имеет жесткую зависимость от 0.8.28. Эта зависимость исправлена ​​в новом продукте, но предварительная версия для Node.js еще не выпущена, и вам придется перенести базу кода на новый SDK.   -  person Chris Anderson-MSFT    schedule 12.08.2015


Ответы (1)


Чтобы обойти эту проблему, вам необходимо установить более старую версию nodemailer, чтобы она могла работать в мобильной службе Azure. Я добавил версию 0.7.1 nodemailer в package.json для Azure, затем внес необходимые изменения в код, и у меня все заработало.

Изменения кода, которые вам нужно сделать для поддержки 0.7.1, очень незначительны, вот полный код из документации:

var nodemailer = require("nodemailer");

// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "[email protected]",
        pass: "userpass"
    }
});

// setup e-mail data with unicode symbols
var mailOptions = {
    from: "Fred Foo ✔ <[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
smtpTransport.sendMail(mailOptions, function(error, response){
    if(error){
        console.log(error);
    }else{
        console.log("Message sent: " + response.message);
    }

    // if you don't want to use this transport object anymore, uncomment following line
    //smtpTransport.close(); // shut down the connection pool, no more messages
});

документация Nodemailer 0.7.1

person Sirar Salih    schedule 30.08.2015