Node.js: creare un form di contatti in AJAX con jQuery, Express e NodeMailer

Node.js: creare un form di contatti in AJAX con jQuery, Express e NodeMailer

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 {
            //...
        }
    });
});

Torna su