JavaScript Callback function is never called

I’m trying to call a callback function on my SendMail with nodemailer. Although the function is successfully executed and the mail is sent, the callback function logging “mail sent” on the console is never executed. Any ideas what I’m missing?

var email = 'receiver@gmail.com'
async.waterfall([
    function(done) {
        crypto.randomBytes(20, function(err, buf) {
          var token = buf.toString('hex');
          return done(err, token);
        });
    },
     function(token, done){
        //some code
        done(null,token);
    },
    function(token, done){
        if(token){
            var mailOptions = {
                to: email,
                from: 'mymail@gmail.com',
                subject: 'subject',
                text: 'text'
                };
            mailer.SendMail(mailOptions, function(err) {
                if(err){
                    console.log(err);
                }else {
                    console.log("no error");
                }
                console.log("sent mail");
                req.flash('info', 'An e-mail has been sent to ' + email + ' with further instructions.');
                console.log("mail sent");
                done(err, 'done');
            });
        }
        else return done("Account existiert nicht", null);
    }  
],
    function(err){
        console.log("final block");
        if(err){
            console.log(err);
            return res.status(500).send({msg:"error"});
        }
        else {
            return res.status(200).send({msg: "Reset Link has been sent to you."})
        }
    }
);

This is the corresponding SendMail() function:

const nodemailer = require("nodemailer");

exports.SendMail = (msg) => {
    let transporter = nodemailer.createTransport({
        service: 'gmail',
        host: "smtp.gmail.com",
        secure: true,
        auth: {
            user: "mymail@gmail.com", // my mail
            pass: "mysecretpwd" // my password
        }
      });

    return transporter.sendMail(msg, function (error, info) {
        if(error) {
            return console.log(error);
        }
        console.log("Message sent "+ info.response) // this statement is showing on the console
      });
}

Answer

Your function does not use the second parameter (the callback). You can use something like:

const nodemailer = require("nodemailer");

exports.SendMail = (msg, callback) => {
    let transporter = nodemailer.createTransport({
        service: 'gmail',
        host: "smtp.gmail.com",
        secure: true,
        auth: {
            user: "mymail@gmail.com", // my mail
            pass: "mysecretpwd" // my password
        }
      });

    return transporter.sendMail(msg, callback);
}