nodemailer в мобилната услуга на azure не работи

Опитвам се да изпратя имейл с nodemailer. Скриптът работи на локална машина, но не мога да включа nodemailer в мобилната услуга на azure. Добавен е 'nodemailer': "*" в моя package.json, но все още не мога да го включа.

Логс казва

TypeError: Не може да се прочете свойството „прототип“ на undefined

Коментирах пълната логика, но грешката все още беше там. Най-накрая коментиран 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. Има силна зависимост от 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