2014-02-09 9 views

Antwort

13

Ich habe mit diesem Modul: https://github.com/andris9/Nodemailer

Aktualisiert Beispiel (unter Verwendung von Express- und nodemailer), die aus dem Dateisystem bekommen index.jade Vorlage enthält und als E-Mail zu senden:

var _jade = require('jade'); 
var fs = require('fs'); 

var nodemailer = require("nodemailer"); 

var FROM_ADDRESS = '[email protected]'; 
var TO_ADDRESS = '[email protected]'; 

// create reusable transport method (opens pool of SMTP connections) 
var smtpTransport = nodemailer.createTransport("SMTP",{ 
    service: "Gmail", 
    auth: { 
     user: "[email protected]", 
     pass: "PASSWORD" 
    } 
}); 

var sendMail = function(toAddress, subject, content, next){ 
    var mailOptions = { 
    from: "SENDERS NAME <" + FROM_ADDRESS + ">", 
    to: toAddress, 
    replyTo: fromAddress, 
    subject: subject, 
    html: content 
    }; 

    smtpTransport.sendMail(mailOptions, next); 
}; 

exports.index = function(req, res){ 
    // res.render('index', { title: 'Express' }); 

    // specify jade template to load 
    var template = process.cwd() + '/views/index.jade'; 

    // get template from file system 
    fs.readFile(template, 'utf8', function(err, file){ 
    if(err){ 
     //handle errors 
     console.log('ERROR!'); 
     return res.send('ERROR!'); 
    } 
    else { 
     //compile jade template into function 
     var compiledTmpl = _jade.compile(file, {filename: template}); 
     // set context to be used in template 
     var context = {title: 'Express'}; 
     // get html back as a string with the context applied; 
     var html = compiledTmpl(context); 

     sendMail(TO_ADDRESS, 'test', html, function(err, response){ 
     if(err){ 
      console.log('ERROR!'); 
      return res.send('ERROR'); 
     } 
     res.send("Email sent!"); 
     }); 
    } 
    }); 
}; 

I würde wahrscheinlich den Mailer Teil zu seinem eigenen Modul bewegen, aber ich habe alles hier aufgenommen, so dass Sie alles zusammen sehen können.

+0

Ich habe es auch verwendet, aber es kann keine komplizierte Vorlage gesendet werden – user3044147

+1

Was meinst du mit komplizierten Vorlage? Solange Ihre Vorlage in eine Zeichenfolge kompiliert wird, sehe ich nicht, warum es nicht funktionieren würde. – Ryan

+0

Ich bekomme diese https://github.com/niftyletcuit/node-email-templates. Versuchen Sie – user3044147

4

können Sie verwenden nodemailer und nodemailer-express-handlebars Module dies zu tun:

var nodemailer = require('nodemailer'); 
var mailerhbs = require('nodemailer-express-handlebars'); 

var mailer = nodemailer.createTransport({ 
    service: Gmail, // More at https://nodemailer.com/smtp/well-known/#supported-services 
    auth: { 
     user: [[email protected]], // Your email id 
     pass: [PASSWORD] // Your password 
    } 
}); 

mailer.use('compile', mailerhbs({ 
    viewPath: 'templates/default/emails', //Path to email template folder 
    extName: '.hbs' //extendtion of email template 
})); 

In Router senden Sie verwenden können:

mailer.sendMail({ 
      from: 'Your name [email protected]', 
      to: user.local.email, 
      subject: 'Reset your password', 
      template: 'password_reset', //Name email file template 
      context: { // pass variables to template 
       hostUrl: req.headers.host, 
       customeName: user.info.firstname + ' ' + user.info.lastname, 
       resetUrl: req.headers.host + '/users/recover/' + token, 
       resetCode: token 
      } 
     }, function (err, response) { 
      if (err) { 
       res.send('Error send email, please contact administrator to best support.'); 
      } 
      res.send('Email send successed to you email' + req.body.email + '.'); 
      done(err, 'done'); 
     }); 

in HBS-Vorlage können Sie Variablen verwenden:

{{var from context}} 

hoffe, dass dir Code-Blöcke helfen.

+0

ist es notwendig, extName nur .hbs zu geben? kann ich .html? –

+0

Sie können Verwenden Sie die Syntax der 'engine' Vorlage, um eine Variable in' .html' anzuzeigen. –

+0

ich benutze html view engine. kann nicht auf kontextvariable in html-datei zugreifen. wie kann ich das tun? –