diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
index 5844743ff..b2645961c 100644
--- src/bp-core/bp-core-filters.php
+++ src/bp-core/bp-core-filters.php
@@ -1035,7 +1035,7 @@ add_filter( 'bp_email_get_headers', 'bp_email_set_default_headers', 6, 4 );
  */
 function bp_email_set_default_tokens( $tokens, $property_name, $transform, $email ) {
 	$tokens['site.admin-email'] = bp_get_option( 'admin_email' );
-	$tokens['site.url']         = home_url();
+	$tokens['site.url']         = bp_get_root_domain();
 	$tokens['email.subject']    = $email->get_subject();
 
 	// These options are escaped with esc_html on the way into the database in sanitize_option().
@@ -1080,9 +1080,9 @@ function bp_email_set_default_tokens( $tokens, $property_name, $transform, $emai
 	}
 
 	// Email preheader.
-	$post = $email->get_post_object();
-	if ( $post ) {
-		$tokens['email.preheader'] = sanitize_text_field( get_post_meta( $post->ID, 'bp_email_preheader', true ) );
+	$preheader = $email->get_preheader();
+	if ( $preheader ) {
+		$tokens['email.preheader'] = $preheader;
 	}
 
 	return $tokens;
diff --git src/bp-core/classes/class-bp-email.php src/bp-core/classes/class-bp-email.php
index 19c22c60e..9112bc8c0 100644
--- src/bp-core/classes/class-bp-email.php
+++ src/bp-core/classes/class-bp-email.php
@@ -69,6 +69,15 @@ class BP_Email {
 	 */
 	protected $from = null;
 
+	/**
+	 * Email preheader.
+	 *
+	 * @since 4.0.0
+	 *
+	 * @var string
+	 */
+	protected $preheader = null;
+
 	/**
 	 * Email headers.
 	 *
@@ -272,6 +281,40 @@ class BP_Email {
 		return apply_filters( 'bp_email_get_property', $retval, $property_name, $transform, $this );
 	}
 
+	/**
+	 * Get email preheader.
+	 *
+	 * @since 4.0.0
+	 */
+	public function get_preheader() {
+		if ( null !== $this->preheader ) {
+			return $this->preheader;
+		}
+
+		$preheader = '';
+
+		$post = $this->get_post_object();
+		if ( $post ) {
+			$switched = false;
+
+			// Switch to the root blog, where the email post lives.
+			if ( ! bp_is_root_blog() ) {
+				switch_to_blog( bp_get_root_blog_id() );
+				$switched = true;
+			}
+
+			$preheader = sanitize_text_field( get_post_meta( $post->ID, 'bp_email_preheader', true ) );
+
+			if ( $switched ) {
+				restore_current_blog();
+			}
+		}
+
+		$this->preheader = $preheader;
+
+		return $this->preheader;
+	}
+
 	/**
 	 * Get email headers.
 	 *
