Index: wp-includes/formatting.php
===================================================================
--- wp-includes/formatting.php	(revision 18522)
+++ wp-includes/formatting.php	(working copy)
@@ -1522,6 +1522,14 @@
 	if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
 		return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
 	}
+	
+	// If the domain is one word ... let it through if we can do a DNS lookup on the domain
+	if ( FALSE === strpos($domain, '.') ) {
+		if ( FALSE !== filter_var(gethostbyname($domain), FILTER_VALIDATE_IP) )
+			return apply_filters( 'is_email', $email, $email, null );
+		else
+			return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
+	}
 
 	// Split the domain into subs
 	$subs = explode( '.', $domain );
@@ -1744,38 +1752,48 @@
 		return apply_filters( 'sanitize_email', '', $email, 'domain_period_limits' );
 	}
 
-	// Split the domain into subs
-	$subs = explode( '.', $domain );
+	// If the domain is one word ... let it through if we can do a DNS lookup on the domain
+	if ( FALSE === strpos($domain, '.') ) {
+		$new_domain = preg_replace( '/[^a-z0-9-]+/i', '', $domain );
+		if ( !empty($new_domain) && FALSE !== filter_var(gethostbyname($domain), FILTER_VALIDATE_IP) )
+			$domain = $new_domain;
+		else
+			return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' );
+	} else {
 
-	// Assume the domain will have at least two subs
-	if ( 2 > count( $subs ) ) {
-		return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' );
-	}
+		// Split the domain into subs
+		$subs = explode( '.', $domain );
 
-	// Create an array that will contain valid subs
-	$new_subs = array();
+		// Assume the domain will have at least two subs
+		if ( 2 > count( $subs ) ) {
+			return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' );
+		}
 
-	// Loop through each sub
-	foreach ( $subs as $sub ) {
-		// Test for leading and trailing hyphens
-		$sub = trim( $sub, " \t\n\r\0\x0B-" );
+		// Create an array that will contain valid subs
+		$new_subs = array();
 
-		// Test for invalid characters
-		$sub = preg_replace( '/[^a-z0-9-]+/i', '', $sub );
+		// Loop through each sub
+		foreach ( $subs as $sub ) {
+			// Test for leading and trailing hyphens
+			$sub = trim( $sub, " \t\n\r\0\x0B-" );
 
-		// If there's anything left, add it to the valid subs
-		if ( '' !== $sub ) {
-			$new_subs[] = $sub;
+			// Test for invalid characters
+			$sub = preg_replace( '/[^a-z0-9-]+/i', '', $sub );
+
+			// If there's anything left, add it to the valid subs
+			if ( '' !== $sub ) {
+				$new_subs[] = $sub;
+			}
 		}
-	}
 
-	// If there aren't 2 or more valid subs
-	if ( 2 > count( $new_subs ) ) {
-		return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' );
-	}
+		// If there aren't 2 or more valid subs
+		if ( 2 > count( $new_subs ) ) {
+			return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' );
+		}
 
-	// Join valid subs into the new domain
-	$domain = join( '.', $new_subs );
+		// Join valid subs into the new domain
+		$domain = join( '.', $new_subs );
+	}
 
 	// Put the email back together
 	$email = $local . '@' . $domain;
