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

How do you send emails from Angular controllers on the Mean.js stack?

我正在使用 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(...),但这也是未定义的。

感谢您的帮助!

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

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

你可以找一个例子here

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

在您的代码中,您不能在 angular 控制器中注入 nodemailer,因为它不是服务或提供程序。

您有 2 个选择:-

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

  2. 这是首选选项 - 在您的节点服务器上创建一个 http 端点,它使用 nodemailer 执行邮件位。然后发送一个http请求到端点做你想做的。

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

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

您可以在此处找到示例

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