X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/ff81ee6e8304a1982a3ec4f5b134764a29d502cf..69ac90aac5f1f0c980444b182c6d03659fbc7e7a:/wp-mail.php diff --git a/wp-mail.php b/wp-mail.php index 6c62fbad..ab9ae845 100644 --- a/wp-mail.php +++ b/wp-mail.php @@ -5,19 +5,17 @@ require_once(ABSPATH.WPINC.'/class-pop3.php'); error_reporting(2037); -$time_difference = get_settings('gmt_offset') * 3600; +$time_difference = get_option('gmt_offset') * 3600; $phone_delim = '::'; $pop3 = new POP3(); -if (!$pop3->connect(get_settings('mailserver_url'), get_settings('mailserver_port'))) : - echo "Ooops $pop3->ERROR
\n"; - exit; -endif; +if (!$pop3->connect(get_option('mailserver_url'), get_option('mailserver_port'))) + wp_die(wp_specialchars($pop3->ERROR)); -$count = $pop3->login(get_settings('mailserver_login'), get_settings('mailserver_pass')); -if (0 == $count) die(__('There doesn’t seem to be any new mail.')); +$count = $pop3->login(get_option('mailserver_login'), get_option('mailserver_pass')); +if (0 == $count) wp_die(__('There doesn’t seem to be any new mail.')); for ($i=1; $i <= $count; $i++) : @@ -26,10 +24,10 @@ for ($i=1; $i <= $count; $i++) : $content = ''; $content_type = ''; + $content_transfer_encoding = ''; $boundary = ''; $bodysignal = 0; - $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); + $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); foreach ($message as $line) : if (strlen($line) < 3) $bodysignal = 1; @@ -42,6 +40,12 @@ for ($i=1; $i <= $count; $i++) : $content_type = explode(';', $content_type); $content_type = $content_type[0]; } + if (preg_match('/Content-Transfer-Encoding: /i', $line)) { + $content_transfer_encoding = trim($line); + $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding)-14); + $content_transfer_encoding = explode(';', $content_transfer_encoding); + $content_transfer_encoding = $content_transfer_encoding[0]; + } if (($content_type == 'multipart/alternative') && (preg_match('/boundary="/', $line)) && ($boundary == '')) { $boundary = trim($line); $boundary = explode('"', $boundary); @@ -56,21 +60,24 @@ for ($i=1; $i <= $count; $i++) : $subject = $subject[0]; } - // Set the author using the email address (To or Reply-To, the last used) + // Set the author using the email address (From or Reply-To, the last used) // otherwise use the site admin - if (preg_match('/From: /', $line) | preg_match('Reply-To: /', $line)) { - $author=trim($line); - if ( ereg("([a-zA-Z0-9\_\-\.]+@[\a-zA-z0-9\_\-\.]+)", $author , $regs) ) { - $author = $regs[1]; - echo "Author = {$author}

"; - $author = $wpdb->escape($author); - $result = $wpdb->get_row("SELECT ID FROM $wpdb->users WHERE user_email='$author' LIMIT 1"); - if (!$result) - $post_author = 1; + if ( preg_match('/(From|Reply-To): /', $line) ) { + if ( preg_match('|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches) ) + $author = $matches[0]; else - $post_author = $result->ID; - } else - $post_author = 1; + $author = trim($line); + $author = sanitize_email($author); + if ( is_email($author) ) { + echo "Author = {$author}

"; + $author = $wpdb->escape($author); + $result = $wpdb->get_row("SELECT ID FROM $wpdb->users WHERE user_email='$author' LIMIT 1"); + if (!$result) + $post_author = 1; + else + $post_author = $result->ID; + } else + $post_author = 1; } if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37' @@ -81,11 +88,11 @@ for ($i=1; $i <= $count; $i++) : } $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]; @@ -104,7 +111,7 @@ for ($i=1; $i <= $count; $i++) : } endforeach; - $subject = trim(str_replace(get_settings('subjectprefix'), '', $subject)); + $subject = trim($subject); if ($content_type == 'multipart/alternative') { $content = explode('--'.$boundary, $content); @@ -113,13 +120,15 @@ for ($i=1; $i <= $count; $i++) : $content = strip_tags($content[1], '


'); } $content = trim($content); + + if (stripos($content_transfer_encoding, "quoted-printable") !== false) { + $content = quoted_printable_decode($content); + } + // Captures any text in the body after $phone_delim as the body $content = explode($phone_delim, $content); $content[1] ? $content = $content[1] : $content = $content[0]; - echo "

Content-type: $content_type, boundary: $boundary

\n"; - echo "

Raw content:

".$content.'

'; - $content = trim($content); $post_content = apply_filters('phone_content', $content); @@ -128,7 +137,7 @@ for ($i=1; $i <= $count; $i++) : if ($post_title == '') $post_title = $subject; - if (empty($post_categories)) $post_categories[] = get_settings('default_email_category'); + if (empty($post_categories)) $post_categories[] = get_option('default_email_category'); $post_category = $post_categories; @@ -139,6 +148,8 @@ for ($i=1; $i <= $count; $i++) : $post_data = add_magic_quotes($post_data); $post_ID = wp_insert_post($post_data); + if ( is_wp_error( $post_ID ) ) + echo "\n" . $post_ID->get_error_message(); if (!$post_ID) { // we couldn't post, for whatever reason. better move forward to the next email @@ -147,12 +158,11 @@ for ($i=1; $i <= $count; $i++) : do_action('publish_phone', $post_ID); - echo "\n

Author: $post_author

"; - echo "\n

Posted title: $post_title
"; - echo "\nPosted content:

".$content.'

'; + echo "\n

Author: " . wp_specialchars($post_author) . "

"; + echo "\n

Posted title: " . wp_specialchars($post_title) . "
"; if(!$pop3->delete($i)) { - echo '

Oops '.$pop3->ERROR.'

'; + echo '

Oops '.wp_specialchars($pop3->ERROR).'

'; $pop3->reset(); exit; } else { @@ -163,4 +173,4 @@ endfor; $pop3->quit(); -?> \ No newline at end of file +?>