NodeJS Почему не работает SMTP-сервер с включенной опцией безопасности? - PullRequest
3 голосов
/ 29 мая 2020
const fs = require('fs');
const {SMTPServer} = require('smtp-server');

const smtp = new SMTPServer({
    secure: true,
    key: fs.readFileSync('certs/privkey.pem'),
    cert: fs.readFileSync('certs/cert.pem'),
    onData,
    onRcptTo,
    authOptional: true,
});

function onRcptTo(address, session, callback) {
    console.log("IS HERE!!!");
    callback();
}

function onData(stream, session, callback) {
    stream.pipe(process.stdout);
}

smtp.listen(465);

Без опции secure и поста 25 соответственно все работает, но не с ней.

Сертификат, который я получил с помощью Let's Encrypt через Certbot. А также я попытался оставить сертификат по умолчанию, но это тоже не работает. Я протестировал его с помощью инструмента mxtoolbox и получил результат «Ошибка подключения»

Итак, почему это происходит?

1 Ответ

2 голосов
/ 05 июня 2020

Вы должны попробовать Обработку ошибок, чтобы выяснить, что на самом деле пошло не так. Включите и измените порядок следующего фрагмента кода:

const {SMTPServer} = require('smtp-server');
const fs = require('fs'); // must include after smtp-server 

const smtp = new SMTPServer({
    secure: true,
    key: fs.readFileSync('certs/privkey.pem'),
    cert: fs.readFileSync('certs/cert.pem'),
    onRcptTo, // call Rcpt callback first
    onData,
    authOptional: false // leave it optional
});

function onRcptTo(address, session, callback) {
    console.log("IS HERE!!!");
    callback();
}

function onData(stream, session, callback) {
    stream.pipe(process.stdout);
stream.on("end", callback); // must include a callback function
}
smtp.on("error", err => {
      console.log("Error %s", err.message);
    });

smtp.listen(465);
...