diff --git a/include/class.thread.php b/include/class.thread.php
index 3f10ac94c4a6269ae825307986ae3ee38fbbaf32..67f9bfbfab20c8b7e52045805475190ea3b205fa 100644
--- a/include/class.thread.php
+++ b/include/class.thread.php
@@ -745,10 +745,20 @@ class ThreadEntry {
         if ($mailinfo['userId']
                 || strcasecmp($mailinfo['email'], $ticket->getEmail()) == 0) {
             $vars['message'] = $body;
-            $vars['userId'] = $mailinfo['userId'] ? $mailinfo['userId'] : $ticket->getUserId();
+            $vars['userId'] = $mailinfo['userId'] ?: $ticket->getUserId();
+            return $ticket->postMessage($vars, 'Email');
+        }
+        // Consider collaborator role (disambiguate staff members as
+        // collaborators)
+        elseif (($E = UserEmail::lookup($mailinfo['email']))
+            && ($C = Collaborator::lookup(array(
+                'ticketId' => $ticket->getId(), 'userId' => $E->user_id
+            )))
+        ) {
+            $vars['userId'] = $C->getUserId();
+            $vars['message'] = $body;
             return $ticket->postMessage($vars, 'Email');
         }
-        // XXX: Consider collaborator role
         elseif ($mailinfo['staffId']
                 || ($mailinfo['staffId'] = Staff::getIdByEmail($mailinfo['email']))) {
             $vars['staffId'] = $mailinfo['staffId'];