Skip to content

Instantly share code, notes, and snippets.

View andris9's full-sized avatar
🇪🇪

Andris Reinman andris9

🇪🇪
View GitHub Profile
@andris9
andris9 / app.js
Created July 3, 2020 11:19
dns2 udp/tcp servers
// public domain code
// $ npm install dns2
// $ node app.js
// $ dig A example.com @127.0.0.1 -p5053
// $ dig A example.com +tcp @127.0.0.1 -p5053
const dns = require("dns2");
const { createDNSUdpServer, createDNSTcpServer } = require("./dns-server.js");
// npm install zone-mta
const bounces = require("zone-mta/lib/bounces");
let str = "550 11.22.33.44 listed at spamhaus, see http://www.spamhaus.org";
let bounceInfo = bounces.check(str);
console.log("data : %s", str.replace(/\n/g, "\n" + " ".repeat(11)));
Object.keys(bounceInfo || {}).forEach((key) => {
console.log("%s %s: %s", key, " ".repeat(8 - key.length), bounceInfo[key]);
});
@andris9
andris9 / email.js
Last active November 3, 2020 23:58
O365 Nodemailer
/* eslint no-console: 0 */
'use strict';
const nodemailer = require('nodemailer');
// Create a SMTP transporter object
let transporter = nodemailer.createTransport({
host: 'smtp.office365.com',
port: 587,
// NB! these counters do not expire so it might be too simplistic
class MTALocker {
constructor() {
this.counters = new Map();
}
// helper to get correct counter Map
getPidCounters(pid){
if(!this.counters.has(pid)){
this.counters.set(pid, new Map());
const dns = require('dns').promises;
// domain list to process
let domains = [
'neti.ee',
'hot.ee',
'zone.ee',
'telia.ee',
'a.ee',
'delfi.ee',
const dns = require('dns').promises;
// how many parallel "workers" to use
let batchSize = 3;
// domain list to process
let domains = [
'neti.ee',
'hot.ee',
'zone.ee',
const dns = require('dns').promises;
// how many parallel "workers" to use
let batchSize = 3;
// domain list to process
let domains = [
'neti.ee',
'hot.ee',
'zone.ee',
const dns = require('dns');
// how many parallel "workers" to use
let batchSize = 3;
// domain list to process
let domains = [
'neti.ee',
'hot.ee',
'zone.ee',
@andris9
andris9 / forwarder.js
Last active February 13, 2024 07:33
Process emails without data loss
'use strict';
// $ npm install nodemailer mailsplit libmime
// $ node forwarder.js
const nodemailer = require('nodemailer');
const mailsplit = require('mailsplit');
const libmime = require('libmime');
const Transform = require('stream').Transform;
@andris9
andris9 / customrouter.js
Created March 29, 2018 07:10
Custom routing plugin
// store as plugins/customrouter.js
'use strict';
module.exports.title = 'Custom router';
module.exports.init = function(app, done) {
// Set up custom MX for a delivery
app.addHook('sender:fetch', (delivery, next) => {
delivery.mx = [{
priority: 0,