NodeMailer - Не удается прочитать свойство "getSocket" неопределенного

aazcast спросил: 28 марта 2018 в 01:44 в: node.js

Node: v8.6.0Nodemailer: v4.6.4

Это мой код:

  const transport = nodemailer.createTransport({
  host: process.env.MAIL_HOST,
  port: process.env.MAIL_PORT,
  auth: {
    user: process.env.MAIL_USER,
    pass: process.env.MAIL_PASS
  }
});const generateHTML = (filename, options = {}) => {
  const html = pug.renderFile(`${__dirname}/../views/email/${filename}.pug`,
    options);
  const inlined = juice(html);
  return inlined;
}exports.send = async (options) => {
  const html = generateHTML(options.filename, options);
  const text = htmlToText.fromString(html);
  const mailOptions = {
    from: `Site <noreply@domain.com>`,
    to: options.user.email,
    subject: options.subject,
    html,
    text
  };
  const sendMail = P.promisify(transport.sendMail, transport);
  return sendMail(mailOptions);
}

Когда я выполняю sendmail, я получаю этот сбой: TypeError: Невозможно прочитать свойство "getSocket" undefined↵ в sendMail (/Users/...../node_modules/nodemailer/lib/mailer/index.js:143:24

Я проверяю строку упоминания и это:

if (typeof this.getSocket === 'function') {
            this.transporter.getSocket = this.getSocket;
            this.getSocket = false;
        }

1 ответ

Freddie ответил: 28 марта 2018 в 03:35

Попробуйте это.

   const transport = nodemailer.createTransport({
      host: process.env.MAIL_HOST,
      port: process.env.MAIL_PORT,
      auth: {
        user: process.env.MAIL_USER,
        pass: process.env.MAIL_PASS
      }
    });    const generateHTML = (filename, options = {}) => {
      const html = pug.renderFile(`${__dirname}/../views/email/${filename}.pug`,
        options);
      const inlined = juice(html);
      return inlined;
    }    exports.send = async (options) => {
      const html = generateHTML(options.filename, options);
      const text = htmlToText.fromString(html);
      const mailOptions = {
        from: `Site <noreply@domain.com>`,
        to: options.user.email,
        subject: options.subject,
        html,
        text
      };
      return transport.sendMail(mailOptions)
      .then((stuff) => { console.log(stuff); })
      .catch((err) => { console.log(err); }) ;    }
aazcast ответил: 28 марта 2018 в 02:37
это не работает. у меня та же проблема.
Freddie ответил: 28 марта 2018 в 03:12
Вы знаете, что почтовый узел уже вернет обещание, так что вам не нужно обещать его правильно?
Freddie ответил: 28 марта 2018 в 03:12
transport.sendMail (mailOptions) .then ((stuff) = > {console.log (stuff);}) .catch ((err) = > {console.log (err);})
aazcast ответил: 28 марта 2018 в 03:25
Большое спасибо, Фредди, теперь это работает !!! Спасибо, не знал, что они реализуют обещание.
Freddie ответил: 28 марта 2018 в 03:26
Не беспокойтесь :) Можете ли вы пометить мой ответ как правильный ответ, чтобы я получил очки, пожалуйста.