Escreva uma API de wrapper de email em Node.js

Eu estava trabalhando em um aplicativo phonegap, mas descobri que os plug-ins que adicionam a capacidade de enviar e-mails são instáveis, não confiáveis ​​e sem suporte. Desisti de usá-los e decidi escrever um invólucro de API para fazer o trabalho por mim, uma vez que o aplicativo em que estava trabalhando já dependia de uma conexão de internet ativa.

Você pode fazer isso MUITO facilmente no node.js.

Supondo que você já tenha instalado node.js e npm, o primeiro thin que você precisa fazer é criar um package.json:

{
"name": "my-api",
"description": "A simple API wrapper for nodemailer to send emails",
"dependencies" : {
"nodemailer": "0.4.x",
"restify": "2.6.x"
}
}

… e um arquivo de configuração:

var config = {}

config
.service = 'Gmail'
config
.username = '';
config
.password = '';
config
.sendAddr = 'noreply@myapi.com';

module
.exports = config;

Em seguida, crie sua API.

 // Include dependencies
var restify = require('restify');
var nodemailer = require('nodemailer');

// Include config
var config = require('./config')

// Setup email config
var smtpTransport = nodemailer.createTransport("SMTP",{
service
: config.service,
auth
: {
user
: config.username,
pass
: config.password
}
});

// Create the server and map POST payload to request parameters object
var server = restify.createServer();
server
.use(restify.bodyParser({ mapParams: true }));
server
.use(
function crossOrigin(req,res,next){
res
.header("Access-Control-Allow-Origin", "*"); // the client could be a mobile app so we must allow POSTs from any origin
res
.header("Access-Control-Allow-Headers", "X-Requested-With");
return next();
}
);

/**
* API endpoint for sending emails.

*

*
@param {string} receipt The email address of the recepient
*
@param {string} subject The subject title of the email to send
*
@param {string} message The email message
*/

server
.post('/email', function create(req, res, next) {
if (!req.params.receipt === undefined ||
req
.params.subject === undefined ||
req
.params.message === undefined) {
return next(new restify.InvalidArgumentError('receipt, subject, message are required parameters!'));
}

// Send an email to the visitor's welcomer with their details + signature
smtpTransport
.sendMail({
from: config.sendAddr,
to
: req.params.receipt,
subject
: req.params.subject,
html
: req.params.message
}, function(error, response){
if (error) {
console
.log(error);
} else {
console
.log("Message sent: " + response.message);
}
});

res
.send(201, req.params);
});

// Start listening on port 8080
server
.listen(8080, function() {
console
.log('%s listening at %s', server.name, 'http://my-api.app');
});

Contanto que seu aplicativo possa POSTAR em sua API, você pode enviar e-mails! Você pode fazer outras coisas aqui, bem como armazenar as informações enviadas por e-mail em um banco de dados, etc.

Para obter mais informações, consulte a documentação node.js, restify e nodemailer.

Esta foi a minha primeira vez usando node.js, então obviamente o poderia ser bastante arrumado, mas isso só mostra como isso é fácil!