如何从Mean.js堆栈上的Angular控制器发送电子邮件?

时间:2015-06-06 11:46:36

标签: javascript angularjs meanjs nodemailer

我正在使用Mean.js堆栈,我在解决如何使用AngularJS控制器内部的nodemailer包发送电子邮件时遇到问题。我有以下代码:

var mailOptions = {
    from: 'Hello <hello@email.com>',
    to: 'email@gmail.com',
    subject: 'email subject',
    text: 'email body',
    html: 'html body'
};

var smtpTransport = nodemailer.createTransport(config.mailer.options);
smtpTransport.sendMail(mailOptions, function(err) {
    if (!err) {
        res.send({
            message: 'Email has been sent'
        });
    }

    done(err);
});

但我收到错误ReferenceError: nodemailer is not defined。我尝试使用以下方法将依赖项注入控制器:

angular.module('offers').controller('OffersController', ['$scope', '$stateParams', '$location', 'Authentication', 'Offers', 'nodemailer',
    function($scope, $stateParams, $location, Authentication, Offers, nodemailer) {
    ...

但我只收到错误Unknown provider: nodemailerProvider。我还将app / config / express.js的依赖项添加为nodemailer = require('nodemailer'),但仍然没有运气。

我在npm包nodemailer / src / nodemailer.js中看到以下几行:

function Nodemailer(transporter) {
...

module.exports.createTransport = function(transporter)
...

所以我假设我可以通过全局Nodemailer对象访问包,如下所示:Nodemailer.createTransport(...),但这也是未定义的。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我认为Nodemailer必须在服务器端运行。

只需使用角度$http请求触发发送即可。

您可以找到示例here

如果您收到参考错误,请检查您是否已使用nodemailer正确安装npm install nodemailer --save

答案 1 :(得分:0)

在您的代码中,您无法在角度控制器中注入nodemailer,因为它不是服务或提供者。

您有两种选择: -

  1. 假设它只是作为节点包提供并且您已经安装它,您可以将该脚本包含在node_modules文件夹的html文件中,这样,nodemailer将在您的应用程序中作为全局对象使用。就个人而言,我不会采用这种方法,采取第二种方法。

  2. 这是首选选项 - 在节点服务器上创建一个使用nodemailer执行邮件位的http端点。然后向终点发送http请求以执行您想要的操作。

答案 2 :(得分:-1)

我认为Nodemailer必须在服务器端运行。

只需使用angular的$ http请求触发发送。

你可以在这里找到一个例子

如果您收到引用错误,请检查您是否已使用npm install nodemailer --save正确安装了nodemailer。