Я добавляю проверку концепции сервера smtp, который просто перехватывает всю полученную почту, но не отправляет ее на реальную цель.
Кроме того, он генерирует события при соединении с socket.io.
Все без использования http-сервера.
SMTP + сервер socket.js
const SMTPServer = require("smtp-server").SMTPServer;
const io = require('socket.io')(2626);
const server = new SMTPServer({
logger: true,
debug: true,
allowInsecureAuth: true,
onAuth(auth, session, callback) {
console.log("onAuth, user", auth.username, "password", auth.password);
if (auth.username !== "abc" || auth.password !== "def") {
return callback(new Error("Invalid username or password"));
}
io.emit("smtpAuth", auth);
callback(null, { user: 123 }); // where 123 is the user id or similar property
},
onConnect(session, callback) {
console.log("onConnect, from ip ", session.remoteAddress);
io.emit("smtpConnect", session);
return callback(); // Accept the connection
},
onMailFrom(address, session, callback) {
console.log("onMailFrom", address.address);
io.emit("smtpMailFrom", address);
return callback(); // Accept the address
},
onRcptTo(address, session, callback) {
console.log("onRcptTo", address.address);
io.emit("smtpRcptTo", address);
return callback(); // Accept the address
},
onData(stream, session, callback) {
var email_content = "";
// stream.pipe(email_content); // print message to console
stream.on('data', (chunk) => { email_content += chunk });
stream.on("end", function() {
// Stream ended
console.log (email_content);
io.emit("smtpData", email_content);
callback();
});
}
});
server.on("error", err => {
console.log("Error %s", err.message);
});
server.listen(25);
Пример кода VUE.JS
Этот компонент автоматически уведомляетсясервером socket.io, если что-то новое происходит.В этом случае он может регистрировать все события, а также сохранять все данные электронной почты (необработанные).
<code><template>
<div class="hello">
<h1>Le email che abbiamo ricevuto per te</h1>
<pre
v-for="(message, index) in messages"
:key="index"
>{{
message
}}
экспорт по умолчанию {name: "App", data () {return {messages: [],}}, сокеты: {connect () {console.log ('сокет подключен')}, smtpAuth (val) {console.log ('SMTP AUTH', val);}, smtpConnect (val) {console.log ('SMTP CONNECT', val);}, smtpMailFrom (val) {console.log ('SMTP MAIL FROM', val);}, smtpRcptTo (val) {console.log ('SMTP RCPT TO', val);}, smtpData (val) {console.log ('SMYP DATA', val);this.messages.push (вал);}},};
Пример того, как продолжать работу сервера smtp / socket и приложения сервера vue-cli dev с использованием pm2
Вызовите это ecosystem.config.js
module.exports = {
apps: [
{
name: "WEB",
script: "./node_modules/@vue/cli-service/bin/vue-cli-service.js",
args: "serve"
},
{
watch: true,
name: "SMTP",
script: "./server/index.js"
}
]
};
Запустите его как pm2 run ecosystem.config.js