Session.send() 不起作用:"session is not defined"

Session.send() does not work: "session is not defined"

我试图在 transporter.sendMail 中使用 session.send 而不是 console.log,以便用户知道电子邮件何时发送成功,但它不起作用。
错误是 "session is not defined".
这是我的代码的样子:

var nodemailer = require('nodemailer');

// Create the transporter with the required configuration for Gmail
// change the user and pass !
var transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true, // use SSL
    auth: {
        user: 'myemail@gmail.com',
        pass: 'myPassword'
    }
});

// setup e-mail data
var mailOptions = {
    from: '"Our Code World " <myemail@gmail.com>', // sender address (who sends)
    to: 'mymail@mail.com, mymail2@mail.com', // list of receivers (who receives)
    subject: 'Hello', // Subject line
    text: 'Hello world ', // plaintext body
    html: '<b>Hello world </b><br> This is the first email sent with Nodemailer in Node.js' // html body
};

// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info,session){
    if(error){

        return console.log(error);
    }

    session.send('Message sent: ' + info.response);
}
);

我只是 运行 这个片段适当地替换了用户名和密码,最后是这样的:

{ Error: Invalid login: 534-5.7.14 <https://accounts.google.com/signin/continu> Please log in via
534-5.7.14 your web browser and then try again.
534-5.7.14  Learn more at
534 5.7.14  https://support.google.com/mail/answer/ - gsmtp
    at SMTPConnection._formatError (C:\projects\nodemailertest\node_modules\nodemailer\lib\smtp-connection\index.js:605:19)
    at SMTPConnection._actionAUTHComplete (C:\projects\nodemailertest\node_modules\nodemailer\lib\smtp-connection\index.js:1340:34)
    at SMTPConnection._responseActions.push.str (C:\projects\nodemailertest\node_modules\nodemailer\lib\smtp-connection\index.js:378:26)
    at SMTPConnection._processResponse (C:\projects\nodemailertest\node_modules\nodemailer\lib\smtp-connection\index.js:764:20)
    at SMTPConnection._onData (C:\projects\nodemailertest\node_modules\nodemailer\lib\smtp-connection\index.js:570:14)
    at TLSSocket._socket.on.chunk (C:\projects\nodemailertest\node_modules\nodemailer\lib\smtp-connection\index.js:522:47)
    at emitOne (events.js:96:13)
    at TLSSocket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at TLSSocket.Readable.push (_stream_readable.js:134:10)
  code: 'EAUTH',
  response: '534-5.7.14 <https://accounts.google.com/signin/continue?..._sniped> Please log in via\n534-5.7.14 your web browser and then try again.\n534-5.7.14  Learn more at\n534 5.7.14  https://support.google.com/mail/answer/78 - gsmtp',
  responseCode: 534,
  command: 'AUTH PLAIN' }

此外,我收到了一封来自 Google 的电子邮件:

Someone just used your password to try to sign in to your account from a non-Google app. Google blocked them, but you should check what happened. Review your account activity to make sure no one else has access.

您确定这是您的代码吗运行?您发布的错误 "session is not defined" 似乎是语法错误。

transporter.sendMail(mailOptions, function(error, info , session)

您没有使用正确的函数定义,因为 transport.SendMail 的回调只能有两个参数(错误和信息)。看看 Nodemailer example

在您的情况下,它看起来像这样。只需确保在 session 上下文可用的地方使用此代码段即可。

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return session.error(error);
    }

    session.send('Message sent: ' + info.messageId);
});

这是一个如何做到这一点的例子。只需确保在会话上下文中调用此方法,例如:

const sendmail = require('./email'); // in case you have the class called email

bot.dialog('/', function(session) {


sendmail.sendmail(session);


session.send("hello")

});

function sendmail(session){

  var nodemailer = require('nodemailer');

  // Create the transporter with the required configuration for Outlook
  // change the user and pass !
  var transport = nodemailer.createTransport( {
      service: "hotmail",
      auth: {
          user: "",
          pass: ""
      }
  });

  // setup e-mail data, even with unicode symbols
  var mailOptions = {
      from: '"Our Code World " <shindar902009@hotmail.com>', // sender address (who sends)
      to: 'shindar902009@hotmail.com', // list of receivers (who receives)
      subject: 'Hello ', // Subject line
      text: 'Hello world ', // plaintext body
      html: '<b>Hello world </b><br> This is the first email sent with Nodemailer in Node.js' // html body
  };

  // send mail with defined transport object
  transport.sendMail(mailOptions, function(error, info){
      if(error){
          return console.log(error);
      }

      session.send('Message sent');

  });


}
module.exports.sendmail = sendmail;