diff --git tests/phpunit/tests/privacy/wpPrivacySendPersonalDataExportEmail.php tests/phpunit/tests/privacy/wpPrivacySendPersonalDataExportEmail.php
new file mode 100644
index 0000000..9994247
--- /dev/null
+++ tests/phpunit/tests/privacy/wpPrivacySendPersonalDataExportEmail.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Test cases for the `wp_privacy_send_personal_data_export_email()` function.
+ *
+ * @package WordPress
+ * @subpackage UnitTests
+ * @since 4.9.6
+ */
+
+/**
+ * Tests_Privacy_WpPrivacySendPersonalDataExportEmail class.
+ *
+ * @since 4.9.6
+ *
+ * @group privacy
+ * @covers wp_privacy_send_personal_data_export_email
+ */
+class Tests_Privacy_WpPrivacySendPersonalDataExportEmail extends WP_UnitTestCase {
+	/**
+	 * Request ID
+	 *
+	 * @since 4.9.6
+	 *
+	 * @var int $request_id
+	 */
+	protected static $request_id;
+
+	/**
+	 * Requester Email
+	 *
+	 * @since 4.9.6
+	 *
+	 * @var int $requester_email
+	 */
+	protected static $requester_email;
+
+	/**
+	 * Reset the mocked phpmailer instance before each test method.
+	 *
+	 * @since 4.9.6
+	 */
+	function setUp() {
+		parent::setUp();
+		reset_phpmailer_instance();
+	}
+
+	/**
+	 * Reset the mocked phpmailer instance after each test method.
+	 *
+	 * @since 4.9.6
+	 */
+	function tearDown() {
+		reset_phpmailer_instance();
+		parent::tearDown();
+	}
+
+	/**
+	 * Create user request fixtures shared by test methods.
+	 *
+	 * @param WP_UnitTest_Factory $factory Factory.
+	 */
+	public static function wpSetUpBeforeClass( $factory ) {
+		self::$requester_email = 'requester@example.com';
+		self::$request_id      = wp_create_user_request( self::$requester_email, 'export_personal_data' );
+		$confirmed             = _wp_privacy_account_request_confirmed( self::$request_id );
+	}
+
+	/**
+	 * The function should send an export link to the requester when the user request is confirmed.
+	 *
+	 * @ticket 43546
+	 */
+	public function test_function_should_send_export_link_to_requester() {
+		$archive_url = wp_privacy_exports_url() . 'wp-personal-data-file-requester-at-example-com-Wv0RfMnGIkl4CFEDEEkSeIdfLmaUrLsl.zip';
+		update_post_meta( self::$request_id, '_export_file_url', $archive_url );
+
+		wp_privacy_send_personal_data_export_email( self::$request_id );
+
+		$mailer = tests_retrieve_phpmailer_instance();
+		$this->assertSame( 'request-confirmed', get_post_status( self::$request_id ) );
+		$this->assertSame( self::$requester_email, $mailer->get_recipient( 'to' )->address );
+		$this->assertContains( 'Personal Data Export', $mailer->get_sent()->subject );
+		$this->assertContains( $archive_url, $mailer->get_sent()->body );
+		$this->assertContains( 'please download it', $mailer->get_sent()->body );
+	}
+
+	/**
+	 * The function should error when the request ID is invalid.
+	 *
+	 * @ticket 43546
+	 */
+	public function test_function_should_error_when_request_id_invalid() {
+		$request_id = 0; // Invalid request ID.
+		$email_sent = wp_privacy_send_personal_data_export_email( $request_id );
+		$this->assertWPError( $email_sent );
+		$this->assertSame( 'Invalid request ID when sending personal data export email.', $email_sent->get_error_message() );
+
+		$request_id = PHP_INT_MAX; // Invalid request ID.
+		$email_sent = wp_privacy_send_personal_data_export_email( $request_id );
+		$this->assertWPError( $email_sent );
+		$this->assertSame( 'Invalid request ID when sending personal data export email.', $email_sent->get_error_message() );
+	}
+
+	/**
+	 * The export expiration should be filterable.
+	 *
+	 * @ticket 43546
+	 */
+	public function test_export_expiration_should_be_filterable() {
+		add_filter( 'wp_privacy_export_expiration', array( $this, 'modify_export_expiration' ) );
+		wp_privacy_send_personal_data_export_email( self::$request_id );
+		remove_filter( 'wp_privacy_export_expiration', array( $this, 'modify_export_expiration' ) );
+
+		$mailer = tests_retrieve_phpmailer_instance();
+		$this->assertContains( 'we will automatically delete the file on December 18, 2017,', $mailer->get_sent()->body );
+	}
+
+	/**
+	 * Filter callback that modifies the lifetime, in seconds, of a personal data export file.
+	 *
+	 * @since 4.9.6
+	 *
+	 * @param  int $expiration The expiration age of the export, in seconds.
+	 * @return int $expiration The expiration age of the export, in seconds.
+	 */
+	public function modify_export_expiration( $expiration ) {
+		// Adjust the expiration date to "Mon, 18 Dec 2017 21:30:00 GMT" with Unix Timestamp 1513632600.
+		$expiration = 1513632600 - time();
+		return $expiration;
+	}
+
+	/**
+	 * The email content should be filterable.
+	 *
+	 * @ticket 43546
+	 */
+	public function test_email_content_should_be_filterable() {
+		add_filter( 'wp_privacy_personal_data_email_content', array( $this, 'modify_email_content' ), 10, 2 );
+		wp_privacy_send_personal_data_export_email( self::$request_id );
+		remove_filter( 'wp_privacy_personal_data_email_content', array( $this, 'modify_email_content' ) );
+
+		$mailer = tests_retrieve_phpmailer_instance();
+		$this->assertContains( 'Custom content for request ID:' . self::$request_id, $mailer->get_sent()->body );
+	}
+
+	/**
+	 * Filter callback that modifies the text of the email sent with a personal data export file.
+	 *
+	 * @since 4.9.6
+	 *
+	 * @param string $email_text     Text in the email.
+	 * @param int    $request_id     The request ID for this personal data export.
+	 * @return string $email_text     Text in the email.
+	 */
+	public function modify_email_content( $email_text, $request_id ) {
+		$email_text = 'Custom content for request ID:' . $request_id;
+		return $email_text;
+	}
+
+}
