wp/wp-mail.php
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
--- a/wp/wp-mail.php	Tue Jun 09 11:14:17 2015 +0000
+++ b/wp/wp-mail.php	Mon Oct 14 17:39:30 2019 +0200
@@ -12,7 +12,13 @@
 
 /** This filter is documented in wp-admin/options.php */
 if ( ! apply_filters( 'enable_post_by_email_configuration', true ) )
-	wp_die( __( 'This action has been disabled by the administrator.' ) );
+	wp_die( __( 'This action has been disabled by the administrator.' ), 403 );
+
+$mailserver_url = get_option( 'mailserver_url' );
+
+if ( 'mail.example.com' === $mailserver_url || empty( $mailserver_url ) ) {
+	wp_die( __( 'This action has been disabled by the administrator.' ), 403 );
+}
 
 /**
  * Fires to allow a plugin to do a complete takeover of Post by Email.
@@ -66,7 +72,6 @@
 	$content_transfer_encoding = '';
 	$post_author = 1;
 	$author_found = false;
-	$dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
 	foreach ($message as $line) {
 		// Body signal.
 		if ( strlen($line) < 3 )
@@ -119,6 +124,7 @@
 					$author = trim($line);
 				$author = sanitize_email($author);
 				if ( is_email($author) ) {
+					/* translators: Post author email address */
 					echo '<p>' . sprintf(__('Author is %s'), $author) . '</p>';
 					$userdata = get_user_by('email', $author);
 					if ( ! empty( $userdata ) ) {
@@ -128,33 +134,12 @@
 				}
 			}
 
-			if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37'
-				$ddate = trim($line);
-				$ddate = str_replace('Date: ', '', $ddate);
-				if (strpos($ddate, ',')) {
-					$ddate = trim(substr($ddate, strpos($ddate, ',') + 1, strlen($ddate)));
-				}
-				$date_arr = explode(' ', $ddate);
-				$date_time = explode(':', $date_arr[3]);
-
-				$ddate_H = $date_time[0];
-				$ddate_i = $date_time[1];
-				$ddate_s = $date_time[2];
-
-				$ddate_m = $date_arr[1];
-				$ddate_d = $date_arr[0];
-				$ddate_Y = $date_arr[2];
-				for ( $j = 0; $j < 12; $j++ ) {
-					if ( $ddate_m == $dmonths[$j] ) {
-						$ddate_m = $j+1;
-					}
-				}
-
-				$time_zn = intval($date_arr[4]) * 36;
-				$ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y);
-				$ddate_U = $ddate_U - $time_zn;
-				$post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference);
-				$post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U);
+			if ( preg_match( '/Date: /i', $line ) ) { // of the form '20 Mar 2002 20:32:37 +0100'
+				$ddate = str_replace( 'Date: ', '', trim( $line ) );
+				$ddate = preg_replace( '!\s*\(.+\)\s*$!', '', $ddate );	// remove parenthesised timezone string if it exists, as this confuses strtotime
+				$ddate_U = strtotime( $ddate );
+				$post_date = gmdate( 'Y-m-d H:i:s', $ddate_U + $time_difference );
+				$post_date_gmt = gmdate( 'Y-m-d H:i:s', $ddate_U );
 			}
 		}
 	}
@@ -184,7 +169,7 @@
 	$content = trim($content);
 
 	/**
-	 * Filter the original content of the email.
+	 * Filters the original content of the email.
 	 *
 	 * Give Post-By-Email extending plugins full access to the content, either
 	 * the raw content, or the content of the last quoted-printable section.
@@ -210,7 +195,7 @@
 	$content = trim($content);
 
 	/**
-	 * Filter the content of the post submitted by email before saving.
+	 * Filters the content of the post submitted by email before saving.
 	 *
 	 * @since 1.2.0
 	 *
@@ -244,15 +229,23 @@
 	 */
 	do_action( 'publish_phone', $post_ID );
 
-	echo "\n<p>" . sprintf(__('<strong>Author:</strong> %s'), esc_html($post_author)) . '</p>';
-	echo "\n<p>" . sprintf(__('<strong>Posted title:</strong> %s'), esc_html($post_title)) . '</p>';
+	echo "\n<p><strong>" . __( 'Author:' ) . '</strong> ' . esc_html( $post_author ) . '</p>';
+	echo "\n<p><strong>" . __( 'Posted title:' ) . '</strong> ' . esc_html( $post_title ) . '</p>';
 
 	if(!$pop3->delete($i)) {
-		echo '<p>' . sprintf(__('Oops: %s'), esc_html($pop3->ERROR)) . '</p>';
+		echo '<p>' . sprintf(
+			/* translators: %s: POP3 error */
+			__( 'Oops: %s' ),
+			esc_html( $pop3->ERROR )
+		) . '</p>';
 		$pop3->reset();
 		exit;
 	} else {
-		echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>';
+		echo '<p>' . sprintf(
+			/* translators: %s: the message ID */
+			__( 'Mission complete. Message %s deleted.' ),
+			'<strong>' . $i . '</strong>'
+		) . '</p>';
 	}
 
 }