Possiamo utilizzare jQuery per creare un form di contatti in AJAX con Express e NodeMailer.
Per usare un servizio SMTP con NodeMailer dovete conoscere i parametri di accesso:
'use strict';
const mailer = require('nodemailer');
var Mail = function() {
	if(!mailer) {
		throw {
			status: 1,
			msg: 'NodeMailer not installed'
		}
	} else {
		this.mailer = mailer;
		this.settings = {
			host: 'mail.host.com',
			port: 25,
			secure: false, // true se usate SSL
			ignoreTLS: true, // false se usate SSL
			auth: {
				user: 'username',
				pass: 'password'
			}
		};
	}
};
Mail.prototype = {
	_create: function() {
		var self = this;
		if(self.mailer && self.settings) {
			return self.mailer.createTransport(self.settings);
		} else {
			return null;
		}
	},
	send: function(options, fail, sent) {
		var self = this;
		var transporter = self._create();
		if(transporter !== null) {
			transporter.sendMail(options, function(error, info) {
	if(error) {
	fail(error);
	} else {
	sent(info);
	}
	});
		} else {
			return false;
		}
	}
};
module.exports = Mail;
Quindi in Express avremo:
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const Mail = require('Mail');
const app = express();
const port = process.env.PORT || 8080;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/contact', function(req, res) {
res.sendFile(path.join(__dirname + '/contact.html'));
});
app.post('/ajax/mail/send', function(req, res) {
var name = req.body.name;
var email = req.body.email;
var subject = req.body.subject;
var message = req.body.message;
// TODO: validazione (fondamentale!)
var data = {
from: email,
to: 'miamail@miamail.com'
subject: subject
text: name + ': ' + '\n\n' + message
};
var myMail = new Mail();
myMail.send(data, function(error) {
res.json({error: true});
}, function(info) {
res.json({error: false});
});
});
app.listen(port);
A questo punto il codice jQuery รจ semplice:
$( "#contact-form" ).on( "submit", function( e ) {
e.preventDefault();
var data = $( this ).serialize();
$.post( "/ajax/mail/send", data, function( response ) {
if( !response.error ) {
//...
} else {
//...
}
});
});