Initial commit
This commit is contained in:
68
index.js
Normal file
68
index.js
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
SMTP Proxy
|
||||
Author: Alex Rennie-Lis
|
||||
Description: Presents an unauthenticated SMTP server for local legacy devices, and
|
||||
proxies traffic to a defined relay host
|
||||
Version: 1.0.0
|
||||
*/
|
||||
|
||||
const SMTPServer = require("smtp-server").SMTPServer;
|
||||
const nodemailer = require("nodemailer");
|
||||
|
||||
if (
|
||||
!process.env.RELAY_HOST ||
|
||||
!process.env.RELAY_PORT
|
||||
) {
|
||||
console.log ("Missing configuration.");
|
||||
process.exit (1);
|
||||
}
|
||||
|
||||
const transporter = nodemailer.createTransport({
|
||||
host: process.env.RELAY_HOST,
|
||||
port: parseInt(process.env.RELAY_PORT) || 465,
|
||||
secure: process.env.RELAY_PORT === "465",
|
||||
auth: {
|
||||
user: process.env.RELAY_USER,
|
||||
pass: process.env.RELAY_PASS
|
||||
},
|
||||
// VERBOSE DEBUGGING
|
||||
logger: false,
|
||||
debug: false
|
||||
});
|
||||
|
||||
// Verify the connection on startup
|
||||
transporter.verify((error, success) => {
|
||||
if (error) {
|
||||
console.error("Transporter Config Error:", error);
|
||||
}
|
||||
else {
|
||||
console.log("Upstream relay is ready.");
|
||||
}
|
||||
});
|
||||
|
||||
const server = new SMTPServer({
|
||||
authOptional: true,
|
||||
onData(stream, session, callback) {
|
||||
console.log ("Relaying message...");
|
||||
|
||||
const envelope = {
|
||||
from: session.envelope.mailFrom.address,
|
||||
to: session.envelope.rcptTo.map(r => r.address)
|
||||
};
|
||||
|
||||
transporter.sendMail ({envelope: envelope, raw: stream}, (err, info) => {
|
||||
if (err) {
|
||||
console.error ("Relay Error:", err.message);
|
||||
return callback (new Error ("Relay failed!"));
|
||||
}
|
||||
console.log("Relay success:", info.messageId);
|
||||
callback();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const listenPort = process.env.SMTP_PORT || 2525; // Default to port 2525
|
||||
|
||||
server.listen (listenPort, '0.0.0.0', () => {
|
||||
console.log (`Relay active: Port ${listenPort} -> ${process.env.RELAY_HOST}:${process.env.RELAY_PORT}`);
|
||||
});
|
||||
Reference in New Issue
Block a user