Postie - Version 1.5.20

Version Description

(2014.05.29) = * Added logic to prevent appending images when preferred text type is HTML. * Improved help text on several options and clarified options. * Additional logging around attachment uploading

Download this release

Release Info

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

Code changes from version 1.5.19 to 1.5.20

Files changed (8) hide show
  1. Revision +2 -2
  2. config_form.php +4 -4
  3. docs/Changes.txt +5 -0
  4. docs/Postie.txt +2 -2
  5. docs/TODO.txt +3 -2
  6. postie-functions.php +53 -25
  7. postie.php +3 -3
  8. readme.txt +7 -2
Revision CHANGED
@@ -1,2 +1,2 @@
1
- Revision: 861068
2
- Last Changed Date: 2014-02-19 09:07:53 -0800 (Wed, 19 Feb 2014)
1
+ Revision: 905814
2
+ Last Changed Date: 2014-04-30 12:15:38 -0700 (Wed, 30 Apr 2014)
config_form.php CHANGED
@@ -322,7 +322,7 @@
322
  wp_dropdown_categories($args);
323
  ?>
324
  </tr>
325
- <?php echo BuildBooleanSelect("Match short category", "postie-settings[category_match]", $category_match, "Try to match categories using 'starts with logic' otherwise only do exact matches"); ?>
326
 
327
  <tr valign="top">
328
  <th scope="row">
@@ -487,8 +487,8 @@
487
  <?php
488
  echo BuildBooleanSelect("Use First Image as Featured Image", "postie-settings[featured_image]", $featured_image, "If any images are attached, the first one will be the featured image for the post");
489
  echo BuildBooleanSelect("Automatically insert image gallery", "postie-settings[auto_gallery]", $auto_gallery, "If any images are attached, they will automatically be inserted as a gallery");
490
- echo BuildBooleanSelect("Post Images At End", "postie-settings[images_append]", $images_append, "No means they will be put before the text of the message.");
491
- echo BuildBooleanSelect("Start Image Count At 0", "postie-settings[start_image_count_at_zero]", $start_image_count_at_zero);
492
  echo BuildBooleanSelect("Generate Thumbnails", "postie-settings[generate_thumbnails]", $generate_thumbnails, "Some hosts crash during thumbnail generation. Set this to 'No' if you have this issue.");
493
  ?>
494
  <tr>
@@ -565,7 +565,6 @@
565
  </div>
566
  </td>
567
  </tr>
568
- <?php echo BuildBooleanSelect("Use custom image field", "postie-settings[custom_image_field]", $custom_image_field, "When true, images will not appear in the post. Instead the url to the image will be input into a custom field named 'image'."); ?>
569
  </table>
570
  </div>
571
 
@@ -823,6 +822,7 @@
823
  name='postie-settings[generaltemplate]'><?php echo esc_attr($generaltemplate) ?></textarea>
824
  </td>
825
  </tr>
 
826
  </table>
827
  </div>
828
  <div id="simpleTabs-content-7" class="simpleTabs-content">
322
  wp_dropdown_categories($args);
323
  ?>
324
  </tr>
325
+ <?php echo BuildBooleanSelect("Match short category", "postie-settings[category_match]", $category_match, "Try to match categories using 'starts with logic' otherwise only do exact matches.<br />Note that custom taxonomies will not be found if this setting is 'No'"); ?>
326
 
327
  <tr valign="top">
328
  <th scope="row">
487
  <?php
488
  echo BuildBooleanSelect("Use First Image as Featured Image", "postie-settings[featured_image]", $featured_image, "If any images are attached, the first one will be the featured image for the post");
489
  echo BuildBooleanSelect("Automatically insert image gallery", "postie-settings[auto_gallery]", $auto_gallery, "If any images are attached, they will automatically be inserted as a gallery");
490
+ echo BuildBooleanSelect("Image Location", "postie-settings[images_append]", $images_append, "No means they will be put before the text of the message.", array('After', 'Before'));
491
+ echo BuildBooleanSelect("Start Image Count At 0", "postie-settings[start_image_count_at_zero]", $start_image_count_at_zero, '', array('Start at 0', 'Start at 1'));
492
  echo BuildBooleanSelect("Generate Thumbnails", "postie-settings[generate_thumbnails]", $generate_thumbnails, "Some hosts crash during thumbnail generation. Set this to 'No' if you have this issue.");
493
  ?>
494
  <tr>
565
  </div>
566
  </td>
567
  </tr>
 
568
  </table>
569
  </div>
570
 
822
  name='postie-settings[generaltemplate]'><?php echo esc_attr($generaltemplate) ?></textarea>
823
  </td>
824
  </tr>
825
+ <?php echo BuildBooleanSelect("Use custom image field for attachements", "postie-settings[custom_image_field]", $custom_image_field, "When set to 'Yes' no attachements will appear in the post (including images, video &amp; sound files). Instead the url to the attachement will be put into a custom field named 'image'. Your theme will need logic to display these attachements."); ?>
826
  </table>
827
  </div>
828
  <div id="simpleTabs-content-7" class="simpleTabs-content">
docs/Changes.txt CHANGED
@@ -22,6 +22,11 @@ All script, style and body tags are stripped from html emails.
22
  Attachments are now processed in the order they were attached.
23
 
24
  == CHANGELOG ==
 
 
 
 
 
25
  = 1.5.19 (2014.04.30) =
26
  * Updated image preview to recognize all variables.
27
  * Updated "wordpress_default" images template to match WP 3.8.
22
  Attachments are now processed in the order they were attached.
23
 
24
  == CHANGELOG ==
25
+ = 1.5.20 (2014.05.29) =
26
+ * Added logic to prevent appending images when preferred text type is HTML.
27
+ * Improved help text on several options and clarified options.
28
+ * Additional logging around attachment uploading
29
+
30
  = 1.5.19 (2014.04.30) =
31
  * Updated image preview to recognize all variables.
32
  * Updated "wordpress_default" images template to match WP 3.8.
docs/Postie.txt CHANGED
@@ -5,8 +5,8 @@ Author URI: http://allens-home.com/
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
- Tested up to: 3.9
9
- Stable tag: 1.5.19
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
+ Tested up to: 3.9.1
9
+ Stable tag: 1.5.20
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
docs/TODO.txt CHANGED
@@ -6,12 +6,13 @@ date: tag is being detected in body when not wanted
6
  Update tag_* and filter_* to handle HTML (per tag_Tags)
7
  dynamically determine video size (height/width) - https://code.google.com/p/phpvideotoolkit/
8
  gallery logic does not handle both images and non-images
9
- plugin conflict - Image Rotation Fixer
10
  send email notice when attachments are rejected.
11
  review http://wp.smashingmagazine.com/2011/11/23/improve-wordpress-plugins-readme-txt/
12
  more info in postie.txt
13
  configurable message for "post confirmation" - variable substitution
14
- hook for post failure, success
 
15
 
16
  =========
17
  AddOn Ideas
6
  Update tag_* and filter_* to handle HTML (per tag_Tags)
7
  dynamically determine video size (height/width) - https://code.google.com/p/phpvideotoolkit/
8
  gallery logic does not handle both images and non-images
9
+ plugin conflict - Image Rotation Fixer/Image Rotation Repair
10
  send email notice when attachments are rejected.
11
  review http://wp.smashingmagazine.com/2011/11/23/improve-wordpress-plugins-readme-txt/
12
  more info in postie.txt
13
  configurable message for "post confirmation" - variable substitution
14
+ hook for post failure, success, media attachment
15
+ collect and send last debug log and system info (see http://wordpress.org/plugins/send-system-info/)
16
 
17
  =========
18
  AddOn Ideas
postie-functions.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  /*
4
- $Id: postie-functions.php 905802 2014-04-30 19:15:38Z WayneAllen $
5
  */
6
 
7
  //to turn on debug output add the following line to wp-config.php
@@ -374,7 +374,9 @@ function CreatePost($poster, $mimeDecodedEmail, $post_id, &$is_reply, $config, $
374
  DebugEcho("post end: $content");
375
  }
376
 
377
- filter_ReplaceImagePlaceHolders($content, $attachments["html"], $config, $id, $config['image_placeholder'], true);
 
 
378
  if ($fulldebug) {
379
  DebugEcho("post body img: $content");
380
  }
@@ -899,6 +901,8 @@ function PostToDB($details, $isReply, $customImageField, $postmodifiers) {
899
  EchoInfo("Error: " . $post_ID->get_error_message());
900
  wp_delete_post($details['ID']);
901
  }
 
 
902
  } else {
903
  $comment = array(
904
  'comment_author' => $details['comment_author'],
@@ -1831,6 +1835,7 @@ function postie_media_handle_upload($part, $post_id, $poster, $generate_thubnail
1831
  if (file_exists(ABSPATH . '/wp-admin/includes/image.php')) {
1832
  include_once(ABSPATH . '/wp-admin/includes/image.php');
1833
  include_once(ABSPATH . '/wp-admin/includes/media.php');
 
1834
  if ($image_meta = @wp_read_image_metadata($file)) {
1835
  if (trim($image_meta['title'])) {
1836
  $title = $image_meta['title'];
@@ -1838,7 +1843,7 @@ function postie_media_handle_upload($part, $post_id, $poster, $generate_thubnail
1838
  }
1839
  if (trim($image_meta['caption'])) {
1840
  $content = $image_meta['caption'];
1841
- DebugEcho("Using metadata caption: $caption");
1842
  }
1843
  }
1844
  }
@@ -1855,8 +1860,10 @@ function postie_media_handle_upload($part, $post_id, $poster, $generate_thubnail
1855
  ), $post_data);
1856
 
1857
  // Save the data
 
1858
  $id = wp_insert_attachment($attachment, $file, $post_id);
1859
- DebugEcho("attachement id: $id");
 
1860
  if (!is_wp_error($id)) {
1861
  if ($generate_thubnails) {
1862
  $amd = wp_generate_attachment_metadata($id, $file);
@@ -1901,20 +1908,21 @@ function postie_handle_upload(&$file, $overrides = false, $time = null) {
1901
  __("Failed to write file to disk."));
1902
 
1903
  // Install user overrides. Did we mention that this voids your warranty?
1904
- if (is_array($overrides))
1905
  extract($overrides, EXTR_OVERWRITE);
1906
-
1907
  // A successful upload will pass this test. It makes no sense to override this one.
1908
- if ($file['error'] > 0)
1909
  return $upload_error_handler($file, $upload_error_strings[$file['error']]);
1910
-
1911
  // A non-empty file will pass this test.
1912
- if (!($file['size'] > 0 ))
1913
  return $upload_error_handler($file, __('File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.'));
1914
-
1915
  // A properly uploaded file will pass this test. There should be no reason to override this one.
1916
- if (!file_exists($file['tmp_name']))
1917
  return $upload_error_handler($file, __('Specified file failed upload test.'));
 
1918
  // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter.
1919
 
1920
  $wp_filetype = wp_check_filetype($file['name']);
@@ -1922,19 +1930,19 @@ function postie_handle_upload(&$file, $overrides = false, $time = null) {
1922
 
1923
  extract($wp_filetype);
1924
 
1925
- if ((!$type || !$ext ) && !current_user_can('unfiltered_upload'))
1926
  return $upload_error_handler($file, __('File type does not meet security guidelines. Try another.'));
1927
-
1928
- if (!$ext)
1929
  $ext = ltrim(strrchr($file['name'], '.'), '.');
1930
-
1931
- if (!$type)
1932
  $type = $file['type'];
1933
-
1934
  // A writable uploads dir will pass this test. Again, there's no point overriding this one.
1935
- if (!( ( $uploads = wp_upload_dir($time) ) && false === $uploads['error'] ))
1936
  return $upload_error_handler($file, $uploads['error']);
1937
-
1938
  // fix filename (encode non-standard characters)
1939
  $file['name'] = filename_fix($file['name']);
1940
  $filename = wp_unique_filename($uploads['path'], $file['name']);
@@ -1942,23 +1950,29 @@ function postie_handle_upload(&$file, $overrides = false, $time = null) {
1942
 
1943
  // Move the file to the uploads dir
1944
  $new_file = $uploads['path'] . "/$filename";
1945
- if (false === @ rename($file['tmp_name'], $new_file)) {
1946
  DebugEcho("upload: rename failed");
 
1947
  DebugEcho("new file: $new_file");
1948
  //DebugDump($file);
1949
  //DebugDump($uploads);
1950
  return $upload_error_handler($file, sprintf(__('The uploaded file could not be moved to %s.'), $uploads['path']));
 
 
1951
  }
1952
 
1953
  // Set correct file permissions
1954
  $stat = stat(dirname($new_file));
1955
  $perms = $stat['mode'] & 0000666;
1956
- @ chmod($new_file, $perms);
 
1957
 
1958
  // Compute the URL
1959
  $url = $uploads['url'] . "/$filename";
1960
 
 
1961
  $return = apply_filters('wp_handle_upload', array('file' => $new_file, 'url' => $url, 'type' => $type));
 
1962
 
1963
  return $return;
1964
  }
@@ -2370,6 +2384,8 @@ function filter_ReplaceImagePlaceHolders(&$content, $attachments, $config, $post
2370
  DebugEcho("Auto gallery: prepend");
2371
  }
2372
  return;
 
 
2373
  }
2374
 
2375
  $pics = "";
@@ -2418,11 +2434,17 @@ function filter_ReplaceImagePlaceHolders(&$content, $attachments, $config, $post
2418
  }
2419
  if ($autoadd_images) {
2420
  if ($config['images_append']) {
 
2421
  $content .= $pics;
2422
  } else {
 
2423
  $content = $pics . $content;
2424
  }
 
 
2425
  }
 
 
2426
  }
2427
  }
2428
 
@@ -2652,19 +2674,25 @@ function DisplayEmailPost($details) {
2652
  * @param string
2653
  * @param string
2654
  */
2655
- function BuildBooleanSelect($label, $id, $current_value, $recommendation = NULL) {
 
2656
  $html = "<tr>
2657
  <th scope='row'>" . $label . ":";
2658
  if (!empty($recommendation)) {
2659
  $html.='<br /><span class = "recommendation">' . $recommendation . '</span>';
2660
  }
 
 
 
 
 
2661
  $html.="</th>
2662
  <td><select name='$id' id='$id'>
2663
- <option value='1'>" . __("Yes", 'postie') . "</option>
2664
- <option value='0' " . (!$current_value ? "selected='selected'" : "") . ">" . __("No", 'postie') . '</option>
2665
  </select>';
2666
-
2667
  $html.="</td>\n</tr>";
 
2668
  return $html;
2669
  }
2670
 
1
  <?php
2
 
3
  /*
4
+ $Id: postie-functions.php 923356 2014-05-29 22:23:55Z WayneAllen $
5
  */
6
 
7
  //to turn on debug output add the following line to wp-config.php
374
  DebugEcho("post end: $content");
375
  }
376
 
377
+ DebugEcho("prefer_text_type: $prefer_text_type");
378
+
379
+ filter_ReplaceImagePlaceHolders($content, $attachments["html"], $config, $id, $config['image_placeholder'], ($prefer_text_type == 'plain'));
380
  if ($fulldebug) {
381
  DebugEcho("post body img: $content");
382
  }
901
  EchoInfo("Error: " . $post_ID->get_error_message());
902
  wp_delete_post($details['ID']);
903
  }
904
+ //evidently post_category was depricated at some point.
905
+ wp_set_post_terms($post_ID, $details['post_category']);
906
  } else {
907
  $comment = array(
908
  'comment_author' => $details['comment_author'],
1835
  if (file_exists(ABSPATH . '/wp-admin/includes/image.php')) {
1836
  include_once(ABSPATH . '/wp-admin/includes/image.php');
1837
  include_once(ABSPATH . '/wp-admin/includes/media.php');
1838
+ DebugEcho("reading metadata");
1839
  if ($image_meta = @wp_read_image_metadata($file)) {
1840
  if (trim($image_meta['title'])) {
1841
  $title = $image_meta['title'];
1843
  }
1844
  if (trim($image_meta['caption'])) {
1845
  $content = $image_meta['caption'];
1846
+ DebugEcho("Using metadata caption: $content");
1847
  }
1848
  }
1849
  }
1860
  ), $post_data);
1861
 
1862
  // Save the data
1863
+ DebugEcho("before wp_insert_attachment");
1864
  $id = wp_insert_attachment($attachment, $file, $post_id);
1865
+ DebugEcho("after wp_insert_attachment: attachement id: $id");
1866
+
1867
  if (!is_wp_error($id)) {
1868
  if ($generate_thubnails) {
1869
  $amd = wp_generate_attachment_metadata($id, $file);
1908
  __("Failed to write file to disk."));
1909
 
1910
  // Install user overrides. Did we mention that this voids your warranty?
1911
+ if (is_array($overrides)) {
1912
  extract($overrides, EXTR_OVERWRITE);
1913
+ }
1914
  // A successful upload will pass this test. It makes no sense to override this one.
1915
+ if ($file['error'] > 0) {
1916
  return $upload_error_handler($file, $upload_error_strings[$file['error']]);
1917
+ }
1918
  // A non-empty file will pass this test.
1919
+ if (!($file['size'] > 0 )) {
1920
  return $upload_error_handler($file, __('File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.'));
1921
+ }
1922
  // A properly uploaded file will pass this test. There should be no reason to override this one.
1923
+ if (!file_exists($file['tmp_name'])) {
1924
  return $upload_error_handler($file, __('Specified file failed upload test.'));
1925
+ }
1926
  // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter.
1927
 
1928
  $wp_filetype = wp_check_filetype($file['name']);
1930
 
1931
  extract($wp_filetype);
1932
 
1933
+ if ((!$type || !$ext ) && !current_user_can('unfiltered_upload')) {
1934
  return $upload_error_handler($file, __('File type does not meet security guidelines. Try another.'));
1935
+ }
1936
+ if (!$ext) {
1937
  $ext = ltrim(strrchr($file['name'], '.'), '.');
1938
+ }
1939
+ if (!$type) {
1940
  $type = $file['type'];
1941
+ }
1942
  // A writable uploads dir will pass this test. Again, there's no point overriding this one.
1943
+ if (!( ( $uploads = wp_upload_dir($time) ) && false === $uploads['error'] )) {
1944
  return $upload_error_handler($file, $uploads['error']);
1945
+ }
1946
  // fix filename (encode non-standard characters)
1947
  $file['name'] = filename_fix($file['name']);
1948
  $filename = wp_unique_filename($uploads['path'], $file['name']);
1950
 
1951
  // Move the file to the uploads dir
1952
  $new_file = $uploads['path'] . "/$filename";
1953
+ if (false === rename($file['tmp_name'], $new_file)) {
1954
  DebugEcho("upload: rename failed");
1955
+ DebugEcho("old file: " . $file['tmp_name']);
1956
  DebugEcho("new file: $new_file");
1957
  //DebugDump($file);
1958
  //DebugDump($uploads);
1959
  return $upload_error_handler($file, sprintf(__('The uploaded file could not be moved to %s.'), $uploads['path']));
1960
+ } else {
1961
+ DebugEcho("upload: rename to $new_file succeeded");
1962
  }
1963
 
1964
  // Set correct file permissions
1965
  $stat = stat(dirname($new_file));
1966
  $perms = $stat['mode'] & 0000666;
1967
+ @chmod($new_file, $perms);
1968
+ DebugEcho("upload: permissions changed");
1969
 
1970
  // Compute the URL
1971
  $url = $uploads['url'] . "/$filename";
1972
 
1973
+ DebugEcho("upload: before apply_filters");
1974
  $return = apply_filters('wp_handle_upload', array('file' => $new_file, 'url' => $url, 'type' => $type));
1975
+ DebugEcho("upload: after apply_filters");
1976
 
1977
  return $return;
1978
  }
2384
  DebugEcho("Auto gallery: prepend");
2385
  }
2386
  return;
2387
+ } else {
2388
+ DebugEcho("Auto gallery: none");
2389
  }
2390
 
2391
  $pics = "";
2434
  }
2435
  if ($autoadd_images) {
2436
  if ($config['images_append']) {
2437
+ DebugEcho("auto adding images to end");
2438
  $content .= $pics;
2439
  } else {
2440
+ DebugEcho("auto adding images to beginning");
2441
  $content = $pics . $content;
2442
  }
2443
+ } else {
2444
+ DebugEcho("Not auto adding images");
2445
  }
2446
+ } else {
2447
+ DebugEcho("Custom image field, not adding images");
2448
  }
2449
  }
2450
 
2674
  * @param string
2675
  * @param string
2676
  */
2677
+ function BuildBooleanSelect($label, $id, $current_value, $recommendation = NULL, $options = null) {
2678
+
2679
  $html = "<tr>
2680
  <th scope='row'>" . $label . ":";
2681
  if (!empty($recommendation)) {
2682
  $html.='<br /><span class = "recommendation">' . $recommendation . '</span>';
2683
  }
2684
+
2685
+ if (!(is_array($options) && count($options) == 2)) {
2686
+ $options = Array('Yes', 'No');
2687
+ }
2688
+
2689
  $html.="</th>
2690
  <td><select name='$id' id='$id'>
2691
+ <option value='1'>" . __($options[0], 'postie') . "</option>
2692
+ <option value='0' " . (!$current_value ? "selected='selected'" : "") . ">" . __($options[1], 'postie') . '</option>
2693
  </select>';
 
2694
  $html.="</td>\n</tr>";
2695
+
2696
  return $html;
2697
  }
2698
 
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.5.19
8
  Author: Wayne Allen
9
  Author URI: http://allens-home.com/
10
  License: GPL2
@@ -27,10 +27,10 @@
27
  */
28
 
29
  /*
30
- $Id: postie.php 905802 2014-04-30 19:15:38Z WayneAllen $
31
  */
32
 
33
- define('POSTIE_VERSION', '1.5.19');
34
  define("POSTIE_ROOT", dirname(__FILE__));
35
  define("POSTIE_URL", WP_PLUGIN_URL . '/' . basename(dirname(__FILE__)));
36
 
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.5.20
8
  Author: Wayne Allen
9
  Author URI: http://allens-home.com/
10
  License: GPL2
27
  */
28
 
29
  /*
30
+ $Id: postie.php 923356 2014-05-29 22:23:55Z WayneAllen $
31
  */
32
 
33
+ define('POSTIE_VERSION', '1.5.20');
34
  define("POSTIE_ROOT", dirname(__FILE__));
35
  define("POSTIE_URL", WP_PLUGIN_URL . '/' . basename(dirname(__FILE__)));
36
 
readme.txt CHANGED
@@ -5,8 +5,8 @@ Author URI: http://allens-home.com/
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
- Tested up to: 3.9
9
- Stable tag: 1.5.19
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
@@ -444,6 +444,11 @@ All script, style and body tags are stripped from html emails.
444
  Attachments are now processed in the order they were attached.
445
 
446
  == CHANGELOG ==
 
 
 
 
 
447
  = 1.5.19 (2014.04.30) =
448
  * Updated image preview to recognize all variables.
449
  * Updated "wordpress_default" images template to match WP 3.8.
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
+ Tested up to: 3.9.1
9
+ Stable tag: 1.5.20
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
444
  Attachments are now processed in the order they were attached.
445
 
446
  == CHANGELOG ==
447
+ = 1.5.20 (2014.05.29) =
448
+ * Added logic to prevent appending images when preferred text type is HTML.
449
+ * Improved help text on several options and clarified options.
450
+ * Additional logging around attachment uploading
451
+
452
  = 1.5.19 (2014.04.30) =
453
  * Updated image preview to recognize all variables.
454
  * Updated "wordpress_default" images template to match WP 3.8.