Index: src/applications/differential/mail/DifferentialReplyHandler.php
===================================================================
--- src/applications/differential/mail/DifferentialReplyHandler.php
+++ src/applications/differential/mail/DifferentialReplyHandler.php
@@ -129,28 +129,48 @@
 
     $body = $this->enhanceBodyWithAttachments($body, $attachments);
 
+    $xactions = array();
+
+    if ($command && ($command != DifferentialAction::ACTION_COMMENT)) {
+      $xactions[] = id(new DifferentialTransaction())
+        ->setTransactionType(DifferentialTransaction::TYPE_ACTION)
+        ->setNewValue($command);
+    }
+
+    if (strlen($body)) {
+      $xactions[] = id(new DifferentialTransaction())
+        ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
+        ->attachComment(
+          id(new DifferentialTransactionComment())
+            ->setContent($body));
+    }
+
+    $editor = id(new DifferentialTransactionEditor())
+      ->setActor($actor)
+      ->setExcludeMailRecipientPHIDs($this->getExcludeMailRecipientPHIDs())
+      ->setContinueOnMissingFields(true)
+      ->setContinueOnNoEffect(true);
+
+    // NOTE: We have to be careful about this because Facebook's
+    // implementation jumps straight into handleAction() and will not have
+    // a PhabricatorMetaMTAReceivedMail object.
+    if ($this->receivedMail) {
+      $content_source = PhabricatorContentSource::newForSource(
+        PhabricatorContentSource::SOURCE_EMAIL,
+        array(
+          'id' => $this->receivedMail->getID(),
+        ));
+      $editor->setContentSource($content_source);
+      $editor->setParentMessageID($this->receivedMail->getMessageID());
+    } else {
+      $content_source = PhabricatorContentSource::newForSource(
+        PhabricatorContentSource::SOURCE_LEGACY,
+        array());
+      $editor->setContentSource($content_source);
+    }
+
     try {
-      $editor = new DifferentialCommentEditor(
-        $this->getMailReceiver(),
-        $command);
-      $editor->setActor($actor);
-      $editor->setExcludeMailRecipientPHIDs(
-        $this->getExcludeMailRecipientPHIDs());
-
-      // NOTE: We have to be careful about this because Facebook's
-      // implementation jumps straight into handleAction() and will not have
-      // a PhabricatorMetaMTAReceivedMail object.
-      if ($this->receivedMail) {
-        $content_source = PhabricatorContentSource::newForSource(
-          PhabricatorContentSource::SOURCE_EMAIL,
-          array(
-            'id' => $this->receivedMail->getID(),
-          ));
-        $editor->setContentSource($content_source);
-        $editor->setParentMessageID($this->receivedMail->getMessageID());
-      }
-      $editor->setMessage($body);
-      $editor->save();
+      $editor->applyTransactions($this->getMailReceiver(), $xactions);
     } catch (Exception $ex) {
       if ($this->receivedMail) {
         $error_body = $this->receivedMail->getRawTextBody();
Index: src/applications/differential/mail/DifferentialRevisionMailReceiver.php
===================================================================
--- src/applications/differential/mail/DifferentialRevisionMailReceiver.php
+++ src/applications/differential/mail/DifferentialRevisionMailReceiver.php
@@ -18,6 +18,7 @@
     $results = id(new DifferentialRevisionQuery())
       ->setViewer($viewer)
       ->withIDs(array($id))
+      ->needReviewerStatus(true)
       ->execute();
 
     return head($results);