Postie - Version 1.4.30

Version Description

(2013.01.22) = * Fixed a bug that caused activation to fail or show a blank page. * Fixed bug where WP media upload rejects a file. * Added a check for mbstring. * Fixed bug when attachment names were only supplied via d_parameters

Download this release

Release Info

Developer WayneAllen
Plugin Icon 128x128 Postie
Version 1.4.30
Comparing to
See all releases

Code changes from version 1.4.29 to 1.4.30

Files changed (7) hide show
  1. docs/Changes.txt +6 -0
  2. docs/Postie.txt +1 -1
  3. docs/TODO.txt +1 -0
  4. postie-functions.php +96 -67
  5. postie.php +7 -6
  6. postie_test.php +6 -1
  7. readme.txt +7 -1
docs/Changes.txt CHANGED
@@ -10,6 +10,12 @@ All script, style and body tags are stripped from html emails.
10
  Attachments are now processed in the order they were attached.
11
 
12
  == CHANGELOG ==
 
 
 
 
 
 
13
  = 1.4.29 (2013.01.19) =
14
  * Fixed bug where manually running Postie worked, but calling get_mail.php directly did not.
15
 
10
  Attachments are now processed in the order they were attached.
11
 
12
  == CHANGELOG ==
13
+ = 1.4.30 (2013.01.22) =
14
+ * Fixed a bug that caused activation to fail or show a blank page.
15
+ * Fixed bug where WP media upload rejects a file.
16
+ * Added a check for mbstring.
17
+ * Fixed bug when attachment names were only supplied via d_parameters.
18
+
19
  = 1.4.29 (2013.01.19) =
20
  * Fixed bug where manually running Postie worked, but calling get_mail.php directly did not.
21
 
docs/Postie.txt CHANGED
@@ -6,7 +6,7 @@ Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
- Stable tag: 1.4.29
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
+ Stable tag: 1.4.30
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
docs/TODO.txt CHANGED
@@ -2,6 +2,7 @@ provide a location for custom icons. update docs about location.
2
  reply logic not adding to comments
3
  hide/disable config options that don't apply
4
  code to set featured image
 
5
 
6
  replace native imap with flourish
7
  replace MIME parser
2
  reply logic not adding to comments
3
  hide/disable config options that don't apply
4
  code to set featured image
5
+ handle condition where only one of text/plain & text/html is supplied, but Preferred Text Type is set to the opposite.
6
 
7
  replace native imap with flourish
8
  replace MIME parser
postie-functions.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  /*
4
- $Id: postie-functions.php 655045 2013-01-18 22:10:20Z WayneAllen $
5
  */
6
 
7
  //to turn on debug output add the following line to wp-config.php
@@ -276,8 +276,8 @@ function CreatePost($poster, $mimeDecodedEmail, $post_id, &$is_reply, $config) {
276
  }
277
 
278
  filter_newlines($content, $config);
279
-
280
- //DebugEcho("pre-insert content: $content");
281
 
282
  DebugEcho("excerpt: $post_excerpt");
283
 
@@ -829,8 +829,11 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
829
  // fix filename (remove non-standard characters)
830
  //$filename = preg_replace("/[^\x9\xA\xD\x20-\x7F]/", "", $part->ctype_parameters['name']);
831
  $filename = $part->ctype_parameters['name'];
832
- DebugEcho("Filename: $filename");
 
833
  }
 
 
834
  switch (strtolower($part->ctype_primary)) {
835
  case 'multipart':
836
  DebugEcho("multipart: " . count($part->parts));
@@ -870,9 +873,13 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
870
  if (array_key_exists('disposition', $part) && $part->disposition == 'attachment') {
871
  DebugEcho("text Attachement: $filename");
872
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
873
- $file = wp_get_attachment_url($file_id);
874
- $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
875
- $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
 
 
 
 
876
  } else {
877
 
878
  //go through each sub-section
@@ -902,65 +909,83 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
902
  } else {
903
  DebugEcho("text Attachement wo disposition: $filename");
904
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
905
- $file = wp_get_attachment_url($file_id);
906
- $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
907
- $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
 
 
 
 
908
  }
909
  }
910
  break;
911
 
912
  case 'image':
 
913
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
914
- $file = wp_get_attachment_url($file_id);
915
- $cid = "";
916
- if (array_key_exists('content-id', $part->headers)) {
917
- $cid = trim($part->headers["content-id"], "<>");
918
- DebugEcho("found cid: $cid");
919
- }
 
920
 
921
- $the_post = get_post($file_id);
922
- DebugEcho("image Attachement: $filename");
923
- $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $imagetemplate, $filename);
924
- if ($cid) {
925
- $attachments["cids"][$cid] = array($file, count($attachments["html"]) - 1);
926
- DebugEcho("CID Attachement: $cid");
 
 
927
  }
928
  break;
929
 
930
  case 'audio':
931
  //DebugDump($part->headers);
 
932
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
933
- $file = wp_get_attachment_url($file_id);
934
- $cid = "";
935
- if (array_key_exists('content-id', $part->headers)) {
936
- $cid = trim($part->headers["content-id"], "<>");
937
- }
938
- if (in_array($part->ctype_secondary, $audiotypes)) {
939
- $audioTemplate = $audiotemplate;
 
 
 
 
 
 
940
  } else {
941
- $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
942
- $audioTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
943
  }
944
- $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $audioTemplate, $filename);
945
  break;
946
 
947
  case 'video':
 
948
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
949
- $file = wp_get_attachment_url($file_id);
950
- $cid = "";
951
- if (array_key_exists('content-id', $part->headers)) {
952
- $cid = trim($part->headers["content-id"], "<>");
953
- }
954
- if (in_array(strtolower($part->ctype_secondary), $video1types)) {
955
- $videoTemplate = $video1template;
956
- } elseif (in_array(strtolower($part->ctype_secondary), $video2types)) {
957
- $videoTemplate = $video2template;
 
 
 
 
 
 
 
958
  } else {
959
- $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
960
- $videoTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
961
  }
962
- $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $videoTemplate, $filename);
963
- //echo "videoTemplate = $videoTemplate\n";
964
  break;
965
 
966
  default:
@@ -972,18 +997,22 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
972
  break;
973
  }
974
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
975
- $file = wp_get_attachment_url($file_id);
976
- DebugEcho("uploaded $file_id ($file)");
977
- $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
978
- DebugEcho("default: $icon $filename");
979
- $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
980
- if (array_key_exists('content-id', $part->headers)) {
981
- $cid = trim($part->headers["content-id"], "<>");
982
- if ($cid) {
983
- $attachments["cids"][$cid] = array($file, count($attachments["html"]) - 1);
 
 
 
 
984
  }
985
  } else {
986
- DebugEcho("No content-id");
987
  }
988
  } else {
989
  DebugEcho("Not in supported filetype list");
@@ -1223,7 +1252,7 @@ function filter_RemoveSignatureWorker(&$html, $pattern) {
1223
  }
1224
 
1225
  foreach ($html->children() as $e) {
1226
- DebugEcho("sig: " . $e->plaintext);
1227
  if (!$found && preg_match($pattern, trim($e->plaintext))) {
1228
  DebugEcho("signature found: removing");
1229
  $found = true;
@@ -1469,13 +1498,8 @@ function filter_AppleFile(&$mimeDecodedEmail) {
1469
 
1470
  function postie_media_handle_upload($part, $post_id, $poster, $post_data = array()) {
1471
  $overrides = array('test_form' => false);
1472
- $tmpFile = tempnam(getenv('TEMP'), 'postie');
1473
- DebugEcho("tmpfile: $tmpFile");
1474
- if (!is_writable($tmpFile)) {
1475
- $uploadDir = wp_upload_dir();
1476
- $tmpFile = tempnam($uploadDir['path'], 'postie');
1477
- DebugEcho("tmpfile not writeable, using: $tmpFile");
1478
- }
1479
 
1480
  $fp = fopen($tmpFile, 'w');
1481
  if ($fp) {
@@ -1525,7 +1549,7 @@ function postie_media_handle_upload($part, $post_id, $poster, $post_data = array
1525
 
1526
  if (isset($file['error'])) {
1527
  DebugDump($file['error']);
1528
- throw new Exception($file['error']);
1529
  return new WP_Error('upload_error', $file['error']);
1530
  }
1531
 
@@ -2206,7 +2230,7 @@ function tag_Excerpt(&$content, $filterNewLines, $convertNewLines) {
2206
  $content = str_replace($matches[0], "", $content);
2207
  $post_excerpt = $matches[1];
2208
  DebugEcho("excerpt found: $post_excerpt");
2209
- if ($filterNewLines){
2210
  DebugEcho("filtering newlines from excerpt");
2211
  filter_newlines($post_excerpt, $convertNewLines);
2212
  }
@@ -2439,7 +2463,7 @@ function config_GetDefaults() {
2439
  'sig_pattern_list' => array('--', '---'),
2440
  'smtp' => array(),
2441
  'start_image_count_at_zero' => false,
2442
- 'supported_file_types' => array( 'application'),
2443
  'turn_authorization_off' => false,
2444
  'time_offset' => get_option('gmt_offset'),
2445
  'video1template' => $simple_link,
@@ -2543,7 +2567,7 @@ function config_UpgradeOld() {
2543
  if (!isset($config["BANNED_FILES_LIST"]))
2544
  $config["BANNED_FILES_LIST"] = array();
2545
  if (!isset($config["SUPPORTED_FILE_TYPES"]))
2546
- $config["SUPPORTED_FILE_TYPES"] = array( "application");
2547
  if (!isset($config["AUTHORIZED_ADDRESSES"]))
2548
  $config["AUTHORIZED_ADDRESSES"] = array();
2549
  if (!isset($config["MAIL_SERVER"]))
@@ -2694,6 +2718,11 @@ function HasIMAPSupport($display = true) {
2694
  return(HasFunctions($function_list, $display));
2695
  }
2696
 
 
 
 
 
 
2697
  function HasIconvInstalled($display = true) {
2698
  $function_list = array("iconv");
2699
  return(HasFunctions($function_list, $display));
1
  <?php
2
 
3
  /*
4
+ $Id: postie-functions.php 657225 2013-01-23 04:42:31Z WayneAllen $
5
  */
6
 
7
  //to turn on debug output add the following line to wp-config.php
276
  }
277
 
278
  filter_newlines($content, $config);
279
+ if ($fulldebug)
280
+ DebugEcho("post newline: $content");
281
 
282
  DebugEcho("excerpt: $post_excerpt");
283
 
829
  // fix filename (remove non-standard characters)
830
  //$filename = preg_replace("/[^\x9\xA\xD\x20-\x7F]/", "", $part->ctype_parameters['name']);
831
  $filename = $part->ctype_parameters['name'];
832
+ } elseif (property_exists($part, 'd_parameters') && is_array($part->d_parameters) && array_key_exists('filename', $part->d_parameters)) {
833
+ $filename = $part->d_parameters['filename'];
834
  }
835
+
836
+ DebugEcho("Filename: $filename");
837
  switch (strtolower($part->ctype_primary)) {
838
  case 'multipart':
839
  DebugEcho("multipart: " . count($part->parts));
873
  if (array_key_exists('disposition', $part) && $part->disposition == 'attachment') {
874
  DebugEcho("text Attachement: $filename");
875
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
876
+ if (!is_wp_error($file_id)) {
877
+ $file = wp_get_attachment_url($file_id);
878
+ $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
879
+ $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
880
+ } else {
881
+ LogInfo($file_id->get_error_message());
882
+ }
883
  } else {
884
 
885
  //go through each sub-section
909
  } else {
910
  DebugEcho("text Attachement wo disposition: $filename");
911
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
912
+ if (!is_wp_error($file_id)) {
913
+ $file = wp_get_attachment_url($file_id);
914
+ $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
915
+ $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
916
+ } else {
917
+ LogInfo($file_id->get_error_message());
918
+ }
919
  }
920
  }
921
  break;
922
 
923
  case 'image':
924
+ DebugEcho("image Attachement: $filename");
925
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
926
+ if (!is_wp_error($file_id)) {
927
+ $file = wp_get_attachment_url($file_id);
928
+ $cid = "";
929
+ if (array_key_exists('content-id', $part->headers)) {
930
+ $cid = trim($part->headers["content-id"], "<>");
931
+ DebugEcho("found cid: $cid");
932
+ }
933
 
934
+ $the_post = get_post($file_id);
935
+ $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $imagetemplate, $filename);
936
+ if ($cid) {
937
+ $attachments["cids"][$cid] = array($file, count($attachments["html"]) - 1);
938
+ DebugEcho("CID Attachement: $cid");
939
+ }
940
+ } else {
941
+ LogInfo("image error: " . $file_id->get_error_message());
942
  }
943
  break;
944
 
945
  case 'audio':
946
  //DebugDump($part->headers);
947
+ DebugEcho("audio Attachement: $filename");
948
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
949
+ if (!is_wp_error($file_id)) {
950
+ $file = wp_get_attachment_url($file_id);
951
+ $cid = "";
952
+ if (array_key_exists('content-id', $part->headers)) {
953
+ $cid = trim($part->headers["content-id"], "<>");
954
+ }
955
+ if (in_array($part->ctype_secondary, $audiotypes)) {
956
+ $audioTemplate = $audiotemplate;
957
+ } else {
958
+ $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
959
+ $audioTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
960
+ }
961
+ $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $audioTemplate, $filename);
962
  } else {
963
+ LogInfo("audio error: " . $file_id->get_error_message());
 
964
  }
 
965
  break;
966
 
967
  case 'video':
968
+ DebugEcho("video Attachement: $filename");
969
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
970
+ if (!is_wp_error($file_id)) {
971
+ $file = wp_get_attachment_url($file_id);
972
+ $cid = "";
973
+ if (array_key_exists('content-id', $part->headers)) {
974
+ $cid = trim($part->headers["content-id"], "<>");
975
+ }
976
+ if (in_array(strtolower($part->ctype_secondary), $video1types)) {
977
+ $videoTemplate = $video1template;
978
+ } elseif (in_array(strtolower($part->ctype_secondary), $video2types)) {
979
+ $videoTemplate = $video2template;
980
+ } else {
981
+ $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
982
+ $videoTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
983
+ }
984
+ $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $videoTemplate, $filename);
985
+ //echo "videoTemplate = $videoTemplate\n";
986
  } else {
987
+ LogInfo($file_id->get_error_message());
 
988
  }
 
 
989
  break;
990
 
991
  default:
997
  break;
998
  }
999
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
1000
+ if (!is_wp_error($file_id)) {
1001
+ $file = wp_get_attachment_url($file_id);
1002
+ DebugEcho("uploaded $file_id ($file)");
1003
+ $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
1004
+ DebugEcho("default: $icon $filename");
1005
+ $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
1006
+ if (array_key_exists('content-id', $part->headers)) {
1007
+ $cid = trim($part->headers["content-id"], "<>");
1008
+ if ($cid) {
1009
+ $attachments["cids"][$cid] = array($file, count($attachments["html"]) - 1);
1010
+ }
1011
+ } else {
1012
+ DebugEcho("No content-id");
1013
  }
1014
  } else {
1015
+ LogInfo($file_id->get_error_message());
1016
  }
1017
  } else {
1018
  DebugEcho("Not in supported filetype list");
1252
  }
1253
 
1254
  foreach ($html->children() as $e) {
1255
+ //DebugEcho("sig: " . $e->plaintext);
1256
  if (!$found && preg_match($pattern, trim($e->plaintext))) {
1257
  DebugEcho("signature found: removing");
1258
  $found = true;
1498
 
1499
  function postie_media_handle_upload($part, $post_id, $poster, $post_data = array()) {
1500
  $overrides = array('test_form' => false);
1501
+
1502
+ $tmpFile = tempnam(get_temp_dir(), 'postie');
 
 
 
 
 
1503
 
1504
  $fp = fopen($tmpFile, 'w');
1505
  if ($fp) {
1549
 
1550
  if (isset($file['error'])) {
1551
  DebugDump($file['error']);
1552
+ //throw new Exception($file['error']);
1553
  return new WP_Error('upload_error', $file['error']);
1554
  }
1555
 
2230
  $content = str_replace($matches[0], "", $content);
2231
  $post_excerpt = $matches[1];
2232
  DebugEcho("excerpt found: $post_excerpt");
2233
+ if ($filterNewLines) {
2234
  DebugEcho("filtering newlines from excerpt");
2235
  filter_newlines($post_excerpt, $convertNewLines);
2236
  }
2463
  'sig_pattern_list' => array('--', '---'),
2464
  'smtp' => array(),
2465
  'start_image_count_at_zero' => false,
2466
+ 'supported_file_types' => array('application'),
2467
  'turn_authorization_off' => false,
2468
  'time_offset' => get_option('gmt_offset'),
2469
  'video1template' => $simple_link,
2567
  if (!isset($config["BANNED_FILES_LIST"]))
2568
  $config["BANNED_FILES_LIST"] = array();
2569
  if (!isset($config["SUPPORTED_FILE_TYPES"]))
2570
+ $config["SUPPORTED_FILE_TYPES"] = array("application");
2571
  if (!isset($config["AUTHORIZED_ADDRESSES"]))
2572
  $config["AUTHORIZED_ADDRESSES"] = array();
2573
  if (!isset($config["MAIL_SERVER"]))
2718
  return(HasFunctions($function_list, $display));
2719
  }
2720
 
2721
+ function HasMbStringInstalled() {
2722
+ $function_list = array("mb_detect_encoding");
2723
+ return(HasFunctions($function_list));
2724
+ }
2725
+
2726
  function HasIconvInstalled($display = true) {
2727
  $function_list = array("iconv");
2728
  return(HasFunctions($function_list, $display));
postie.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Postie
5
  Plugin URI: http://PostiePlugin.com/
6
  Description: Signifigantly upgrades the posting by mail features of Word Press (See <a href='options-general.php?page=postie/postie.php'>Settings and options</a>) to configure your e-mail settings. See the <a href='http://wordpress.org/extend/plugins/postie/other_notes'>Readme</a> for usage. Visit the <a href='http://wordpress.org/support/plugin/postie'>postie forum</a> for support.
7
- Version: 1.4.29
8
  Author: Wayne Allen
9
  Author URI: http://allens-home.com/
10
  License: GPL2
@@ -27,7 +27,7 @@
27
  */
28
 
29
  /*
30
- $Id: postie.php 655566 2013-01-20 05:47:38Z WayneAllen $
31
  */
32
 
33
  define("POSTIE_ROOT", dirname(__FILE__));
@@ -74,9 +74,12 @@ if (is_admin()) {
74
  postie_warnings();
75
  }
76
 
 
 
 
 
 
77
  function activate_postie() {
78
- LogInfo("activated");
79
-
80
  static $init = false;
81
  $options = get_option('postie-settings');
82
 
@@ -103,8 +106,6 @@ function activate_postie() {
103
  $options = config_ValidateSettings($options);
104
  update_option('postie-settings', $options);
105
  $init = true;
106
- DebugEcho("activate completed");
107
- return $options;
108
  }
109
 
110
  register_activation_hook(__FILE__, 'activate_postie');
4
  Plugin Name: Postie
5
  Plugin URI: http://PostiePlugin.com/
6
  Description: Signifigantly upgrades the posting by mail features of Word Press (See <a href='options-general.php?page=postie/postie.php'>Settings and options</a>) to configure your e-mail settings. See the <a href='http://wordpress.org/extend/plugins/postie/other_notes'>Readme</a> for usage. Visit the <a href='http://wordpress.org/support/plugin/postie'>postie forum</a> for support.
7
+ Version: 1.4.30
8
  Author: Wayne Allen
9
  Author URI: http://allens-home.com/
10
  License: GPL2
27
  */
28
 
29
  /*
30
+ $Id: postie.php 657225 2013-01-23 04:42:31Z WayneAllen $
31
  */
32
 
33
  define("POSTIE_ROOT", dirname(__FILE__));
74
  postie_warnings();
75
  }
76
 
77
+ /*
78
+ * called by WP when activating the plugin
79
+ * Note that you can't do any output during this funtion or activation
80
+ * will fail on some systems. This means no DebugEcho, EchoInfo or DebugDump.
81
+ */
82
  function activate_postie() {
 
 
83
  static $init = false;
84
  $options = get_option('postie-settings');
85
 
106
  $options = config_ValidateSettings($options);
107
  update_option('postie-settings', $options);
108
  $init = true;
 
 
109
  }
110
 
111
  register_activation_hook(__FILE__, 'activate_postie');
postie_test.php CHANGED
@@ -42,6 +42,11 @@ $images = array("Test.png", "Test.jpg", "Test.gif");
42
  <?php
43
  EchoInfo("iconv: " . ((HasIconvInstalled()) ? __('yes', 'postie') : __('no', 'postie')));
44
  EchoInfo("imap (required for subjects): " . ((function_exists('imap_mime_header_decode')) ? __('yes', 'postie') : __('no', 'postie')));
 
 
 
 
 
45
  ?>
46
 
47
  <h2>Clock Tests</h2>
@@ -73,7 +78,7 @@ $images = array("Test.png", "Test.jpg", "Test.gif");
73
  EchoInfo($mail_server->error());
74
  } else {
75
  EchoInfo("Successful " . strtoupper($config['input_protocol']) . " connection on port {$config["mail_server_port"]}");
76
- EchoInfo("# of waiting messages: " .$mail_server->getNumberOfMessages());
77
  }
78
  }
79
  break;
42
  <?php
43
  EchoInfo("iconv: " . ((HasIconvInstalled()) ? __('yes', 'postie') : __('no', 'postie')));
44
  EchoInfo("imap (required for subjects): " . ((function_exists('imap_mime_header_decode')) ? __('yes', 'postie') : __('no', 'postie')));
45
+ if (HasMbStringInstalled()) {
46
+ EchoInfo("mbstring: yes");
47
+ } else {
48
+ EchoInfo("<b>Warning!</b> Postie requires that mbstring be enabled.");
49
+ }
50
  ?>
51
 
52
  <h2>Clock Tests</h2>
78
  EchoInfo($mail_server->error());
79
  } else {
80
  EchoInfo("Successful " . strtoupper($config['input_protocol']) . " connection on port {$config["mail_server_port"]}");
81
+ EchoInfo("# of waiting messages: " . $mail_server->getNumberOfMessages());
82
  }
83
  }
84
  break;
readme.txt CHANGED
@@ -6,7 +6,7 @@ Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
- Stable tag: 1.4.29
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
@@ -416,6 +416,12 @@ All script, style and body tags are stripped from html emails.
416
  Attachments are now processed in the order they were attached.
417
 
418
  == CHANGELOG ==
 
 
 
 
 
 
419
  = 1.4.29 (2013.01.19) =
420
  * Fixed bug where manually running Postie worked, but calling get_mail.php directly did not.
421
 
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
+ Stable tag: 1.4.30
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
416
  Attachments are now processed in the order they were attached.
417
 
418
  == CHANGELOG ==
419
+ = 1.4.30 (2013.01.22) =
420
+ * Fixed a bug that caused activation to fail or show a blank page.
421
+ * Fixed bug where WP media upload rejects a file.
422
+ * Added a check for mbstring.
423
+ * Fixed bug when attachment names were only supplied via d_parameters
424
+
425
  = 1.4.29 (2013.01.19) =
426
  * Fixed bug where manually running Postie worked, but calling get_mail.php directly did not.
427