title: I'm using IMAP npm library for fetching mails which says "invalid credentials"
body: <p>I am using IMAP library to fetch email from gmail. I got reference from <a href="https://stackoverflow.com/questions/21241692/read-email-body-with-node-js-imap">Read email body with node js imap</a> and <a href="https://www.npmjs.com/package/imap" rel="nofollow noreferrer">https://www.npmjs.com/package/imap</a>.</p>
  
  <p>My implementation is as following:</p>
  
  <pre><code>    var Imap = require('imap'),
          inspect = require('util').inspect;
  
      var imap = new Imap({
          user: 'xxx@gmail.com',
          password: 'xxxxxx',
          host: 'imap.gmail.com',
          port: 993,
          tls: true
      });
  
      function openInbox(cb) {
          imap.openBox('INBOX', true, cb);
      }
  
      imap.once('ready', function() {
          openInbox(function(err, box) {
              if (err) throw err;
              var f = imap.seq.fetch('1:3', {
                  bodies: 'HEADER.FIELDS (FROM TO SUBJECT DATE)',
                  struct: true
              });
              f.on('message', function(msg, seqno) {
                  console.log('Message #%d', seqno);
                  var prefix = '(#' + seqno + ') ';
                  msg.on('body', function(stream, info) {
                      var buffer = '';
                      stream.on('data', function(chunk) {
                          buffer += chunk.toString('utf8');
                      });
                      stream.once('end', function() {
                          console.log(prefix + 'Parsed header: %s', inspect(Imap.parseHeader(buffer)));
                      });
                  });
                  msg.once('attributes', function(attrs) {
                      console.log(prefix + 'Attributes: %s', inspect(attrs, false, 8));
                  });
                  msg.once('end', function() {
                      console.log(prefix + 'Finished');
                  });
              });
              f.once('error', function(err) {
                  console.log('Fetch error: ' + err);
              });
              f.once('end', function() {
                  console.log('Done fetching all messages!');
                  imap.end();
              });
          });
      });
  
      imap.once('error', function(err) {
          console.log(err);
      });
  
      imap.once('end', function() {
          console.log('Connection ended');
      });
  
      imap.connect();
  </code></pre>
  
  <p>Note: username/password is correct and I had enable IMAP/POP in my gmail account but still I'm getting following error:</p>
  
  <pre><code>    { Error: Invalid credentials (Failure)
          at Connection._resTagged (xxx/server/node_modules/imap/lib/Connection.js:1502:11)
          at Parser.&lt;anonymous&gt; (xxx/server/node_modules/imap/lib/Connection.js:194:10)
          at Parser.emit (events.js:193:13)
          at Parser._resTagged (xxx/server/node_modules/imap/lib/Parser.js:175:10)
          at Parser._parse (xxx/server/node_modules/imap/lib/Parser.js:139:16)
          at Parser._tryread (xxx/server/node_modules/imap/lib/Parser.js:82:15)
          at TLSSocket.Parser._cbReadable (xxx/server/node_modules/imap/lib/Parser.js:53:12)
          at TLSSocket.emit (events.js:193:13)
          at emitReadable_ (_stream_readable.js:550:12)
          at processTicksAndRejections (internal/process/task_queues.js:81:17)
          type: 'no',
              textCode: 'AUTHENTICATIONFAILED',
          source: 'authentication' }
      Connection ended
  </code></pre>