diff --git src/bp-messages/bp-messages-template.php src/bp-messages/bp-messages-template.php
index ad380b132..c28fbedbd 100644
--- src/bp-messages/bp-messages-template.php
+++ src/bp-messages/bp-messages-template.php
@@ -273,20 +273,28 @@ function bp_message_thread_to() {
 /**
  * Output the permalink for a particular thread.
  *
+ * @since 2.9.0 Introduced `$user_id` parameter.
+ *
  * @param int $thread_id Optional. ID of the thread. Default: current thread
  *                       being iterated on in the loop.
+ * @param int $user_id   Optional. ID of the user relative to whom the link
+ *                       should be generated. Default: ID of logged-in user.
  */
-function bp_message_thread_view_link( $thread_id = 0 ) {
-	echo bp_get_message_thread_view_link( $thread_id );
+function bp_message_thread_view_link( $thread_id = 0, $user_id = null ) {
+	echo bp_get_message_thread_view_link( $thread_id, $user_id );
 }
 	/**
 	 * Get the permalink of a particular thread.
 	 *
+	 * @since 2.9.0 Introduced `$user_id` parameter.
+	 *
 	 * @param int $thread_id Optional. ID of the thread. Default: current
 	 *                       thread being iterated on in the loop.
+	 * @param int $user_id   Optional. ID of the user relative to whom the link
+	 *                       should be generated. Default: ID of logged-in user.
 	 * @return string
 	 */
-	function bp_get_message_thread_view_link( $thread_id = 0 ) {
+	function bp_get_message_thread_view_link( $thread_id = 0, $user_id = null ) {
 		global $messages_template;
 
 		if ( empty( $messages_template ) && (int) $thread_id > 0 ) {
@@ -295,16 +303,23 @@ function bp_message_thread_view_link( $thread_id = 0 ) {
 			$thread_id = $messages_template->thread->thread_id;
 		}
 
+		if ( null === $user_id ) {
+			$user_id = bp_loggedin_user_id();
+		}
+
+		$domain = bp_core_get_user_domain( $user_id );
+
 		/**
 		 * Filters the permalink of a particular thread.
 		 *
 		 * @since 1.0.0
 		 * @since 2.6.0 Added the `$thread_id` parameter.
+		 * @since 2.9.0 Added the `$user_id` parameter.
 		 *
 		 * @param string $value     Permalink of a particular thread.
 		 * @param int    $thread_id ID of the thread.
 		 */
-		return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ), $thread_id );
+		return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( $domain . bp_get_messages_slug() . '/view/' . $thread_id ), $thread_id, $user_id );
 	}
 
 /**
diff --git src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php
index d71ded236..9e0dded3c 100644
--- src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php
+++ src/bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php
@@ -115,7 +115,7 @@ do_action( 'bp_before_member_messages_loop' ); ?>
 						<?php endif; ?>
 
 						<td class="thread-info">
-							<p><a href="<?php bp_message_thread_view_link(); ?>" class="bp-tooltip" data-bp-tooltip="<?php esc_attr_e( "View Message", 'buddypress' ); ?>" aria-label="<?php esc_attr_e( "View Message", 'buddypress' ); ?>"><?php bp_message_thread_subject(); ?></a></p>
+							<p><a href="<?php bp_message_thread_view_link( bp_get_message_thread_id(), bp_displayed_user_id() ); ?>" class="bp-tooltip" data-bp-tooltip="<?php esc_attr_e( "View Message", 'buddypress' ); ?>" aria-label="<?php esc_attr_e( "View Message", 'buddypress' ); ?>"><?php bp_message_thread_subject(); ?></a></p>
 							<p class="thread-excerpt"><?php bp_message_thread_excerpt(); ?></p>
 						</td>
 
