Sendgrid Inbound Webhook Sending Empty Body
<p>Trying to get Sendgrid's Inbound Parse Webhook following their instructions <a href="https://sendgrid.com/docs/API_Reference/Webhooks/parse.html" rel="noreferrer">here</a></p>

<p>Using Meteor and Iron Router. I am capturing the request but the request body is empty. I'm following this tutorial <a href="https://sendgrid.com/blog/receive-inbound-email-meteorjs/" rel="noreferrer">https://sendgrid.com/blog/receive-inbound-email-meteorjs/</a> and <a href="https://sendgrid.com/blog/control-home-lighting-parse-webhook/" rel="noreferrer">https://sendgrid.com/blog/control-home-lighting-parse-webhook/</a>, but when I do a console.log(this.request.body), it's returning an empty object {}.</p>

<p>I've also tried getting text (this.request.text), html, from, to, subject, but nothing. The only thing I've had success getting is this.request.headers.</p>

<p>The Sendgrid activity dashboard does show that the emails are being parsed, and I am clearly receiving them, but the body is empty. This is unexpected behaviour and I'm not sure how to troubleshoot. Can anybody point me in the right direction? Thanks. Here's a sample request.</p>

<pre><code>    { _readableState: 
    { highWaterMark: 16384,
      buffer: [],
      length: 0,
      pipes: null,
      pipesCount: 0,
      flowing: false,
      ended: false,
      endEmitted: false,
      reading: false,
      calledRead: false,
      sync: true,
      needReadable: false,
      emittedReadable: false,
      readableListening: false,
      objectMode: false,
      defaultEncoding: 'utf8',
      ranOut: false,
      awaitDrain: 0,
      readingMore: false,
      decoder: null,
      encoding: null },
   readable: true,
   domain: null,
   _events: { close: [Function] },
   _maxListeners: 10,
   socket: 
    { _connecting: false,
      _handle: 
       { fd: 34,
         writeQueueSize: 0,
         owner: [Circular],
         onread: [Function: onread],
         reading: true },
      _readableState: 
       { highWaterMark: 16384,
         buffer: [],
         length: 0,
         pipes: null,
         pipesCount: 0,
         flowing: false,
         ended: false,
         endEmitted: false,
         reading: true,
         calledRead: true,
         sync: false,
         needReadable: true,
         emittedReadable: false,
         readableListening: false,
         objectMode: false,
         defaultEncoding: 'utf8',
         ranOut: false,
         awaitDrain: 0,
         readingMore: false,
         decoder: null,
         encoding: null },
      readable: true,
      domain: null,
      _events: 
       { end: [Object],
         finish: [Function: onSocketFinish],
         _socketEnd: [Function: onSocketEnd],
         drain: [Object],
         timeout: [Function],
         error: [Function],
         close: [Object] },
      _maxListeners: 10,
      _writableState: 
       { highWaterMark: 16384,
         objectMode: false,
         needDrain: false,
         ending: false,
         ended: false,
         finished: false,
         decodeStrings: false,
         defaultEncoding: 'utf8',
         length: 0,
         writing: false,
         sync: true,
         bufferProcessing: false,
         onwrite: [Function],
         writecb: null,
         writelen: 0,
         buffer: [],
         errorEmitted: false },
      writable: true,
      allowHalfOpen: true,
      onend: [Function],
      destroyed: false,
      bytesRead: 8249,
      _bytesDispatched: 0,
      _pendingData: null,
      _pendingEncoding: '',
      server: 
       { domain: null,
         _events: [Object],
         _maxListeners: 10,
         _connections: 1,
         connections: [Getter/Setter],
         _handle: [Object],
         _usingSlaves: false,
         _slaves: [],
         allowHalfOpen: true,
         httpAllowHalfOpen: false,
         timeout: 5000,
         _connectionKey: '4:0.0.0.0:23683' },
      _idleTimeout: 5000,
      _idleNext: 
       { _connecting: false,
         _handle: [Object],
         _readableState: [Object],
         readable: true,
         domain: null,
         _events: [Object],
         _maxListeners: 10,
         _writableState: [Object],
         writable: true,
         allowHalfOpen: false,
         onend: null,
         destroyed: false,
         bytesRead: 79134,
         _bytesDispatched: 14036,
         _pendingData: null,
         _pendingEncoding: '',
         _idleTimeout: 30000,
         _idleNext: [Object],
         _idlePrev: [Circular],
         _idleStart: 1459115857090,
         _monotonicStartTime: 543430569,
         pipe: [Function],
         addListener: [Function: addListener],
         on: [Function: addListener],
         pause: [Function],
         resume: [Function],
         read: [Function],
         _consuming: true },
      _idlePrev: { _idleNext: [Circular], _idlePrev: [Object] },
      _idleStart: 1459115857771,
      _monotonicStartTime: 543431251,
      parser: 
       { _headers: [],
         _url: '',
         onHeaders: [Function: parserOnHeaders],
         onHeadersComplete: [Function: parserOnHeadersComplete],
         onBody: [Function: parserOnBody],
         onMessageComplete: [Function: parserOnMessageComplete],
         socket: [Circular],
         incoming: [Circular],
         maxHeaderPairs: 2000,
         onIncoming: [Function] },
      ondata: [Function],
      _paused: false,
      _httpMessage: 
       { domain: null,
         _events: [Object],
         _maxListeners: 10,
         output: [],
         outputEncodings: [],
         writable: true,
         _last: false,
         chunkedEncoding: false,
         shouldKeepAlive: true,
         useChunkedEncodingByDefault: true,
         sendDate: true,
         _headerSent: false,
         _header: '',
         _hasBody: true,
         _trailer: '',
         finished: false,
         _hangupClose: false,
         socket: [Circular],
         connection: [Circular],
         _headers: [Object],
         _headerNames: [Object],
         write: [Function],
         end: [Function] } },
   connection: 
    { _connecting: false,
      _handle: 
       { fd: 34,
         writeQueueSize: 0,
         owner: [Circular],
         onread: [Function: onread],
         reading: true },
      _readableState: 
       { highWaterMark: 16384,
         buffer: [],
         length: 0,
         pipes: null,
         pipesCount: 0,
         flowing: false,
         ended: false,
         endEmitted: false,
         reading: true,
         calledRead: true,
         sync: false,
         needReadable: true,
         emittedReadable: false,
         readableListening: false,
         objectMode: false,
         defaultEncoding: 'utf8',
         ranOut: false,
         awaitDrain: 0,
         readingMore: false,
         decoder: null,
         encoding: null },
      readable: true,
      domain: null,
      _events: 
       { end: [Object],
         finish: [Function: onSocketFinish],
         _socketEnd: [Function: onSocketEnd],
         drain: [Object],
         timeout: [Function],
         error: [Function],
         close: [Object] },
      _maxListeners: 10,
      _writableState: 
       { highWaterMark: 16384,
         objectMode: false,
         needDrain: false,
         ending: false,
         ended: false,
         finished: false,
         decodeStrings: false,
         defaultEncoding: 'utf8',
         length: 0,
         writing: false,
         sync: true,
         bufferProcessing: false,
         onwrite: [Function],
         writecb: null,
         writelen: 0,
         buffer: [],
         errorEmitted: false },
      writable: true,
      allowHalfOpen: true,
      onend: [Function],
      destroyed: false,
      bytesRead: 8249,
      _bytesDispatched: 0,
      _pendingData: null,
      _pendingEncoding: '',
      server: 
       { domain: null,
         _events: [Object],
         _maxListeners: 10,
         _connections: 1,
         connections: [Getter/Setter],
         _handle: [Object],
         _usingSlaves: false,
         _slaves: [],
         allowHalfOpen: true,
         httpAllowHalfOpen: false,
         timeout: 5000,
         _connectionKey: '4:0.0.0.0:23683' },
      _idleTimeout: 5000,
      _idleNext: 
       { _connecting: false,
         _handle: [Object],
         _readableState: [Object],
         readable: true,
         domain: null,
         _events: [Object],
         _maxListeners: 10,
         _writableState: [Object],
         writable: true,
         allowHalfOpen: false,
         onend: null,
         destroyed: false,
         bytesRead: 79134,
         _bytesDispatched: 14036,
         _pendingData: null,
         _pendingEncoding: '',
         _idleTimeout: 30000,
         _idleNext: [Object],
         _idlePrev: [Circular],
         _idleStart: 1459115857090,
         _monotonicStartTime: 543430569,
         pipe: [Function],
         addListener: [Function: addListener],
         on: [Function: addListener],
         pause: [Function],
         resume: [Function],
         read: [Function],
         _consuming: true },
      _idlePrev: { _idleNext: [Circular], _idlePrev: [Object] },
      _idleStart: 1459115857771,
      _monotonicStartTime: 543431251,
      parser: 
       { _headers: [],
         _url: '',
         onHeaders: [Function: parserOnHeaders],
         onHeadersComplete: [Function: parserOnHeadersComplete],
         onBody: [Function: parserOnBody],
         onMessageComplete: [Function: parserOnMessageComplete],
         socket: [Circular],
         incoming: [Circular],
         maxHeaderPairs: 2000,
         onIncoming: [Function] },
      ondata: [Function],
      _paused: false,
      _httpMessage: 
       { domain: null,
         _events: [Object],
         _maxListeners: 10,
         output: [],
         outputEncodings: [],
         writable: true,
         _last: false,
         chunkedEncoding: false,
         shouldKeepAlive: true,
         useChunkedEncodingByDefault: true,
         sendDate: true,
         _headerSent: false,
         _header: '',
         _hasBody: true,
         _trailer: '',
         finished: false,
         _hangupClose: false,
         socket: [Circular],
         connection: [Circular],
         _headers: [Object],
         _headerNames: [Object],
         write: [Function],
         end: [Function] } },
   httpVersion: '1.1',
   complete: false,
   headers: 
    { 'x-forwarded-proto': 'http',
      'x-forwarded-port': '80',
      'x-forwarded-for': '167.89.125.249,127.0.0.1',
      'content-type': 'multipart/form-data; boundary=xYzZY',
      'content-length': '8782',
      'user-agent': 'SendGrid 1.0',
      host: '6f496891.ngrok.io',
      connection: 'TE, close',
      te: 'deflate,gzip;q=0.3' },
   trailers: {},
   _pendings: [],
   _pendingIndex: 0,
   url: '/webhook/sendgrid',
   method: 'POST',
   statusCode: null,
   client: 
    { _connecting: false,
      _handle: 
       { fd: 34,
         writeQueueSize: 0,
         owner: [Circular],
         onread: [Function: onread],
         reading: true },
      _readableState: 
       { highWaterMark: 16384,
         buffer: [],
         length: 0,
         pipes: null,
         pipesCount: 0,
         flowing: false,
         ended: false,
         endEmitted: false,
         reading: true,
         calledRead: true,
         sync: false,
         needReadable: true,
         emittedReadable: false,
         readableListening: false,
         objectMode: false,
         defaultEncoding: 'utf8',
         ranOut: false,
         awaitDrain: 0,
         readingMore: false,
         decoder: null,
         encoding: null },
      readable: true,
      domain: null,
      _events: 
       { end: [Object],
         finish: [Function: onSocketFinish],
         _socketEnd: [Function: onSocketEnd],
         drain: [Object],
         timeout: [Function],
         error: [Function],
         close: [Object] },
      _maxListeners: 10,
      _writableState: 
       { highWaterMark: 16384,
         objectMode: false,
         needDrain: false,
         ending: false,
         ended: false,
         finished: false,
         decodeStrings: false,
         defaultEncoding: 'utf8',
         length: 0,
         writing: false,
         sync: true,
         bufferProcessing: false,
         onwrite: [Function],
         writecb: null,
         writelen: 0,
         buffer: [],
         errorEmitted: false },
      writable: true,
      allowHalfOpen: true,
      onend: [Function],
      destroyed: false,
      bytesRead: 8249,
      _bytesDispatched: 0,
      _pendingData: null,
      _pendingEncoding: '',
      server: 
       { domain: null,
         _events: [Object],
         _maxListeners: 10,
         _connections: 1,
         connections: [Getter/Setter],
         _handle: [Object],
         _usingSlaves: false,
         _slaves: [],
         allowHalfOpen: true,
         httpAllowHalfOpen: false,
         timeout: 5000,
         _connectionKey: '4:0.0.0.0:23683' },
      _idleTimeout: 5000,
      _idleNext: 
       { _connecting: false,
         _handle: [Object],
         _readableState: [Object],
         readable: true,
         domain: null,
         _events: [Object],
         _maxListeners: 10,
         _writableState: [Object],
         writable: true,
         allowHalfOpen: false,
         onend: null,
         destroyed: false,
         bytesRead: 79134,
         _bytesDispatched: 14036,
         _pendingData: null,
         _pendingEncoding: '',
         _idleTimeout: 30000,
         _idleNext: [Object],
         _idlePrev: [Circular],
         _idleStart: 1459115857090,
         _monotonicStartTime: 543430569,
         pipe: [Function],
         addListener: [Function: addListener],
         on: [Function: addListener],
         pause: [Function],
         resume: [Function],
         read: [Function],
         _consuming: true },
      _idlePrev: { _idleNext: [Circular], _idlePrev: [Object] },
      _idleStart: 1459115857771,
      _monotonicStartTime: 543431251,
      parser: 
       { _headers: [],
         _url: '',
         onHeaders: [Function: parserOnHeaders],
         onHeadersComplete: [Function: parserOnHeadersComplete],
         onBody: [Function: parserOnBody],
         onMessageComplete: [Function: parserOnMessageComplete],
         socket: [Circular],
         incoming: [Circular],
         maxHeaderPairs: 2000,
         onIncoming: [Function] },
      ondata: [Function],
      _paused: false,
      _httpMessage: 
       { domain: null,
         _events: [Object],
         _maxListeners: 10,
         output: [],
         outputEncodings: [],
         writable: true,
         _last: false,
         chunkedEncoding: false,
         shouldKeepAlive: true,
         useChunkedEncodingByDefault: true,
         sendDate: true,
         _headerSent: false,
         _header: '',
         _hasBody: true,
         _trailer: '',
         finished: false,
         _hangupClose: false,
         socket: [Circular],
         connection: [Circular],
         _headers: [Object],
         _headerNames: [Object],
         write: [Function],
         end: [Function] } },
   _consuming: false,
   _dumped: false,
   httpVersionMajor: 1,
   httpVersionMinor: 1,
   upgrade: false,
   originalUrl: '/webhook/sendgrid',
   _parsedUrl: 
    { protocol: null,
      slashes: null,
      auth: null,
      host: null,
      port: null,
      hostname: null,
      hash: null,
      search: null,
      query: null,
      pathname: '/webhook/sendgrid',
      path: '/webhook/sendgrid',
      href: '/webhook/sendgrid' },
   body: {},
 query: {} }
</code></pre>