diff --git src/wp-includes/comment.php src/wp-includes/comment.php
index ba60070fd7..7398f99dd9 100644
--- src/wp-includes/comment.php
+++ src/wp-includes/comment.php
@@ -3005,8 +3005,12 @@ function wp_handle_comment_submission( $comment_data ) {
 		 * @param int $comment_post_ID Post ID.
 		 */
 		do_action( 'comment_on_draft', $comment_post_ID );
-
-		return new WP_Error( 'comment_on_draft' );
+		
+		if ( current_user_can( 'read_post', $comment_post_ID ) ) {
+			return new WP_Error( 'comment_on_draft', __( 'Sorry, comments are not allowed for this item.' ), 403 );
+		} else {
+			return new WP_Error( 'comment_on_draft' );
+		}
 
 	} elseif ( post_password_required( $comment_post_ID ) ) {
 
diff --git tests/phpunit/tests/comment-submission.php tests/phpunit/tests/comment-submission.php
index f5d6cc08d1..ca33fbc277 100644
--- tests/phpunit/tests/comment-submission.php
+++ tests/phpunit/tests/comment-submission.php
@@ -68,7 +68,6 @@ class Tests_Comment_Submission extends WP_UnitTestCase {
 	}
 
 	public function test_submitting_comment_to_draft_post_returns_error() {
-
 		$error = 'comment_on_draft';
 
 		$this->assertSame( 0, did_action( $error ) );
@@ -84,7 +83,36 @@ class Tests_Comment_Submission extends WP_UnitTestCase {
 		$this->assertSame( 1, did_action( $error ) );
 		$this->assertWPError( $comment );
 		$this->assertSame( $error, $comment->get_error_code() );
+		$this->assertEmpty( $comment->get_error_message() );
+
+	}
+
+	/**
+	 * @ticket 39650
+	 */
+	public function test_submitting_comment_to_draft_post_returns_error_message_for_user_with_correct_caps() {
+		$error = 'comment_on_draft';
+
+		$user   = self::factory()->user->create_and_get( array(
+			'role' => 'author',
+		) );
+
+		wp_set_current_user( $user->ID );
 
+		$this->assertSame( 0, did_action( $error ) );
+
+		$post = self::factory()->post->create_and_get( array(
+			'post_status' => 'draft',
+		) );
+		$data = array(
+			'comment_post_ID' => $post->ID,
+		);
+		$comment = wp_handle_comment_submission( $data );
+
+		$this->assertSame( 1, did_action( $error ) );
+		$this->assertWPError( $comment );
+		$this->assertSame( $error, $comment->get_error_code() );
+		$this->assertNotEmpty( $comment->get_error_message() );
 	}
 
 	public function test_submitting_comment_to_scheduled_post_returns_error() {
