【问题标题】:Sending emails from node server fails when using forever永久使用时从节点服务器发送电子邮件失败
【发布时间】:2015-05-16 00:18:34
【问题描述】:

我有一个运行 Node 的 API 服务器和以下添加用户功能:

add: function (userArray, onSuccess, onError) {
userArray.forEach(function (user) {
    var length = 8,
        charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
        retVal = "";
    for (var i = 0, n = charset.length; i < length; ++i) {
        retVal += charset.charAt(Math.floor(Math.random() * n));
    }

    var password = retVal;
    var salt = bcrypt.genSaltSync(10);
    var password = bcrypt.hashSync(password, salt);
    user.user_type_id = user.user_type.id;
    if (user.title) {
        user.title_id = user.title.id;
    }
    user.division_id = user.division.id;
    user.password = password;
    user.user_password = retVal;
    user.image_path = 'img/AdamProfil.png';
});

emailTemplates(templatesDir, function (err, template) {
    if (err) {
        console.log(err);
    } else {
        var transportBatch = nodemailer.createTransport(smtpTransport({
            host: 'smtp.mail.dk',
            secureConnection: true,
            port: 587,
            tls: {
                rejectUnauthorized: false
            },
            auth: {
                user: 'my@mail.com',
                pass: 'myPassword'
            }
        }));

        var Render = function(locals) {
            this.locals = locals;
            this.send = function(err, html, text) {
                if (err) {
                    console.log(err);
                } else {
                    transportBatch.sendMail({
                        from: '*** <support@mymail.dk>',
                        to: locals.username,
                        subject: 'Din adgangskode til ***!',
                        html: html,
                        // generateTextFromHTML: true,
                        text: text
                    }, function(err, responseStatus) {
                        if (err) {
                            console.log(err);
                        } else {
                            console.log(responseStatus.message);
                        }
                    });
                }
            };
            this.batch = function(batch) {
                batch(this.locals, templatesDir, this.send);
            };
        };

        // Send multiple emails
        template('password', true, function(err, batch) {
            for(var user in userArray) {
                var render = new Render(userArray[user]);
                render.batch(batch);
            }
        });
    }
});

userArray.forEach(function(user){
    User.create(user)
        .then(function(createdUser) {
            user.profile.user_id = createdUser[null];

            Profile.create(user.profile);
        });
    });
onSuccess(userArray);
}

现在,当我使用控制台运行我的 server.js 文件并写入 node server.js 并运行此函数时,它会正确地向目标发送一封电子邮件(成功!?)不,因为当我使用 forever start server.js 运行它并运行确切的具有完全相同参数的相同功能不会发送电子邮件。

这到底是怎么回事?:)

【问题讨论】:

  • 虽然有人可能会根据经验回答,但似乎除了作者之外的任何人都没有办法真正测试并深入研究它......它不是SSCCE;如果您需要它一直运行而不需要永远调用,那么总是有 upstartsupervisord
  • 您没有提供太多信息。你用的是什么版本的forever?永久日志中是否有任何相关消息?你有没有尝试过任何麻烦?如果有,结果如何?

标签: javascript node.js email forever


【解决方案1】:

仅查看您的代码,我看到了一个 templatesDir 变量。当您使用forever 运行时,我猜想这是不同的,或者以意想不到的方式发生变化。

永远查看this issue。您是否曾经引用过绝对路径或process.cwd()

值得一试,祝你好运!

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2018-05-22
    • 2015-06-23
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2011-05-18
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多