Sie sind auf Seite 1von 4

babo o .co m .br http://www.babo o .co m.

br/so ftware/pro gramacao -desenvo lvimento /no de-js-enviando -email-co m-no demailer/

Enviando email com NodeMailer |


Babo o

Ol, caros amigos. Neste artigo aprenderemos como enviar um email atravs do Node.JS. Para quem no sabe ou no lembra sobre essa tecnologia,voc pode ter mais detalhes acessando os vrios artigos sobre este assunto,como por exemplo O que Node.js? . Enviar e-mails com Node.JS muito f cil. Primeiro, voc precisar do plug-in do mdulo NodeMailer para criar um tipo de transporte, carregar os modelos, adicionar anexos e, f inalmente, enviar suas mensagens. O Cdigo A primeira coisa que voc tende a f azer criar uma classe wrapper para gerenciar todas essas taref as. Para isso, iremos envolver em uma classe Eamiler para centralizar o envio de email em nossa app. # /lib/emailer.coffee emailer = require(nodemailer) fs = require(fs) _ = require(underscore) class Emailer options: {} data: {} # Defina os anexos aqui attachments: [ fileName: "logo_baboo.png" filePath: "./public/images/email/logo_baboo.png" cid: " logo_baboo@ myapp" ] constructor: (@ options, @ data)-> send: (callback)-> html = @ getHtml(@ options.template, @ data) attachments = @ getAttachments(html) messageData = to: # {@ options.to.name} # {@ options.to.surname} <# {@ options.to.email}> from: Myapp.com subject: @ options.subject html: html generateTextFromHT ML: true attachments: attachments transport = @ getTransport() transport.sendMail messageData, callback getTransport: ()-> emailer.createTransport SMT P, service: Gmail

auth: user: seu_email@ gmail.com pass: sua_senha getHtml: (templateName, data)-> templatePath = ./views/emails/# {templateName}.html templateContent = fs.readFileSync(templatePath, encoding=utf8) _.template templateContent, data, {interpolate: /\{\{(.+?)\}\}/g} getAttachments: (html)-> attachments = [] for attachment in @ attachments attachments.push(attachment) if html.search(cid:# {attachment.cid}) > -1 attachments exports = module.exports = Emailer Em uma estrutura padro de projeto ExpressJS voc vai armazenar esse arquivo /lib/emailer.cof f ee. Voc precisa ter os modelos de e-mail armazenados em /views/emails/ como arquivos HT ML e anexos em /public/images/email/. Uma viso de e-mail ser parecido com o cdigo abaixo: Ol {{name}} {{surname}}, Myapp gostaria que voc juntar-se a rede em Myapp.com. Por favor, siga o link abaixo para registrar: http://myapp.com/register?invite={{id}} Obrigado, Sua assinatura O template UnderscoreJS cuidar sobre as variveis no modelo e a f uno getAttachments () ir automaticamente anexar os arquivos que voc precisa pelo cid do template. Para usar a classe no seu cdigo voc tem que instanciar um novo objeto Emailer com as opes desejadas, os dados do modelo e enviar o e-mail: options = to: email: usuario@ dominio.com name: Xan surname: Burzum subject: Convites de Myapp template: invite data = name: Xan surname Burzum id: 3434_invite_id Emailer = require ../lib/emailer emailer = new Emailer options, data

emailer.send (err, result)-> if err console.log err Usando um MongooseJS o modelo para a convites seria como o cdigo abaixo: InviteSchema = new Schema email: type: String name: type: String surname: type: String status: type: String enum: ["pending", "accepted"] default: pending clicks: type: Number default: 0 created_at: type: Date default: Date.now InviteSchema.methods.send = ()-> options = to: email: @ email name: @ name surname: @ surname subject: Convites de Myapp template: invite Emailer = require ../lib/emailer emailer = new Emailer options, @ emailer.send (err, result)-> if err console.log err Invite = mongoose.model(Invite, InviteSchema) exports = module.exports = Invite E voc vai cham-la de um roteador ExpressJS: Invite = require(../models/invite) module.exports = (app)-> app.post /invites, (req, res)-> data = req.body invite = new Invite data invite.save ()-> invite.send() res.writeHead(303, {Location: /invites}) res.end()

app.get /invites, (req, res)-> Invite.find().desc(created_at).run (err, invites)-> res.render invites/invites, {title: Invites, invites: invites} At mais e boa programao. Por Alexandre Roberto da Silva (xanburzum)