What is it ?

They are structures designed on working in agricultural lands. On vehicles that do not have a speedometer such as a combine harvester, it can detect speeds thanks to the sensors. By the way, it tells the user how many meters it will be planting crops.

Github

rabbitmq-mail-consumer-server

Logo

Rabbitmq-mail-consumer-server is an independent mail sending server that abstracts the sending mails from system. Services that want to send mail do not need to know where and how this server works 😎. Just make sure you’re looking at the same rabbit mq channel.

Sending mail is abstracted from the whole system. You don’t have to think ✌️.

Tech

Tech Rabbitmq-mail-consumer-server uses a number of open source projects to work properly:

  • [Node Js] - for runnig server
  • [Rabbit MQ] - for getting messages from another server
  • [Redis] - for checking email blacklist

For Blacklist

You need to add a mail adress to redis.

/unsubscribe?email=(with encrypted mail) Redis

Installation

Rabbitmq-mail-consumer-server requires Node.js v8+ to run.

Install the dependencies and devDependencies and start the server.

$ cd rabbitmq-mail-consumer-server
$ npm install
$ node app

For Make A Docker Image:

$ docker build -t  rabbitmq-mail-consumer-server .
$ docker run --env-file .env -p 5000:5000 rabbitmq-mail-consumer-server

Pull From Docker Hub

  • latest
  • rpi => ARM build for raspperry pi
$ docker run --env-file .env -p 5000:5000 erdemkosk/rabbitmq-mail-consumer-server:latest
or
$ docker run --env-file .env -p 5000:5000 erdemkosk/rabbitmq-mail-consumer-server:rpi

For Docker-Compose

  • latest
  • rpi => ARM build for raspperry pi
$ docker-compose -f docker-compose-latest.yml up
or
$ docker-compose -f docker-compose-rpi.yml up

Running Stages

You need to send messages from your server to rabbit mq channel when you need to send mail. Forget Password Mail:

  rabbitMq.sendRabbitMQ('mailChannel', JSON.stringify({
    email: 'testme-app@yandex.ru',
    nameSurname: 'Erdem Köşk',
    type: 'forget',
    appName: 'Test Me',
    forgetTitle: 'Şifreni Unutmuşsun :(',
    forgetMessage: '<b>nameSurname</b> şifreni unutmuşsun! Aşağıdaki adımları takip edelim.',
    mailIcon: 'https://img.icons8.com/clouds/100/000000/jake.png',
    webSiteLink: 'http://localhost:3000',
    webSiteLinkButton: 'Hadi Başlayalım!',
    warningText: 'Şifre sıfırlama talebini siz yollamadıysanız, lütfen dikkate almayın !',
    sincerelyText: 'Sevgilerle',
    needHelpText: 'Yardım mı lazım?',
    needHelpLink: 'http://erdemkosk.com',
  }));

Register Mail:

 rabbitMq.sendRabbitMQ('mailChannel', JSON.stringify({
    email: 'testme-app@yandex.ru',
    nameSurname: 'Erdem Köşk',
    type: 'register',
    appName: 'Test Me',
    welcomeTitle: 'Hoş Geldin!',
    welcomeMessage: 'Seni aramızda görmek çok güzel <b> nameSurname </b> ! <br/> İngilizce kelime öğrenmenin en kolay yolu 🤙. Boş zamanlarında senin için oluşturulan rastgele ingilizce kelime testlerini cevapla 🙏 Kendini geliştir!',
    mailIcon: 'https://img.icons8.com/clouds/100/000000/america.png',
    webSiteLink: 'http://localhost:3000',
    webSiteLinkButton: 'Hadi Başlayalım!',
    thanksText: 'Projemize destek verdiğin için teşekkür ederiz!',
    sincerelyText: 'Sevgilerle',
    needHelpText: 'Yardım mı lazım?',
    needHelpLink: 'http://erdemkosk.com',
  }));

When messages arrvied rabbitmq-mail-consumer-server, it controls mail in blacklist (from redis).

If In Not Blacklist: In Not Blacklist

If In Blacklist: In Blacklist

Env Variables

EnvExample
NODE_ENVdev
RABBITMQ_URLamqp url
RABBITMQ_CHANNELamqp channel
MAIL_USERuser mail
MAIL_PASSyser mail password
MAIL_HOSTsmtp mail server
MAIL_PORTsmtp mail port
REDIS_HOSTredis url
REDIS_PASSredis password
REDIS_PORTredis port
URLunsubscribe url path