diff --git a/src/bp-core/classes/class-bp-email-address.php b/src/bp-core/classes/class-bp-email-address.php
new file mode 100644
index 000000000..2340cc42b
--- /dev/null
+++ b/src/bp-core/classes/class-bp-email-address.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Interface for objects that have email address properties (address, name).
+ *
+ * @since 5.0.0
+ */
+
+interface BP_Email_Address {
+	/**
+	 * Gets the email address of the user.
+	 *
+	 * @since 5.0.0
+	 */
+	public function get_address();
+
+	/**
+	 * Gets the display name of the user.
+	 *
+	 * @since 5.0.0
+	 */
+	public function get_name();
+
+	/**
+	 * Sets the email address of the user.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param string $email_address Email address.
+	 */
+	public function set_address( $email_address );
+
+	/**
+	 * Sets the name of the user.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param string $name Name.
+	 */
+	public function set_name( $name );
+}
diff --git a/src/bp-core/classes/class-bp-email-person.php b/src/bp-core/classes/class-bp-email-person.php
new file mode 100644
index 000000000..554507318
--- /dev/null
+++ b/src/bp-core/classes/class-bp-email-person.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Base class for email "persons" (recipient, sender, Reply-To, etc).
+ *
+ * @since 5.0.0
+ */
+
+abstract class BP_Email_Person implements BP_Email_Address {
+	/**
+	 * Recipient's email address.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @var string
+	 */
+	protected $address = '';
+
+	/**
+	 * Recipient's name.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @var string
+	 */
+	protected $name = '';
+
+	/**
+	 * Gets the email address of the user.
+	 *
+	 * @since 5.0.0
+	 */
+	public function get_address() {
+		/**
+		 * Filters an email user's address before it's returned.
+		 *
+		 * @since 5.0.0
+		 *
+		 * @param string        $address User's address.
+		 * @param BP_Email_User $user    Current instance of the email user class.
+		 */
+		return apply_filters( 'bp_email_user_get_address', $this->address, $this );
+	}
+
+	/**
+	 * Gets the email name of the user.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @return string
+	 */
+	public function get_name() {
+		/**
+		 * Filters an email user's name before it's returned.
+		 *
+		 * @since 5.0.0
+		 *
+		 * @param string        $name Recipient's name.
+		 * @param BP_Email_User $user Current instance of the email user class.
+		 */
+		return apply_filters( 'bp_email_recipient_get_name', $this->name, $this );
+	}
+
+	/**
+	 * Sets the email address of the user.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param string $email_address Email address.
+	 */
+	public function set_address( $email_address ) {
+		$this->address = $email_address;
+	}
+
+	/**
+	 * Sets the name of the user.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param string $name Name.
+	 */
+	public function set_name( $name ) {
+		$this->name = $name;
+	}
+}
diff --git a/src/bp-core/classes/class-bp-email-recipient.php b/src/bp-core/classes/class-bp-email-recipient.php
index 4cc17c4de..a22e10dda 100644
--- a/src/bp-core/classes/class-bp-email-recipient.php
+++ b/src/bp-core/classes/class-bp-email-recipient.php
@@ -14,25 +14,7 @@ defined( 'ABSPATH' ) || exit;
  *
  * @since 2.5.0
  */
-class BP_Email_Recipient {
-
-	/**
-	 * Recipient's email address.
-	 *
-	 * @since 2.5.0
-	 *
-	 * @var string
-	 */
-	protected $address = '';
-
-	/**
-	 * Recipient's name.
-	 *
-	 * @since 2.5.0
-	 *
-	 * @var string
-	 */
-	protected $name = '';
+class BP_Email_Recipient extends BP_Email_Person {
 
 	/**
 	 * Optional. A `WP_User` object relating to this recipient.
@@ -88,7 +70,7 @@ class BP_Email_Recipient {
 
 		// Set address if we have one.
 		if ( ! empty( $address ) ) {
-			$this->address = sanitize_email( $address );
+			$this->set_address( sanitize_email( $address ) );
 		}
 
 		// Still no user object; try to query user by email address.
@@ -101,14 +83,14 @@ class BP_Email_Recipient {
 			// This is escaped with esc_html in bp_core_get_user_displayname()
 			$wp_name = wp_specialchars_decode( bp_core_get_user_displayname( $this->user_object->ID ), ENT_QUOTES );
 
-			$this->address = $this->user_object->user_email;
-			$this->name    = sanitize_text_field( $wp_name );
+			$this->set_address( $this->user_object->user_email );
+			$this->set_name( $wp_name );
 
 		}
 
 		// Custom name override.
 		if ( $name ) {
-			$this->name = $name;
+			$this->set_name( $name );
 		}
 
 		/**
@@ -132,16 +114,17 @@ class BP_Email_Recipient {
 	 * @return string
 	 */
 	public function get_address() {
+		$address = parent::get_address();
 
 		/**
 		 * Filters the recipient's address before it's returned.
 		 *
 		 * @since 2.5.0
 		 *
-		 * @param string $address Recipient's address.
-		 * @param BP_Email $recipient $this Current instance of the email recipient class.
+		 * @param string             $address   Recipient's address.
+		 * @param BP_Email_Recipient $recipient Current instance of the email recipient class.
 		 */
-		return apply_filters( 'bp_email_recipient_get_address', $this->address, $this );
+		return apply_filters( 'bp_email_recipient_get_address', $address, $this );
 	}
 
 	/**
@@ -152,16 +135,17 @@ class BP_Email_Recipient {
 	 * @return string
 	 */
 	public function get_name() {
+		$name = parent::get_name();
 
 		/**
 		 * Filters the recipient's name before it's returned.
 		 *
 		 * @since 2.5.0
 		 *
-		 * @param string $name Recipient's name.
-		 * @param BP_Email $recipient $this Current instance of the email recipient class.
+		 * @param string             $name      Recipient's name.
+		 * @param BP_Email_Recipient $recipient Current instance of the email recipient class.
 		 */
-		return apply_filters( 'bp_email_recipient_get_name', $this->name, $this );
+		return apply_filters( 'bp_email_recipient_get_name', $name, $this );
 	}
 
 	/**
diff --git a/src/bp-core/classes/class-bp-email-sender.php b/src/bp-core/classes/class-bp-email-sender.php
new file mode 100644
index 000000000..f4fcfaab6
--- /dev/null
+++ b/src/bp-core/classes/class-bp-email-sender.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Email sender object (From, Reply-To).
+ *
+ * @since 5.0.0
+ */
+
+class BP_Email_Sender extends BP_Email_Person {}
diff --git a/src/bp-core/classes/class-bp-email.php b/src/bp-core/classes/class-bp-email.php
index 9112bc8c0..78188fe4e 100644
--- a/src/bp-core/classes/class-bp-email.php
+++ b/src/bp-core/classes/class-bp-email.php
@@ -65,7 +65,7 @@ class BP_Email {
 	 *
 	 * @since 2.5.0
 	 *
-	 * @var BP_Email_Recipient Sender details.
+	 * @var BP_Email_Sender Sender details.
 	 */
 	protected $from = null;
 
@@ -101,7 +101,7 @@ class BP_Email {
 	 *
 	 * @since 2.5.0
 	 *
-	 * @var BP_Email_Recipient "Reply to" details.
+	 * @var BP_Email_Sender "Reply to" details.
 	 */
 	protected $reply_to = null;
 
@@ -430,7 +430,7 @@ class BP_Email {
 	 *
 	 * @param string $transform Optional. How to transform the return value.
 	 *                          Accepts 'raw' (default) or 'replace-tokens'.
-	 * @return BP_Email_Recipient "From" recipient.
+	 * @return BP_Email_Sender "From" recipient.
 	 */
 	public function get_from( $transform = 'raw' ) {
 		return $this->get( 'from', $transform );
@@ -738,7 +738,10 @@ class BP_Email {
 	 * @return BP_Email
 	 */
 	public function set_from( $email_address, $name = '' ) {
-		$from = new BP_Email_Recipient( $email_address, $name );
+		$from = new BP_Email_Sender();
+
+		$from->set_address( $email_address );
+		$from->set_name( $name );
 
 		/**
 		 * Filters the new value of the email's "from" property.
@@ -810,7 +813,10 @@ class BP_Email {
 	 * @return BP_Email
 	 */
 	public function set_reply_to( $email_address, $name = '' ) {
-		$reply_to = new BP_Email_Recipient( $email_address, $name );
+		$reply_to = new BP_Email_Sender();
+
+		$reply_to->set_address( $email_address );
+		$reply_to->set_name( $name );
 
 		/**
 		 * Filters the new value of the email's "reply to" property.
diff --git a/src/class-buddypress.php b/src/class-buddypress.php
index 0aba05988..e04620019 100644
--- a/src/class-buddypress.php
+++ b/src/class-buddypress.php
@@ -555,7 +555,10 @@ class BuddyPress {
 			'BP_Customizer_Control_Range'  => 'core',
 			'BP_Date_Query'                => 'core',
 			'BP_Email_Delivery'            => 'core',
+			'BP_Email_Address'             => 'core',
 			'BP_Email_Recipient'           => 'core',
+			'BP_Email_Sender'              => 'core',
+			'BP_Email_Person'              => 'core',
 			'BP_Email'                     => 'core',
 			'BP_Embed'                     => 'core',
 			'BP_Media_Extractor'           => 'core',
