Index: src/wp-admin/includes/admin-filters.php
===================================================================
--- src/wp-admin/includes/admin-filters.php	(revision 45013)
+++ src/wp-admin/includes/admin-filters.php	(working copy)
@@ -135,7 +135,7 @@
 // Privacy hooks
 add_filter( 'wp_privacy_personal_data_erasure_page', 'wp_privacy_process_personal_data_erasure_page', 10, 5 );
 add_filter( 'wp_privacy_personal_data_export_page', 'wp_privacy_process_personal_data_export_page', 10, 7 );
-add_action( 'wp_privacy_personal_data_export_file', 'wp_privacy_generate_personal_data_export_file', 10 );
+add_action( 'wp_privacy_personal_data_export_file', 'wp_privacy_generate_personal_data_export_file', 10, 3 );
 add_action( 'wp_privacy_personal_data_erased', '_wp_privacy_send_erasure_fulfillment_notification', 10 );
 
 // Privacy policy text changes check.
Index: src/wp-admin/includes/file.php
===================================================================
--- src/wp-admin/includes/file.php	(revision 45013)
+++ src/wp-admin/includes/file.php	(working copy)
@@ -2155,16 +2155,23 @@
  * Generate the personal data export file.
  *
  * @since 4.9.6
+ * @since 5.2.0 Added the $request parameter.
+ * @since 5.2.0 Added the $has_export_data parameter.
  *
- * @param int $request_id The export request ID.
+ * @param int             $request_id      The export request ID.
+ *
+ * @param WP_User_Request $request         The export request.
+ * @param bool            $has_export_data Wether there is personal data to export.
  */
-function wp_privacy_generate_personal_data_export_file( $request_id ) {
+function wp_privacy_generate_personal_data_export_file( $request_id, $request, $has_export_data ) {
 	if ( ! class_exists( 'ZipArchive' ) ) {
 		wp_send_json_error( __( 'Unable to generate export file. ZipArchive not available.' ) );
 	}
 
-	// Get the request data.
-	$request = wp_get_user_request_data( $request_id );
+	if ( ! $request ) {
+		// Get the request data.
+		$request = wp_get_user_request_data( $request_id );
+	}
 
 	if ( ! $request || 'export_personal_data' !== $request->action_name ) {
 		wp_send_json_error( __( 'Invalid request ID when generating export file.' ) );
@@ -2274,6 +2281,10 @@
 		fwrite( $file, wp_privacy_generate_personal_data_export_group_html( $group_data ) );
 	}
 
+	if ( ! $has_export_data ) {
+		fwrite( $file, '<strong>' . esc_html__( 'No personal data found.' ) . '</strong>' );
+	}
+
 	fwrite( $file, "</body>\n" );
 
 	// Close HTML.
@@ -2340,12 +2351,18 @@
 /**
  * Send an email to the user with a link to the personal data export file
  *
+ * The link to the export file is only included in the email content when there
+ * is personal data to export.
+ *
  * @since 4.9.6
+ * @since 5.2.0 Added the $has_export_data parameter.
  *
- * @param int $request_id The request ID for this personal data export.
+ * @param int  $request_id      The request ID for this personal data export.
+ * @param bool $has_export_data Whether there is personal data to export.
+ *
  * @return true|WP_Error True on success or `WP_Error` on failure.
  */
-function wp_privacy_send_personal_data_export_email( $request_id ) {
+function wp_privacy_send_personal_data_export_email( $request_id, $has_export_data = true ) {
 	// Get the request data.
 	$request = wp_get_user_request_data( $request_id );
 
@@ -2358,8 +2375,8 @@
 	$expiration_date = date_i18n( get_option( 'date_format' ), time() + $expiration );
 
 	/* translators: Do not translate EXPIRATION, LINK, SITENAME, SITEURL: those are placeholders. */
-	$email_text = __(
-		'Howdy,
+	if ( $has_export_data ) {
+		$email_text = __( 'Howdy,
 
 Your request for an export of personal data has been completed. You may
 download your personal data by clicking on the link below. For privacy
@@ -2370,25 +2387,60 @@
 
 Regards,
 All at ###SITENAME###
-###SITEURL###'
-	);
+###SITEURL###' );
 
-	/**
-	 * Filters the text of the email sent with a personal data export file.
-	 *
-	 * The following strings have a special meaning and will get replaced dynamically:
-	 * ###EXPIRATION###         The date when the URL will be automatically deleted.
-	 * ###LINK###               URL of the personal data export file for the user.
-	 * ###SITENAME###           The name of the site.
-	 * ###SITEURL###            The URL to the site.
-	 *
-	 * @since 4.9.6
-	 *
-	 * @param string $email_text     Text in the email.
-	 * @param int    $request_id     The request ID for this personal data export.
-	 */
-	$content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id );
+		/**
+		 * Filters the text of the email sent when personal data exists to export.
+		 *
+		 * The following strings have a special meaning and will get replaced dynamically:
+		 * ###EXPIRATION###         The date when the URL will be automatically deleted.
+		 * ###LINK###               URL of the personal data export file for the user.
+		 * ###SITENAME###           The name of the site.
+		 * ###SITEURL###            The URL to the site.
+		 *
+		 * @since 4.9.6
+		 * @since 5.3.0 $has_export_data argument added.
+		 *
+		 * @param string $email_text      Text in the email.
+		 * @param int    $request_id      The request ID for this personal data export.
+		 * @param bool   $has_export_data Whether there is personal data to export.
+		 */
+		$content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id, $has_export_data );
+	} else {
+		/* translators: Do not translate EXPIRATION, LINK, SITENAME, SITEURL: those are placeholders. */
+		$email_text = __( 'Howdy,
+Your request for an export of personal data has been completed.
 
+###SITENAME### has identified no personal data associated with this email address.
+
+You may download your personal data by clicking on the link below. For privacy
+and security, we will automatically delete the file on ###EXPIRATION###,
+so please download it before then.
+
+###LINK###
+
+Regards,
+All at ###SITENAME###
+###SITEURL###' );
+
+		/**
+		 * Filters the text of the email sent when no personal data exists to export.
+		 *
+		 * The following strings have a special meaning and will get replaced dynamically:
+		 * ###EXPIRATION###         The date when the URL will be automatically deleted.
+		 * ###LINK###               URL of the personal data export file for the user.
+		 * ###SITENAME###           The name of the site.
+		 * ###SITEURL###            The URL to the site.
+		 *
+		 * @since 5.3.0
+		 *
+		 * @param string $email_text      Text in the email.
+		 * @param int    $request_id      The request ID for this personal data export.
+		 * @param bool   $has_export_data Whether there is personal data to export.
+		 */
+		$content = apply_filters( 'wp_privacy_personal_data_email_content_no_data', $email_text, $request_id, $has_export_data );
+	}
+
 	$email_address   = $request->email;
 	$export_file_url = get_post_meta( $request_id, '_export_file_url', true );
 	$site_name       = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
@@ -2396,7 +2448,6 @@
 
 	$content = str_replace( '###EXPIRATION###', $expiration_date, $content );
 	$content = str_replace( '###LINK###', esc_url_raw( $export_file_url ), $content );
-	$content = str_replace( '###EMAIL###', $email_address, $content );
 	$content = str_replace( '###SITENAME###', $site_name, $content );
 	$content = str_replace( '###SITEURL###', esc_url_raw( $site_url ), $content );
 
@@ -2508,21 +2559,27 @@
 	delete_post_meta( $request_id, '_export_data_raw' );
 	update_post_meta( $request_id, '_export_data_grouped', $groups );
 
+	$has_export_data = ! empty( $groups );
+
 	/**
 	 * Generate the export file from the collected, grouped personal data.
 	 *
 	 * @since 4.9.6
+	 * @since 5.3.0 Added the $request parameter.
+	 * @since 5.3.0 Added the $has_export_data parameter.
 	 *
-	 * @param int $request_id The export request ID.
+	 * @param int             $request_id      The export request ID.
+	 * @param WP_User_Request $request         The export request.
+	 * @param bool            $has_export_data Whether there is personal data to export.
 	 */
-	do_action( 'wp_privacy_personal_data_export_file', $request_id );
+	do_action( 'wp_privacy_personal_data_export_file', $request_id, $request, $has_export_data );
 
 	// Clear the grouped data now that it is no longer needed.
 	delete_post_meta( $request_id, '_export_data_grouped' );
 
 	// If the destination is email, send it now.
 	if ( $send_as_email ) {
-		$mail_success = wp_privacy_send_personal_data_export_email( $request_id );
+		$mail_success = wp_privacy_send_personal_data_export_email( $request_id, $has_export_data );
 		if ( is_wp_error( $mail_success ) ) {
 			wp_send_json_error( $mail_success->get_error_message() );
 		}
Index: tests/phpunit/tests/privacy/wpPrivacyGeneratePersonalDataExportFile.php
===================================================================
--- tests/phpunit/tests/privacy/wpPrivacyGeneratePersonalDataExportFile.php	(revision 45013)
+++ tests/phpunit/tests/privacy/wpPrivacyGeneratePersonalDataExportFile.php	(working copy)
@@ -26,6 +26,15 @@
 	protected static $export_request_id;
 
 	/**
+	 * An Export Request
+	 *
+	 * @since 5.3.0
+	 *
+	 * @var int $export_request
+	 */
+	protected static $export_request;
+
+	/**
 	 * The full path to the export file for the current test method.
 	 *
 	 * @since 5.2.0
@@ -52,6 +61,7 @@
 	 */
 	public static function wpSetUpBeforeClass( $factory ) {
 		self::$export_request_id = wp_create_user_request( 'export-requester@example.com', 'export_personal_data' );
+		self::$export_request = wp_get_user_request_data( self::$export_request_id );
 		update_post_meta( self::$export_request_id, '_export_data_grouped', array() );
 		self::$exports_dir = wp_privacy_exports_dir();
 	}
@@ -162,10 +172,11 @@
 	 */
 	public function test_rejects_remove_requests() {
 		$request_id = wp_create_user_request( 'removal-requester@example.com', 'remove_personal_data' );
+		$request    = wp_get_user_request_data( $request_id );
 
 		$this->setExpectedException( 'WPDieException' );
 		$this->expectOutputString( '{"success":false,"data":"Invalid request ID when generating export file."}' );
-		wp_privacy_generate_personal_data_export_file( $request_id );
+		wp_privacy_generate_personal_data_export_file( $request_id, $request, false );
 	}
 
 	/**
@@ -176,7 +187,7 @@
 	public function test_invalid_request_id() {
 		$this->setExpectedException( 'WPDieException' );
 		$this->expectOutputString( '{"success":false,"data":"Invalid request ID when generating export file."}' );
-		wp_privacy_generate_personal_data_export_file( 123456789 );
+		wp_privacy_generate_personal_data_export_file( 123456789, null, false );
 	}
 
 	/**
@@ -194,9 +205,11 @@
 			)
 		);
 
+		$request = wp_get_user_request_data( $request_id );
+
 		$this->setExpectedException( 'WPDieException' );
 		$this->expectOutputString( '{"success":false,"data":"Invalid email address when generating export file."}' );
-		wp_privacy_generate_personal_data_export_file( $request_id );
+		wp_privacy_generate_personal_data_export_file( $request_id, $request, false );
 	}
 
 	/**
@@ -210,17 +223,18 @@
 
 		$this->setExpectedException( 'WPDieException' );
 		$this->expectOutputString( '{"success":false,"data":"Unable to create export folder."}' );
-		wp_privacy_generate_personal_data_export_file( self::$export_request_id );
+		wp_privacy_generate_personal_data_export_file( self::$export_request_id, self::$export_request, false );
 	}
 
 	/**
 	 * Test that an index.html file can be added to the export directory.
 	 *
 	 * @ticket 44233
+	 * @ticket 44133 Supplied new params for request and has_export_data
 	 */
 	public function test_creates_index_in_export_folder() {
 		$this->expectOutputString( '' );
-		wp_privacy_generate_personal_data_export_file( self::$export_request_id );
+		wp_privacy_generate_personal_data_export_file( self::$export_request_id, self::$export_request, false );
 
 		$this->assertTrue( file_exists( self::$exports_dir . 'index.html' ) );
 	}
@@ -229,9 +243,10 @@
 	 * Test that an export file is successfully created.
 	 *
 	 * @ticket 44233
+	 * @ticket 44133 Supplied new params for request and has_export_data
 	 */
 	public function test_can_succeed() {
-		wp_privacy_generate_personal_data_export_file( self::$export_request_id );
+		wp_privacy_generate_personal_data_export_file( self::$export_request_id, self::$export_request, false );
 
 		$this->assertTrue( file_exists( $this->export_file_name ) );
 	}
@@ -240,10 +255,11 @@
 	 * Test the export file has all the expected parts.
 	 *
 	 * @ticket 44233
+	 * @ticket 44133 Supplied new params for request and has_export_data
 	 */
 	public function test_contents() {
 		$this->expectOutputString( '' );
-		wp_privacy_generate_personal_data_export_file( self::$export_request_id );
+		wp_privacy_generate_personal_data_export_file( self::$export_request_id, self::$export_request, false );
 		$this->assertTrue( file_exists( $this->export_file_name ) );
 
 		$report_dir = trailingslashit( self::$exports_dir . 'test_contents' );
