Как вы отправляете электронные письма с контроллеров Angular в стеке Mean.js?

Я использую стек Mean.js, и у меня возникают проблемы с выяснением того, как отправлять электронные письма с помощью пакета nodemailer из внутри контроллера AngularJS. У меня есть следующий код:

var mailOptions = {
    from: 'Hello <[email protected]>',
    to: '[email protected]',
    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(...), но это также не определено.

Спасибо за вашу помощь!


person Steven Bennett    schedule 06.06.2015    source источник
comment
В вашем коде вы не можете внедрить nodemailer в контроллер angular, потому что это не служба или провайдер.   -  person Abhishek Jain    schedule 06.06.2015


Ответы (3)


Я думаю, что Nodemailer должен работать на стороне сервера.

Просто запустите отправку с помощью запроса $http от angular.

Пример можно найти здесь

Если вы получаете справочную ошибку, убедитесь, что вы правильно установили nodemailer с npm install nodemailer --save.

person AWolf    schedule 06.06.2015

В вашем коде вы не можете внедрить nodemailer в контроллер angular, потому что это не служба или провайдер.

У вас есть 2 варианта: -

  1. Предполагая, что он доступен только как пакет узла, и вы его уже установили, вы можете включить скрипт в свой html-файл из папки node_modules, и таким образом nodemailer будет доступен в вашем приложении как глобальный объект. Лично я не буду использовать этот подход и выберу второй подход.

  2. Это предпочтительный вариант — создайте конечную точку http на вашем сервере node, которая выполняет отправку почты с помощью nodemailer. Затем отправьте HTTP-запрос в конечную точку, чтобы сделать то, что вы хотите.

person Abhishek Jain    schedule 06.06.2015

Я думаю, что Nodemailer должен работать на стороне сервера.

Просто запустите отправку с помощью запроса $http от angular.

Вы можете найти пример здесь

Если вы получаете справочную ошибку, убедитесь, что вы правильно установили nodemailer с помощью npm install nodemailer --save.

person Ash    schedule 01.07.2017