SMTP Temporizza mail - Node mailing amqp

April 07, 2017 0 Comments Node.js, SMTP, RabbitMQ

Ciao a tutti! Ho cominciato questo progetto perché mi serviva un smtp che fosse in grado di gestire la tempistica di invio delle email, avendo il controllo totale su tutta la procedura.

Sono partito dal progetto nodemailer-amqp-example che è un esempio di come si può gestire una coda con il broker RabbitMQ e NodeJs.

Ho fatto in modo che il processo publisher.js diventasse un server SMTP, e ho sostituito il processo server.js con un Postfix ad hoc. Ho dovuto riscrivere anche una delle dipendenze per dei problemi di conversione di charset, progetto qui: mailparser-iconv-full .

Quindi, a cosa serve ?

Serve quando si ha bisogno di mandare un grande quantitativo di email, solitamente newsletter, e demandare ad un sistema esterno l’invio frazionato nel tempo.

Con cosa si può usare?

Con qualsiasi client SMTP

Di seguito il link del progetto github e la guida di installazione 🙂

Il parametro più importante si trova all’interno di config.json , delaysend, che definisce ogni quanto millisecondi viene spedita una mail.

node-mailing-amqp

Installazione e avvio

Requisiti

Installare il broker rabbitmq

(su mac)

brew install rabbitmq  

su ubuntu, andare sul sito di rabbimq https://www.rabbitmq.com , scaricare il deb e fare :

dpkg -i rabbitmq.deb  

il nome ovviamente varierà.

Installare postfix

apt-get install postfix  

Installarlo come sito internet, e inserire un FQDN valido

Dopodichè, andare sul file

/etc/postfix/master.cf

e modificare la porta di ascolto

dalla riga

smtpd      inet  n       -       y       -       -       smtpd  

alla riga

9267      inet  n       -       y       -       -       smtpd  

in questo modo avremo la porta 9267 in ascolto in localhost

Installazione

Clonare il progetto git con git clone e spostarsi all'interno della cartella

cd node-mailing-amqp  

Installare le dipendenze richieste

npm install --production  

Creare le cartelle dei log

./setup.sh

Assicurarsi di avere RabbitMQ server attivo, verificare anche che le configurazioni siano corrette in config.json.

Esecuzione

Questo progetto è l'insieme di tre parti:

  1. Postfix SMTP server . Questo è il servizio reale che invierà infine le mail, gira su localhost (porta 9267) e accetta mail solo da localhost.
  2. Processo Subscriber (subscriber.js). Questo processo è quello che si occupa di recuperare i messaggi dalla coda rabbit e mandarli in invio tramite postfix. Ogni fetch è temporizzato tramite il valore config.delaysend nel file config.json
  3. Processo Publisher (publisher.js). Questo è l'smtp di ponte che si occupa di validare l'utente che sta inviando la mail, e inserisce la mail da recapitare in coda rabbit

Si possono avviare tutti i processi tramite il comando (all'interno della cartella)

./restart.sh

Impostazione credenziali

Modificare il file auth.json e aggiungere gli account che verranno utilizzati dal sistema

Esempio:

{
    "users": [{
        "username": "test1",
        "password": "test1"
    }, {
        "username": "test2",
        "password": "test2"
    }, {
        "username": "test3",
        "password": "test3"
    }, {
        "username": "test4",
        "password": "test4"
    }, {
        "username": "test5",
        "password": "test5"
    }]
}

UTILITY

rabbitmqctl list_queues  

eliminare la coda rabbit

python rabbitmqadmin purge queue name=node-mailing-amqp  

I logs sono all'interno della cartella LOGS

Samuele Chiocca
Padova, italy Website