node.js - Not able to send mail from mail server on al2023 - Stack Overflow

I had created a nodejs mail server on a AL2023 linux vm using SMTP server npm package. I am able to rec

I had created a nodejs mail server on a AL2023 linux vm using SMTP server npm package. I am able to receive email successfully, but I am not able to send emails. I have configured ports 25 and 587 on security group. Not sure what else is needed to be done.

I start the server on ports 25 and 587. when mail is sent to the server it gets received successfully but when i try to send mail using my custom server, i am not able to send.

on server i have tried commands like netstat -tuln to check if the correct ports are open which is working correctly.

i was able to use the same code of send mail client with gmail as mail server and it worked correctly. for sure the issue must be in some configuration of my mail server

server code

import path from "node:path";
import dotenv from "dotenv";
dotenv.config({path: path.resolve(__dirname + './../../.env')});

import fs from 'fs';
import connectDB from "./db";
import logger from "./logger";

import { SMTPServer } from "smtp-server";
import { simpleParser } from "mailparser";

import MailRepository from "./repositories/mail.repository";
const repo = new MailRepository();

const server = new SMTPServer({
  onConnect(session, cb) {
    cb();
  },
  onMailFrom(address, session, cb) {
    cb();
  },
  onRcptTo(address, session, cb) {
    cb();
  },
  onData(stream, session, callback) {
    simpleParser(stream)
      .then((parsed) => {
        const obj = {
          mail: JSON.parse(JSON.stringify(parsed)),
        };

        repo.create(obj);

        callback(null);
      })
      .catch((err) => {
        console.error("Error parsing email:", err);
        callback(err); 
      });
  },
  disabledCommands: ["AUTH"],
  disableReverseLookup: true,
  logger: false,
  secure: false,
  hideSTARTTLS: true,
  hide8BITMIME: true,
  hidePIPELINING: true,
  hideSMTPUTF8: true,
});

const serverFor587 = new SMTPServer({
  authOptional: false,
  onAuth(auth, session, cb){
    try{
      logger.info('587 on auth : username - '+  auth.username + ' password - ' + auth.password);
      if (auth.username === 'demo' && auth.password === 'Demo@123') {
          cb(null, { user: 'demo' });
      } else {
          cb(new Error('Authentication failed'));
      }
    }
    catch(err){
      logger.error('on auth error :' + err);
      cb(new Error("Authentication Failed"));
    }
  },
  onConnect(session, callback) {
    logger.info('Client connected, sending greeting...');
    callback();
  },
  onData(stream, session, callback) {
    logger.info('ondata');
    stream.pipe(process.stdout);
    stream.on('end', callback);
  },
  onClose(session) {
    console.log('Connection closed from:', session.remoteAddress);
  },
  secure: false,  
  needsUpgrade: true,  // Enable STARTTLS
  key: fs.readFileSync('/etc/letsencrypt/live/mail.demo.in/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/mail.demo.in/fullchain.pem') 
});

serverFor587.on('error', (err) => {
  logger.error('Error:', err);
});

connectDB()
  .then(() => {
    server.listen(25, () => logger.info("mail server running on port 25 for receiving mails"));
    serverFor587.listen(587, () => logger.info("mail server running on port 587 for sending mails"));
  })
  .catch((err) => {
    logger.error("db connection failed !!! ", err);
  });

send mail client

import nodemailer from 'nodemailer';
import logger from "./../logger/log.js";

export class SendMails{

  private transporter = nodemailer.createTransport({
    host: 'mail.demo.in',
    port: 587,
    secure: false,
    auth: {
      user: 'demo',
      pass: 'Demo@123'
  },
  tls: {
      rejectUnauthorized: false
  }
  });

  constructor(){
    this.transporter
        .verify()
        .then(result => logger.info("mailer connected "+ result))
        .catch(err => logger.error("error in mail connection " + err));
  }

  async sendMail(frm: string, to: string, cc:string, bcc:string, sbjct: string, text: string, html: string){
    await this.transporter.sendMail(
      {
        from: frm,
        to: to,
        subject: sbjct,
        text: text,
        html: html,
        cc:cc,
        bcc:bcc,

      },
      function (error, info) {
        if (error) {
          logger.error(error);
        } else {
          logger.info("Email sent: " + info.response);
        }
      }
    );

  }
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744863731a4597854.html

相关推荐

  • node.js - Not able to send mail from mail server on al2023 - Stack Overflow

    I had created a nodejs mail server on a AL2023 linux vm using SMTP server npm package. I am able to rec

    2天前
    40

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信