Comment envoyez-vous des courriels des contrôleurs Angulaires sur la pile Mean.js?

J'utilise la pile Mean.js et j'ai des problèmes pour savoir comment envoyer des courriels à l'aide du paquetage nodemailer à l'intérieur d'un contrôleur AngularJS. J'ai le code suivant:

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); }); 

Mais je reçois l'erreur ReferenceError: nodemailer is not defined . J'ai essayé d'injecter la dépendance dans le contrôleur en utilisant:

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

Mais je n'ai que l'erreur Unknown provider: nodemailerProvider . J'ai également ajouté la dépendance à app / config / express.js en tant que nodemailer = require('nodemailer') , mais toujours pas de chance.

Je vois dans le package npm nodemailer / src / nodemailer.js les lignes suivantes:

 function Nodemailer(transporter) { ... 

et

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

Alors je suppose que je pourrais accéder au package via un objet Nodemailer global, ainsi: Nodemailer.createTransport(...) , mais c'est aussi indéfini.

Merci de votre aide!

Je pense que Nodemailer doit fonctionner sur le côté serveur.

Il suffit de déclencher l'envoi avec une demande $http de angular.

Vous pouvez trouver un exemple ici

Si vous obtenez une erreur de référence, vérifiez que vous avez installé nodemailer correctement avec npm install nodemailer --save .

Dans votre code, vous ne pouvez pas injecter un nodemailer dans un contrôleur angulaire car ce n'est pas un service ou un fournisseur.

Vous avez 2 options: –

  1. En supposant qu'il soit juste disponible en tant que paquet de noeuds et que vous l'avez déjà installé, vous pouvez inclure le script dans votre fichier html à partir du dossier node_modules, de sorte que nodemailer soit disponible dans votre application en tant qu'objet global. Personnellement, je n'utiliserai pas cette approche et prendra la 2ème approche.

  2. C'est l'option préférée: créez un point d'extrémité http sur votre serveur de noeud qui effectue le bit d'envoi via nodemailer. Ensuite, envoyez une requête http au point final pour faire ce que vous voulez.

Je pense que Nodemailer doit fonctionner sur le côté serveur.

Il suffit de déclencher l'envoi avec une demande $ http de angular.

Vous pouvez trouver un exemple ici

Si vous obtenez une erreur de référence, vérifiez que vous avez installé nodemailer correctement avec npmnn nodemailer npm –save.