The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 027
LICENSE 33
MANIFEST 23
META.json 79204
META.yml 74167
Makefile.PL 1311
README 33
lib/Email/Sender/Failure/Multi.pm 2020
lib/Email/Sender/Failure/Permanent.pm 33
lib/Email/Sender/Failure/Temporary.pm 33
lib/Email/Sender/Failure.pm 4343
lib/Email/Sender/Manual/QuickStart.pm 245245
lib/Email/Sender/Manual.pm 99
lib/Email/Sender/Role/CommonSending.pm 4646
lib/Email/Sender/Role/HasMessage.pm 88
lib/Email/Sender/Simple.pm 99
lib/Email/Sender/Success/Partial.pm 1010
lib/Email/Sender/Success.pm 99
lib/Email/Sender/Transport/DevNull.pm 99
lib/Email/Sender/Transport/Failable.pm 1919
lib/Email/Sender/Transport/Maildir.pm 2424
lib/Email/Sender/Transport/Mbox.pm 1313
lib/Email/Sender/Transport/Print.pm 1010
lib/Email/Sender/Transport/SMTP/Persistent.pm 1717
lib/Email/Sender/Transport/SMTP.pm 5367
lib/Email/Sender/Transport/Sendmail.pm 1616
lib/Email/Sender/Transport/Test.pm 5151
lib/Email/Sender/Transport/Wrapper.pm 1010
lib/Email/Sender/Transport.pm 2626
lib/Email/Sender/Util.pm 721
lib/Email/Sender.pm 51107
t/00-report-prereqs.dd 059
t/00-report-prereqs.t 0183
t/000-report-versions-tiny.t 1010
xt/release/changes_has_content.t 11
35 files changed (This is a version diff) 9871456
@@ -1,5 +1,32 @@
 Revision history for Email-Sender
 
+1.300018  2015-05-27 15:28:44-04:00 America/New_York
+        - stable release of changes from 1.300017
+
+1.300017  2015-05-14 13:17:39-04:00 America/New_York (TRIAL RELEASE)
+        - cope with a double-encoding but in Net::SMTP
+          for details, https://rt.cpan.org/Ticket/Display.html?id=104433
+
+1.300016  2014-10-10 22:54:00-04:00 America/New_York
+        - no changes since 1.300015, just made non-trial release
+
+1.300015  2014-09-12 22:01:37-04:00 America/New_York (TRIAL RELEASE)
+          [THIS MIGHT BREAK YOUR CODE]
+        - version 1.300008 was meant to rewrite line endings when sending to
+          sendmail, but the change was not effective; it has been fixed
+
+1.300014  2014-08-28 14:21:26-04:00 America/New_York
+        - do not try passing an empty string as a Failure message
+
+1.300013  2014-08-28 11:00:16-04:00 America/New_York
+        - sometimes, if no error is given and $smtp->message returns (),
+          the arguments to the Failure constructor were out of alignment and
+          the failure's error message would be "code"; this has been fixed
+
+1.300012  2014-07-10 09:55:35-04:00 America/New_York
+        - documentation fix: there's no Email::MIME->delete_header
+          (thanks, Kris Matthews)
+
 1.300011  2014-03-02 18:16:12-05:00 America/New_York
         - run the sendmail program with -i by default (thanks, William Blunn)
         - do not die when a race causes mkpath(Maildir/new) to fail because the
@@ -1,4 +1,4 @@
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@ b) the "Artistic License"
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2014 by Ricardo Signes.
+This software is Copyright (c) 2015 by Ricardo Signes.
 
 This is free software, licensed under:
 
@@ -272,7 +272,7 @@ That's all there is to it!
 
 --- The Artistic License 1.0 ---
 
-This software is Copyright (c) 2014 by Ricardo Signes.
+This software is Copyright (c) 2015 by Ricardo Signes.
 
 This is free software, licensed under:
 
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.014.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.036.
 Changes
 LICENSE
 MANIFEST
@@ -33,7 +33,8 @@ lib/Email/Sender/Transport/Wrapper.pm
 lib/Email/Sender/Util.pm
 misc/smtp.t
 t/00-load.t
-t/000-report-versions-tiny.t
+t/00-report-prereqs.dd
+t/00-report-prereqs.t
 t/devnull.t
 t/fail-multi.t
 t/fail.t
@@ -4,25 +4,24 @@
       "Ricardo Signes <rjbs@cpan.org>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 5.014, CPAN::Meta::Converter version 2.133380",
+   "generated_by" : "Dist::Zilla version 5.036, CPAN::Meta::Converter version 2.150001",
    "license" : [
       "perl_5"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Email-Sender",
    "prereqs" : {
       "configure" : {
          "requires" : {
-            "ExtUtils::MakeMaker" : "6.30"
+            "ExtUtils::MakeMaker" : "0"
          }
       },
       "develop" : {
          "requires" : {
-            "Test::Pod" : "1.41",
-            "version" : "0.9901"
+            "Test::Pod" : "1.41"
          }
       },
       "runtime" : {
@@ -35,7 +34,7 @@
             "File::Basename" : "0",
             "File::Path" : "2.06",
             "File::Spec" : "0",
-            "IO::File" : "0",
+            "IO::File" : "1.11",
             "IO::Handle" : "0",
             "List::MoreUtils" : "0",
             "Module::Runtime" : "0",
@@ -51,14 +50,20 @@
             "Throwable::Error" : "0.200003",
             "Try::Tiny" : "0",
             "strict" : "0",
+            "utf8" : "0",
             "warnings" : "0"
          }
       },
       "test" : {
+         "recommends" : {
+            "CPAN::Meta" : "2.120900"
+         },
          "requires" : {
             "Capture::Tiny" : "0.08",
             "Cwd" : "0",
             "Exporter" : "0",
+            "ExtUtils::MakeMaker" : "0",
+            "File::Spec" : "0",
             "File::Temp" : "0",
             "Test::More" : "0.96",
             "lib" : "0"
@@ -77,26 +82,40 @@
          "web" : "https://github.com/rjbs/Email-Sender"
       }
    },
-   "version" : "1.300011",
+   "version" : "1.300018",
    "x_Dist_Zilla" : {
       "perl" : {
-         "version" : "5.019009"
+         "version" : "5.021010"
       },
       "plugins" : [
          {
             "class" : "Dist::Zilla::Plugin::Git::GatherDir",
+            "config" : {
+               "Dist::Zilla::Plugin::GatherDir" : {
+                  "exclude_filename" : [],
+                  "exclude_match" : [],
+                  "follow_symlinks" : "0",
+                  "include_dotfiles" : "0",
+                  "prefix" : "",
+                  "prune_directory" : [],
+                  "root" : "."
+               },
+               "Dist::Zilla::Plugin::Git::GatherDir" : {
+                  "include_untracked" : "0"
+               }
+            },
             "name" : "@RJBS/Git::GatherDir",
-            "version" : "2.020"
+            "version" : "2.034"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
             "name" : "@RJBS/CheckPrereqsIndexed",
-            "version" : "0.010"
+            "version" : "0.015"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckExtraTests",
             "name" : "@RJBS/CheckExtraTests",
-            "version" : "0.018"
+            "version" : "0.027"
          },
          {
             "class" : "Dist::Zilla::Plugin::PromptIfStale",
@@ -112,7 +131,7 @@
                }
             },
             "name" : "@RJBS/RJBS-Outdated",
-            "version" : "0.020"
+            "version" : "0.044"
          },
          {
             "class" : "Dist::Zilla::Plugin::PromptIfStale",
@@ -126,112 +145,127 @@
                }
             },
             "name" : "@RJBS/CPAN-Outdated",
-            "version" : "0.020"
+            "version" : "0.044"
          },
          {
             "class" : "Dist::Zilla::Plugin::PruneCruft",
             "name" : "@RJBS/@Filter/PruneCruft",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::ManifestSkip",
             "name" : "@RJBS/@Filter/ManifestSkip",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaYAML",
             "name" : "@RJBS/@Filter/MetaYAML",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::License",
             "name" : "@RJBS/@Filter/License",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::Readme",
             "name" : "@RJBS/@Filter/Readme",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::ExecDir",
             "name" : "@RJBS/@Filter/ExecDir",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::ShareDir",
             "name" : "@RJBS/@Filter/ShareDir",
-            "version" : "5.014"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::MakeMaker",
-            "name" : "@RJBS/@Filter/MakeMaker",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::Manifest",
             "name" : "@RJBS/@Filter/Manifest",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::TestRelease",
             "name" : "@RJBS/@Filter/TestRelease",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::ConfirmRelease",
             "name" : "@RJBS/@Filter/ConfirmRelease",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::UploadToCPAN",
             "name" : "@RJBS/@Filter/UploadToCPAN",
-            "version" : "5.014"
+            "version" : "5.036"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::MakeMaker",
+            "config" : {
+               "Dist::Zilla::Role::TestRunner" : {
+                  "default_jobs" : 9
+               }
+            },
+            "name" : "@RJBS/MakeMaker",
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::AutoPrereqs",
             "name" : "@RJBS/AutoPrereqs",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::NextVersion",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::NextVersion" : {
+                  "first_version" : "0.001",
+                  "version_by_branch" : "0",
+                  "version_regexp" : "(?^:^([0-9]+\\.[0-9]+)$)"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@RJBS/Git::NextVersion",
-            "version" : "2.020"
+            "version" : "2.034"
          },
          {
             "class" : "Dist::Zilla::Plugin::PkgVersion",
             "name" : "@RJBS/PkgVersion",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaConfig",
             "name" : "@RJBS/MetaConfig",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaJSON",
             "name" : "@RJBS/MetaJSON",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::NextRelease",
             "name" : "@RJBS/NextRelease",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
             "name" : "@RJBS/Test::ChangesHasContent",
-            "version" : "0.006"
+            "version" : "0.008"
          },
          {
             "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
             "name" : "@RJBS/PodSyntaxTests",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
-            "class" : "Dist::Zilla::Plugin::ReportVersions::Tiny",
-            "name" : "@RJBS/ReportVersions::Tiny",
-            "version" : "1.10"
+            "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
+            "name" : "@RJBS/Test::ReportPrereqs",
+            "version" : "0.021"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -242,7 +276,7 @@
                }
             },
             "name" : "@RJBS/TestMoreWithSubtests",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::PodWeaver",
@@ -259,123 +293,200 @@
                      {
                         "class" : "Pod::Weaver::Plugin::EnsurePod5",
                         "name" : "@CorePrep/EnsurePod5",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Plugin::H1Nester",
                         "name" : "@CorePrep/H1Nester",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Plugin::SingleEncoding",
                         "name" : "@RJBS/SingleEncoding",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Name",
                         "name" : "@RJBS/Name",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Version",
                         "name" : "@RJBS/Version",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Region",
                         "name" : "@RJBS/Prelude",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "@RJBS/Synopsis",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "@RJBS/Description",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "@RJBS/Overview",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Generic",
                         "name" : "@RJBS/Stability",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Collect",
                         "name" : "Attributes",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Collect",
                         "name" : "Methods",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Collect",
                         "name" : "Functions",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Leftovers",
                         "name" : "@RJBS/Leftovers",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Region",
                         "name" : "@RJBS/postlude",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Authors",
                         "name" : "@RJBS/Authors",
-                        "version" : "4.006"
+                        "version" : "4.012"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Contributors",
+                        "name" : "@RJBS/Contributors",
+                        "version" : "0.009"
                      },
                      {
                         "class" : "Pod::Weaver::Section::Legal",
                         "name" : "@RJBS/Legal",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      },
                      {
                         "class" : "Pod::Weaver::Plugin::Transformer",
                         "name" : "@RJBS/List",
-                        "version" : "4.006"
+                        "version" : "4.012"
                      }
                   ]
                }
             },
             "name" : "@RJBS/PodWeaver",
-            "version" : "4.005"
+            "version" : "4.006"
          },
          {
             "class" : "Dist::Zilla::Plugin::GithubMeta",
             "name" : "@RJBS/GithubMeta",
-            "version" : "0.42"
+            "version" : "0.50"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Check",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Check" : {
+                  "untracked_files" : "die"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [
+                     "dist.ini",
+                     "Changes"
+                  ],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@RJBS/@Git/Check",
-            "version" : "2.020"
+            "version" : "2.034"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Commit",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Commit" : {
+                  "add_files_in" : [],
+                  "commit_msg" : "v%v%n%n%c",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::DirtyFiles" : {
+                  "allow_dirty" : [
+                     "dist.ini",
+                     "Changes"
+                  ],
+                  "allow_dirty_match" : [],
+                  "changelog" : "Changes"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@RJBS/@Git/Commit",
-            "version" : "2.020"
+            "version" : "2.034"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Tag",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Tag" : {
+                  "branch" : null,
+                  "signed" : 0,
+                  "tag" : "1.300018",
+                  "tag_format" : "%v",
+                  "tag_message" : "v%v",
+                  "time_zone" : "local"
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@RJBS/@Git/Tag",
-            "version" : "2.020"
+            "version" : "2.034"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Push",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Push" : {
+                  "push_to" : [
+                     "origin :",
+                     "github :"
+                  ],
+                  "remotes_must_exist" : 0
+               },
+               "Dist::Zilla::Role::Git::Repo" : {
+                  "repo_root" : "."
+               }
+            },
             "name" : "@RJBS/@Git/Push",
-            "version" : "2.020"
+            "version" : "2.034"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::Git::Contributors",
+            "config" : {
+               "Dist::Zilla::Plugin::Git::Contributors" : {
+                  "include_authors" : "0",
+                  "include_releaser" : "1",
+                  "order_by" : "name",
+                  "paths" : []
+               }
+            },
+            "name" : "@RJBS/Git::Contributors",
+            "version" : "0.011"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -386,7 +497,7 @@
                }
             },
             "name" : "Prereqs",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -397,7 +508,7 @@
                }
             },
             "name" : "DevelopRequires",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::RemovePrereqs",
@@ -412,56 +523,70 @@
                }
             },
             "name" : "RemovePrereqs",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":InstallModules",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":IncModules",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":TestFiles",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ExecFiles",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ShareFiles",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":MainModule",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":AllFiles",
-            "version" : "5.014"
+            "version" : "5.036"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":NoFiles",
-            "version" : "5.014"
+            "version" : "5.036"
          }
       ],
       "zilla" : {
          "class" : "Dist::Zilla::Dist::Builder",
          "config" : {
-            "is_trial" : "0"
+            "is_trial" : ""
          },
-         "version" : "5.014"
+         "version" : "5.036"
       }
-   }
+   },
+   "x_contributors" : [
+      "Alex Efros <powerman@powerman.name>",
+      "Aristotle Pagaltzis <pagaltzis@gmx.de>",
+      "Christian Walde <walde.christian@googlemail.com>",
+      "David Golden <dagolden@cpan.org>",
+      "David Steinbrunner <dsteinbrunner@pobox.com>",
+      "Hans Dieter Pearcey <hdp@cpan.org>",
+      "HIROSE Masaaki <hirose31@gmail.com>",
+      "Justin Hunter <justin.d.hunter@gmail.com>",
+      "Kenichi Ishigaki <ishigaki@cpan.org>",
+      "kga <watrty@gmail.com>",
+      "Kris Matthews <kris@tigerlms.com>",
+      "William Blunn <zgpmax@cpan.org>"
+   ]
 }
 
@@ -6,13 +6,15 @@ build_requires:
   Capture::Tiny: '0.08'
   Cwd: '0'
   Exporter: '0'
+  ExtUtils::MakeMaker: '0'
+  File::Spec: '0'
   File::Temp: '0'
   Test::More: '0.96'
   lib: '0'
 configure_requires:
-  ExtUtils::MakeMaker: '6.30'
+  ExtUtils::MakeMaker: '0'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.014, CPAN::Meta::Converter version 2.133380'
+generated_by: 'Dist::Zilla version 5.036, CPAN::Meta::Converter version 2.150001'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -27,7 +29,7 @@ requires:
   File::Basename: '0'
   File::Path: '2.06'
   File::Spec: '0'
-  IO::File: '0'
+  IO::File: '1.11'
   IO::Handle: '0'
   List::MoreUtils: '0'
   Module::Runtime: '0'
@@ -43,28 +45,40 @@ requires:
   Throwable::Error: '0.200003'
   Try::Tiny: '0'
   strict: '0'
+  utf8: '0'
   warnings: '0'
 resources:
   bugtracker: https://github.com/rjbs/Email-Sender/issues
   homepage: https://github.com/rjbs/Email-Sender
   repository: https://github.com/rjbs/Email-Sender.git
-version: '1.300011'
+version: '1.300018'
 x_Dist_Zilla:
   perl:
-    version: '5.019009'
+    version: '5.021010'
   plugins:
     -
       class: Dist::Zilla::Plugin::Git::GatherDir
+      config:
+        Dist::Zilla::Plugin::GatherDir:
+          exclude_filename: []
+          exclude_match: []
+          follow_symlinks: '0'
+          include_dotfiles: '0'
+          prefix: ''
+          prune_directory: []
+          root: .
+        Dist::Zilla::Plugin::Git::GatherDir:
+          include_untracked: '0'
       name: '@RJBS/Git::GatherDir'
-      version: '2.020'
+      version: '2.034'
     -
       class: Dist::Zilla::Plugin::CheckPrereqsIndexed
       name: '@RJBS/CheckPrereqsIndexed'
-      version: '0.010'
+      version: '0.015'
     -
       class: Dist::Zilla::Plugin::CheckExtraTests
       name: '@RJBS/CheckExtraTests'
-      version: '0.018'
+      version: '0.027'
     -
       class: Dist::Zilla::Plugin::PromptIfStale
       config:
@@ -76,7 +90,7 @@ x_Dist_Zilla:
           phase: build
           skip: []
       name: '@RJBS/RJBS-Outdated'
-      version: '0.020'
+      version: '0.044'
     -
       class: Dist::Zilla::Plugin::PromptIfStale
       config:
@@ -87,91 +101,101 @@ x_Dist_Zilla:
           phase: release
           skip: []
       name: '@RJBS/CPAN-Outdated'
-      version: '0.020'
+      version: '0.044'
     -
       class: Dist::Zilla::Plugin::PruneCruft
       name: '@RJBS/@Filter/PruneCruft'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::ManifestSkip
       name: '@RJBS/@Filter/ManifestSkip'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::MetaYAML
       name: '@RJBS/@Filter/MetaYAML'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::License
       name: '@RJBS/@Filter/License'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::Readme
       name: '@RJBS/@Filter/Readme'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::ExecDir
       name: '@RJBS/@Filter/ExecDir'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::ShareDir
       name: '@RJBS/@Filter/ShareDir'
-      version: '5.014'
-    -
-      class: Dist::Zilla::Plugin::MakeMaker
-      name: '@RJBS/@Filter/MakeMaker'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::Manifest
       name: '@RJBS/@Filter/Manifest'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::TestRelease
       name: '@RJBS/@Filter/TestRelease'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::ConfirmRelease
       name: '@RJBS/@Filter/ConfirmRelease'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::UploadToCPAN
       name: '@RJBS/@Filter/UploadToCPAN'
-      version: '5.014'
+      version: '5.036'
+    -
+      class: Dist::Zilla::Plugin::MakeMaker
+      config:
+        Dist::Zilla::Role::TestRunner:
+          default_jobs: 9
+      name: '@RJBS/MakeMaker'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::AutoPrereqs
       name: '@RJBS/AutoPrereqs'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::Git::NextVersion
+      config:
+        Dist::Zilla::Plugin::Git::NextVersion:
+          first_version: '0.001'
+          version_by_branch: '0'
+          version_regexp: (?^:^([0-9]+\.[0-9]+)$)
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@RJBS/Git::NextVersion'
-      version: '2.020'
+      version: '2.034'
     -
       class: Dist::Zilla::Plugin::PkgVersion
       name: '@RJBS/PkgVersion'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::MetaConfig
       name: '@RJBS/MetaConfig'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::MetaJSON
       name: '@RJBS/MetaJSON'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::NextRelease
       name: '@RJBS/NextRelease'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::Test::ChangesHasContent
       name: '@RJBS/Test::ChangesHasContent'
-      version: '0.006'
+      version: '0.008'
     -
       class: Dist::Zilla::Plugin::PodSyntaxTests
       name: '@RJBS/PodSyntaxTests'
-      version: '5.014'
+      version: '5.036'
     -
-      class: Dist::Zilla::Plugin::ReportVersions::Tiny
-      name: '@RJBS/ReportVersions::Tiny'
-      version: '1.10'
+      class: Dist::Zilla::Plugin::Test::ReportPrereqs
+      name: '@RJBS/Test::ReportPrereqs'
+      version: '0.021'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -179,7 +203,7 @@ x_Dist_Zilla:
           phase: test
           type: requires
       name: '@RJBS/TestMoreWithSubtests'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::PodWeaver
       config:
@@ -193,97 +217,153 @@ x_Dist_Zilla:
             -
               class: Pod::Weaver::Plugin::EnsurePod5
               name: '@CorePrep/EnsurePod5'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Plugin::H1Nester
               name: '@CorePrep/H1Nester'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Plugin::SingleEncoding
               name: '@RJBS/SingleEncoding'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Name
               name: '@RJBS/Name'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Version
               name: '@RJBS/Version'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Region
               name: '@RJBS/Prelude'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Generic
               name: '@RJBS/Synopsis'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Generic
               name: '@RJBS/Description'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Generic
               name: '@RJBS/Overview'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Generic
               name: '@RJBS/Stability'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Collect
               name: Attributes
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Collect
               name: Methods
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Collect
               name: Functions
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Leftovers
               name: '@RJBS/Leftovers'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Region
               name: '@RJBS/postlude'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Section::Authors
               name: '@RJBS/Authors'
-              version: '4.006'
+              version: '4.012'
+            -
+              class: Pod::Weaver::Section::Contributors
+              name: '@RJBS/Contributors'
+              version: '0.009'
             -
               class: Pod::Weaver::Section::Legal
               name: '@RJBS/Legal'
-              version: '4.006'
+              version: '4.012'
             -
               class: Pod::Weaver::Plugin::Transformer
               name: '@RJBS/List'
-              version: '4.006'
+              version: '4.012'
       name: '@RJBS/PodWeaver'
-      version: '4.005'
+      version: '4.006'
     -
       class: Dist::Zilla::Plugin::GithubMeta
       name: '@RJBS/GithubMeta'
-      version: '0.42'
+      version: '0.50'
     -
       class: Dist::Zilla::Plugin::Git::Check
+      config:
+        Dist::Zilla::Plugin::Git::Check:
+          untracked_files: die
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty:
+            - dist.ini
+            - Changes
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@RJBS/@Git/Check'
-      version: '2.020'
+      version: '2.034'
     -
       class: Dist::Zilla::Plugin::Git::Commit
+      config:
+        Dist::Zilla::Plugin::Git::Commit:
+          add_files_in: []
+          commit_msg: v%v%n%n%c
+          time_zone: local
+        Dist::Zilla::Role::Git::DirtyFiles:
+          allow_dirty:
+            - dist.ini
+            - Changes
+          allow_dirty_match: []
+          changelog: Changes
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@RJBS/@Git/Commit'
-      version: '2.020'
+      version: '2.034'
     -
       class: Dist::Zilla::Plugin::Git::Tag
+      config:
+        Dist::Zilla::Plugin::Git::Tag:
+          branch: ~
+          signed: 0
+          tag: '1.300018'
+          tag_format: '%v'
+          tag_message: v%v
+          time_zone: local
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@RJBS/@Git/Tag'
-      version: '2.020'
+      version: '2.034'
     -
       class: Dist::Zilla::Plugin::Git::Push
+      config:
+        Dist::Zilla::Plugin::Git::Push:
+          push_to:
+            - 'origin :'
+            - 'github :'
+          remotes_must_exist: 0
+        Dist::Zilla::Role::Git::Repo:
+          repo_root: .
       name: '@RJBS/@Git/Push'
-      version: '2.020'
+      version: '2.034'
+    -
+      class: Dist::Zilla::Plugin::Git::Contributors
+      config:
+        Dist::Zilla::Plugin::Git::Contributors:
+          include_authors: '0'
+          include_releaser: '1'
+          order_by: name
+          paths: []
+      name: '@RJBS/Git::Contributors'
+      version: '0.011'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -291,7 +371,7 @@ x_Dist_Zilla:
           phase: runtime
           type: requires
       name: Prereqs
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -299,7 +379,7 @@ x_Dist_Zilla:
           phase: develop
           type: requires
       name: DevelopRequires
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::RemovePrereqs
       config:
@@ -310,41 +390,54 @@ x_Dist_Zilla:
             - Net::SMTP::SSL
             - Sub::Override
       name: RemovePrereqs
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':InstallModules'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':IncModules'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':TestFiles'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ExecFiles'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ShareFiles'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':MainModule'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':AllFiles'
-      version: '5.014'
+      version: '5.036'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':NoFiles'
-      version: '5.014'
+      version: '5.036'
   zilla:
     class: Dist::Zilla::Dist::Builder
     config:
-      is_trial: '0'
-    version: '5.014'
+      is_trial: ''
+    version: '5.036'
+x_contributors:
+  - 'Alex Efros <powerman@powerman.name>'
+  - 'Aristotle Pagaltzis <pagaltzis@gmx.de>'
+  - 'Christian Walde <walde.christian@googlemail.com>'
+  - 'David Golden <dagolden@cpan.org>'
+  - 'David Steinbrunner <dsteinbrunner@pobox.com>'
+  - 'Hans Dieter Pearcey <hdp@cpan.org>'
+  - 'HIROSE Masaaki <hirose31@gmail.com>'
+  - 'Justin Hunter <justin.d.hunter@gmail.com>'
+  - 'Kenichi Ishigaki <ishigaki@cpan.org>'
+  - 'kga <watrty@gmail.com>'
+  - 'Kris Matthews <kris@tigerlms.com>'
+  - 'William Blunn <zgpmax@cpan.org>'
@@ -1,20 +1,16 @@
-
-# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.014.
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.036.
 use strict;
 use warnings;
 
 
 
-use ExtUtils::MakeMaker 6.30;
-
-
+use ExtUtils::MakeMaker;
 
 my %WriteMakefileArgs = (
   "ABSTRACT" => "a library for sending email",
   "AUTHOR" => "Ricardo Signes <rjbs\@cpan.org>",
-  "BUILD_REQUIRES" => {},
   "CONFIGURE_REQUIRES" => {
-    "ExtUtils::MakeMaker" => "6.30"
+    "ExtUtils::MakeMaker" => 0
   },
   "DISTNAME" => "Email-Sender",
   "EXE_FILES" => [],
@@ -29,7 +25,7 @@ my %WriteMakefileArgs = (
     "File::Basename" => 0,
     "File::Path" => "2.06",
     "File::Spec" => 0,
-    "IO::File" => 0,
+    "IO::File" => "1.11",
     "IO::Handle" => 0,
     "List::MoreUtils" => 0,
     "Module::Runtime" => 0,
@@ -45,17 +41,20 @@ my %WriteMakefileArgs = (
     "Throwable::Error" => "0.200003",
     "Try::Tiny" => 0,
     "strict" => 0,
+    "utf8" => 0,
     "warnings" => 0
   },
   "TEST_REQUIRES" => {
     "Capture::Tiny" => "0.08",
     "Cwd" => 0,
     "Exporter" => 0,
+    "ExtUtils::MakeMaker" => 0,
+    "File::Spec" => 0,
     "File::Temp" => 0,
     "Test::More" => "0.96",
     "lib" => 0
   },
-  "VERSION" => "1.300011",
+  "VERSION" => "1.300018",
   "test" => {
     "TESTS" => "t/*.t"
   }
@@ -70,12 +69,13 @@ my %FallbackPrereqs = (
   "Email::Address" => 0,
   "Email::Simple" => "1.998",
   "Exporter" => 0,
+  "ExtUtils::MakeMaker" => 0,
   "Fcntl" => 0,
   "File::Basename" => 0,
   "File::Path" => "2.06",
   "File::Spec" => 0,
   "File::Temp" => 0,
-  "IO::File" => 0,
+  "IO::File" => "1.11",
   "IO::Handle" => 0,
   "List::MoreUtils" => 0,
   "Module::Runtime" => 0,
@@ -93,6 +93,7 @@ my %FallbackPrereqs = (
   "Try::Tiny" => 0,
   "lib" => 0,
   "strict" => 0,
+  "utf8" => 0,
   "warnings" => 0
 );
 
@@ -107,6 +108,3 @@ delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
   unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
 
 WriteMakefile(%WriteMakefileArgs);
-
-
-
@@ -1,15 +1,15 @@
 
 
 This archive contains the distribution Email-Sender,
-version 1.300011:
+version 1.300018:
 
   a library for sending email
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
 
 
-This README file was generated by Dist::Zilla::Plugin::Readme v5.014.
+This README file was generated by Dist::Zilla::Plugin::Readme v5.036.
 
@@ -1,22 +1,22 @@
 package Email::Sender::Failure::Multi;
 # ABSTRACT: an aggregate of multiple failures
-$Email::Sender::Failure::Multi::VERSION = '1.300011';
+$Email::Sender::Failure::Multi::VERSION = '1.300018';
 use Moo;
 extends 'Email::Sender::Failure';
 
 use MooX::Types::MooseLike::Base qw(ArrayRef);
 
-# =head1 DESCRIPTION
-#
-# A multiple failure report is raised when more than one failure is encountered
-# when sending a single message, or when mixed states were encountered.
-#
-# =attr failures
-#
-# This method returns a list of other Email::Sender::Failure objects represented
-# by this multi.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod A multiple failure report is raised when more than one failure is encountered
+#pod when sending a single message, or when mixed states were encountered.
+#pod
+#pod =attr failures
+#pod
+#pod This method returns a list of other Email::Sender::Failure objects represented
+#pod by this multi.
+#pod
+#pod =cut
 
 has failures => (
   is       => 'ro',
@@ -47,12 +47,12 @@ sub recipients {
   return \@rcpts;
 }
 
-# =method isa
-#
-# A multiple failure will report that it is a Permanent or Temporary if all of
-# its contained failures are failures of that type.
-#
-# =cut
+#pod =method isa
+#pod
+#pod A multiple failure will report that it is a Permanent or Temporary if all of
+#pod its contained failures are failures of that type.
+#pod
+#pod =cut
 
 sub isa {
   my ($self, $class) = @_;
@@ -84,7 +84,7 @@ Email::Sender::Failure::Multi - an aggregate of multiple failures
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -111,7 +111,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,6 +1,6 @@
 package Email::Sender::Failure::Permanent;
 # ABSTRACT: a permanent delivery failure
-$Email::Sender::Failure::Permanent::VERSION = '1.300011';
+$Email::Sender::Failure::Permanent::VERSION = '1.300018';
 use Moo;
 extends 'Email::Sender::Failure';
 
@@ -19,7 +19,7 @@ Email::Sender::Failure::Permanent - a permanent delivery failure
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 AUTHOR
 
@@ -27,7 +27,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,6 +1,6 @@
 package Email::Sender::Failure::Temporary;
 # ABSTRACT: a temporary delivery failure
-$Email::Sender::Failure::Temporary::VERSION = '1.300011';
+$Email::Sender::Failure::Temporary::VERSION = '1.300018';
 use Moo;
 extends 'Email::Sender::Failure';
 
@@ -19,7 +19,7 @@ Email::Sender::Failure::Temporary - a temporary delivery failure
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 AUTHOR
 
@@ -27,7 +27,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,33 +1,33 @@
 package Email::Sender::Failure;
 # ABSTRACT: a report of failure from an email sending transport
-$Email::Sender::Failure::VERSION = '1.300011';
+$Email::Sender::Failure::VERSION = '1.300018';
 use Moo;
 extends 'Throwable::Error';
 
 use Carp ();
 use MooX::Types::MooseLike::Base qw(ArrayRef);
 
-# =attr message
-#
-# This method returns the failure message, which should describe the failure.
-# Failures stringify to this message.
-#
-# =attr code
-#
-# This returns the numeric code of the failure, if any.  This is mostly useful
-# for network protocol transports like SMTP.  This may be undefined.
-#
-# =cut
+#pod =attr message
+#pod
+#pod This method returns the failure message, which should describe the failure.
+#pod Failures stringify to this message.
+#pod
+#pod =attr code
+#pod
+#pod This returns the numeric code of the failure, if any.  This is mostly useful
+#pod for network protocol transports like SMTP.  This may be undefined.
+#pod
+#pod =cut
 
 has code => (
   is => 'ro',
 );
 
-# =attr recipients
-#
-# This returns a list of addresses to which the email could not be sent.
-#
-# =cut
+#pod =attr recipients
+#pod
+#pod This returns a list of addresses to which the email could not be sent.
+#pod
+#pod =cut
 
 has recipients => (
   isa     => ArrayRef,
@@ -49,17 +49,17 @@ sub recipients {
   return $self->__get_recipients;
 }
 
-# =method throw
-#
-# This method can be used to instantiate and throw an Email::Sender::Failure
-# object at once.
-#
-#   Email::Sender::Failure->throw(\%arg);
-#
-# Instead of a hashref of args, you can pass a single string argument which will
-# be used as the C<message> of the new failure.
-#
-# =cut
+#pod =method throw
+#pod
+#pod This method can be used to instantiate and throw an Email::Sender::Failure
+#pod object at once.
+#pod
+#pod   Email::Sender::Failure->throw(\%arg);
+#pod
+#pod Instead of a hashref of args, you can pass a single string argument which will
+#pod be used as the C<message> of the new failure.
+#pod
+#pod =cut
 
 sub BUILD {
   my ($self) = @_;
@@ -67,19 +67,19 @@ sub BUILD {
     unless $self->message =~ /\S/;
 }
 
-# =head1 SEE ALSO
-#
-# =over
-#
-# =item * L<Email::Sender::Permanent>
-#
-# =item * L<Email::Sender::Temporary>
-#
-# =item * L<Email::Sender::Multi>
-#
-# =back
-#
-# =cut
+#pod =head1 SEE ALSO
+#pod
+#pod =over
+#pod
+#pod =item * L<Email::Sender::Permanent>
+#pod
+#pod =item * L<Email::Sender::Temporary>
+#pod
+#pod =item * L<Email::Sender::Multi>
+#pod
+#pod =back
+#pod
+#pod =cut
 
 no Moo;
 1;
@@ -96,7 +96,7 @@ Email::Sender::Failure - a report of failure from an email sending transport
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 ATTRIBUTES
 
@@ -144,7 +144,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -2,247 +2,247 @@ use strict;
 use warnings;
 package Email::Sender::Manual::QuickStart;
 # ABSTRACT: how to start using Email::Sender right now
-$Email::Sender::Manual::QuickStart::VERSION = '1.300011';
-# =head1 QUICK START
-#
-# =head2 Let's Send Some Mail!
-#
-# No messing around, let's just send some mail.
-#
-#   use strict;
-#   use Email::Sender::Simple qw(sendmail);
-#   use Email::Simple;
-#   use Email::Simple::Creator;
-#
-#   my $email = Email::Simple->create(
-#     header => [
-#       To      => '"Xavier Q. Ample" <x.ample@example.com>',
-#       From    => '"Bob Fishman" <orz@example.mil>',
-#       Subject => "don't forget to *enjoy the sauce*",
-#     ],
-#     body => "This message is short, but at least it's cheap.\n",
-#   );
-#
-#   sendmail($email);
-#
-# That's it.  Your message goes out into the internet and tries to get delivered
-# to C<x.ample@example.com>.
-#
-# In the example above, C<$email> could be an Email::Simple object, a
-# MIME::Entity, a string containing an email message, or one of several other
-# types of input.  If C<Email::Abstract> can understand a value, it can be passed
-# to Email::Sender::Simple.  Email::Sender::Simple tries to make a good guess
-# about how to send the message.  It will usually try to use the F<sendmail>
-# program on unix-like systems and to use SMTP on Windows.  You can specify a
-# transport, if you need to, but normally that shouldn't be an issue.  (See
-# L</Picking a Transport>, though, for more information.)
-#
-# Also note that we imported and used a C<sendmail> routine in the example above.
-# This is exactly the same as saying:
-#
-#   Email::Sender::Simple->send($email);
-#
-# ...but it's a lot easier to type.  You can use either one.
-#
-# =head3 envelope information
-#
-# We didn't have to tell Email::Sender::Simple where to send the message.  If you
-# don't specify recipients, it will use all the email addresses it can find in
-# the F<To> and F<Cc> headers by default.  It will use L<Email::Address> to parse
-# those fields.  Similarly, if no sender is specified, it will use the first
-# address found in the F<From> header.
-#
-# In most email transmission systems, though, the headers are not by necessity
-# tied to the addresses used as the sender and recipients.  For example, your
-# message header might say "From: mailing-list@example.com" while your SMTP
-# client says "MAIL FROM:E<lt>verp-1234@lists.example.comE<gt>".  This is a
-# powerful feature, and is necessary for many email application.  Being able to
-# set those distinctly is important, and Email::Sender::Simple lets you do this:
-#
-#   sendmail($email, { to => [ $to_1, $to_2 ], from => $sender });
-#
-# =head3 in case of error
-#
-# When the message is sent successfully (at least on to its next hop),
-# C<sendmail> will return a true value -- specifically, an
-# L<Email::Sender::Success> object.  This object only rarely has much use.
-# What's more useful is what happens if the message can't be sent.
-#
-# If there is an error sending the message, an exception will be thrown.  It will
-# be an object belonging to the class L<Email::Sender::Failure>.  This object
-# will have a C<message> attribute describing the nature of the failure.  There
-# are several specialized forms of failure, like
-# L<Email::Sender::Failure::Multi>, which is thrown when more than one error is
-# encountered when trying to send.  You don't need to know about these to use
-# Email::Sender::Simple, though.  All you need to know is that C<sendmail>
-# returns true on success and dies on failure.
-#
-# If you'd rather not have to catch exceptions for failure to send mail, you can
-# use the C<try_to_send> method, which can be imported as C<try_to_sendmail>.
-# This method will return just false on failure to send mail.
-#
-# For example:
-#
-#   Email::Sender::Simple->try_to_send($email, { ... });
-#
-#   use Email::Sender::Simple qw(try_to_sendmail);
-#   try_to_sendmail($email, { ... });
-#
-# Some Email::Sender transports can signal success if some, but not all,
-# recipients could be reached.  Email::Sender::Simple does its best to ensure
-# that this never happens.  When you are using Email::Sender::Simple, mail should
-# either be sent or not.  Partial success should never occur.
-#
-# =head2 Picking a Transport
-#
-# =head3 passing in your own transport
-#
-# If Email::Sender::Simple doesn't pick the transport you want, or if you have
-# more specific needs, you can specify a transport in several ways.  The simplest
-# is to build a transport object and pass it in.  You can read more about
-# transports elsewhere.  For now, we'll just assume that you need to send mail
-# via SMTP on an unusual port.  You can send mail like this:
-#
-#   my $transport = Email::Sender::Transport::SMTP->new({
-#     host => 'smtp.example.com',
-#     port => 2525,
-#   });
-#
-#   sendmail($email, { transport => $transport });
-#
-# Now, instead of guessing at what transport to use, Email::Sender::Simple will
-# use the one you provided.  This transport will have to be specified for each
-# call to C<sendmail>, so you might want to look at other options, which follow.
-#
-# =head3 specifying transport in the environment
-#
-# If you have a program that makes several calls to Email::Sender::Simple, and
-# you need to run this program using a different mailserver, you can set
-# environment variables to change the default.  For example:
-#
-#   $ export EMAIL_SENDER_TRANSPORT=SMTP
-#   $ export EMAIL_SENDER_TRANSPORT_host=smtp.example.com
-#   $ export EMAIL_SENDER_TRANSPORT_port=2525
-#
-#   $ perl your-program
-#
-# It is important to note that if you have set the default transport by using the
-# environment, I<< no subsequent C<transport> args to C<sendmail> will be
-# respected >>.  If you set the default transport via the environment, that's it.
-# Everything will use that transport.  (Also, note that while we gave the host and
-# port arguments above in lower case, the casing of arguments in the environment
-# is flattened to support systems where environment variables are of a fixed
-# case.  So, C<EMAIL_SENDER_TRANSPORT_PORT> would also work.
-#
-# This is extremely valuable behavior, as it allows you to audit every message
-# that would be sent by a program by running something like this:
-#
-#   $ export EMAIL_SENDER_TRANSPORT=Maildir
-#   $ perl your-program
-#
-# In that example, any message sent via Email::Sender::Simple would be delivered
-# to a maildir in the current directory.
-#
-# =head3 subclassing to change the default transport
-#
-# If you want to use a library that will behave like Email::Sender::Simple but
-# with a different default transport, you can subclass Email::Sender::Simple and
-# replace the C<build_default_transport> method.
-#
-# =head2 Testing
-#
-# Email::Sender::Simple makes it very, very easy to test code that sends email.
-# The simplest way is to do something like this:
-#
-#   use Test::More;
-#   BEGIN { $ENV{EMAIL_SENDER_TRANSPORT} = 'Test' }
-#   use YourCode;
-#
-#   YourCode->run;
-#
-#   my @deliveries = Email::Sender::Simple->default_transport->deliveries;
-#
-# Now you've got an array containing every delivery performed through
-# Email::Sender::Simple, in order.  Because you set the transport via the
-# environment, no other code will be able to force a different transport.
-#
-# When testing code that forks, L<Email::Sender::Transport::SQLite> can be used
-# to allow every child process to deliver to a single, easy to inspect
-# destination database.
-#
-# =head2 Hey, where's my Bcc support?
-#
-# A common question is "Why doesn't Email::Sender::Simple automatically respect
-# my Bcc header?"  This is often combined with, "Here is a patch to 'fix' it."
-# This is not a bug or oversight. Bcc is being ignored intentionally for now
-# because simply adding the Bcc addresses to the message recipients would not
-# produce the usually-desired behavior.
-#
-# For example, here is a set of headers:
-#
-#   From: sender@example.com
-#   To:   to_rcpt@example.com
-#   Cc:   cc_rcpt@example.com
-#   Bcc:  the_boss@example.com
-#
-# In this case, we'd expect the message to be delivered to three people:
-# to_rcpt, cc_rcpt, and the_boss.  This is why it's often suggested that the
-# Bcc header should be a source for envelope recipients.  In fact, though, a
-# message with a Bcc header should probably be delivered I<only> to the Bcc
-# recipients.  The "B" in Bcc means "blind."  The other recipients should not
-# see who has been Bcc'd.  This means you want to send I<two> messages:  one to
-# to_rcpt and cc_rcpt, with no Bcc header present; and another to the_boss
-# only, with the Bcc header.  B<If you just pick up Bcc addresses as
-# recipients, everyone will see who was Bcc'd.>
-#
-# Email::Sender::Simple promises to send messages atomically.  That is:  it
-# won't deliver to only some of the recipients, and not to others.  That means
-# it can't automatically detect the Bcc header and make two deliveries.  There
-# would be a possibility for the second to fail after the first succeeded,
-# which would break the promise of a pure failure or success.
-#
-# The other strategy for dealing with Bcc is to remove the Bcc header from the
-# message and then inject the message with an envelope including the Bcc
-# addresses.  The envelope information will not be visible to the final
-# recipients, so this is safe.  Unfortunately, this requires modifying the
-# message, and Email::Sender::Simple should not be altering the mutable email
-# object passed to it.  There is no C<clone> method on Email::Abstract, so it
-# cannot just build a clone and modify that, either.  When such a method
-# exists, Bcc handling may be possible.
-#
-# =head3 Example Bcc Handling
-#
-# If you want to support the Bcc header now, it is up to you to deal with how
-# you want to munge the mail and inject the (possibly) munged copies into your
-# outbound mailflow.  It is not reasonable to suggest that
-# Email::Sender::Simple do this job.
-#
-# =head4 Example 1: Explicitly set the envelope recipients for Bcc recipients
-#
-# Create the email without a Bcc header, send it to the Bcc users explicitly
-# and then send it to the To/Cc users implicitly.
-#
-#   my $message = create_email_mime_msg;  # <- whatever you do to get the message
-#
-#   $message->delete_header('bcc');       # delete the Bcc header before sending
-#   sendmail($message, { to => $rcpt' }); # send to explicit Bcc address
-#   sendmail($message);                   # and then send as normal
-#
-# =head4 Example 2: Explicitly set the envelope recipients for all recipients
-#
-# You can make a single call to C<sendmail> by pulling all the recipient
-# addresses from the headers yourself and specifying all the envelope
-# recipients once.  Again, delete the Bcc header before the message is sent.
-#
-# =head1 SEE ALSO
-#
-# =head2 This is awesome!  Where can I learn more?
-#
-# Have a look at L<Email::Sender::Manual>, where all the manual's documents are
-# listed.  You can also look at the documentation for L<Email::Sender::Simple>
-# and the various Email::Sender::Transport classes.
-#
-# =cut
+$Email::Sender::Manual::QuickStart::VERSION = '1.300018';
+#pod =head1 QUICK START
+#pod
+#pod =head2 Let's Send Some Mail!
+#pod
+#pod No messing around, let's just send some mail.
+#pod
+#pod   use strict;
+#pod   use Email::Sender::Simple qw(sendmail);
+#pod   use Email::Simple;
+#pod   use Email::Simple::Creator;
+#pod
+#pod   my $email = Email::Simple->create(
+#pod     header => [
+#pod       To      => '"Xavier Q. Ample" <x.ample@example.com>',
+#pod       From    => '"Bob Fishman" <orz@example.mil>',
+#pod       Subject => "don't forget to *enjoy the sauce*",
+#pod     ],
+#pod     body => "This message is short, but at least it's cheap.\n",
+#pod   );
+#pod
+#pod   sendmail($email);
+#pod
+#pod That's it.  Your message goes out into the internet and tries to get delivered
+#pod to C<x.ample@example.com>.
+#pod
+#pod In the example above, C<$email> could be an Email::Simple object, a
+#pod MIME::Entity, a string containing an email message, or one of several other
+#pod types of input.  If C<Email::Abstract> can understand a value, it can be passed
+#pod to Email::Sender::Simple.  Email::Sender::Simple tries to make a good guess
+#pod about how to send the message.  It will usually try to use the F<sendmail>
+#pod program on unix-like systems and to use SMTP on Windows.  You can specify a
+#pod transport, if you need to, but normally that shouldn't be an issue.  (See
+#pod L</Picking a Transport>, though, for more information.)
+#pod
+#pod Also note that we imported and used a C<sendmail> routine in the example above.
+#pod This is exactly the same as saying:
+#pod
+#pod   Email::Sender::Simple->send($email);
+#pod
+#pod ...but it's a lot easier to type.  You can use either one.
+#pod
+#pod =head3 envelope information
+#pod
+#pod We didn't have to tell Email::Sender::Simple where to send the message.  If you
+#pod don't specify recipients, it will use all the email addresses it can find in
+#pod the F<To> and F<Cc> headers by default.  It will use L<Email::Address> to parse
+#pod those fields.  Similarly, if no sender is specified, it will use the first
+#pod address found in the F<From> header.
+#pod
+#pod In most email transmission systems, though, the headers are not by necessity
+#pod tied to the addresses used as the sender and recipients.  For example, your
+#pod message header might say "From: mailing-list@example.com" while your SMTP
+#pod client says "MAIL FROM:E<lt>verp-1234@lists.example.comE<gt>".  This is a
+#pod powerful feature, and is necessary for many email application.  Being able to
+#pod set those distinctly is important, and Email::Sender::Simple lets you do this:
+#pod
+#pod   sendmail($email, { to => [ $to_1, $to_2 ], from => $sender });
+#pod
+#pod =head3 in case of error
+#pod
+#pod When the message is sent successfully (at least on to its next hop),
+#pod C<sendmail> will return a true value -- specifically, an
+#pod L<Email::Sender::Success> object.  This object only rarely has much use.
+#pod What's more useful is what happens if the message can't be sent.
+#pod
+#pod If there is an error sending the message, an exception will be thrown.  It will
+#pod be an object belonging to the class L<Email::Sender::Failure>.  This object
+#pod will have a C<message> attribute describing the nature of the failure.  There
+#pod are several specialized forms of failure, like
+#pod L<Email::Sender::Failure::Multi>, which is thrown when more than one error is
+#pod encountered when trying to send.  You don't need to know about these to use
+#pod Email::Sender::Simple, though.  All you need to know is that C<sendmail>
+#pod returns true on success and dies on failure.
+#pod
+#pod If you'd rather not have to catch exceptions for failure to send mail, you can
+#pod use the C<try_to_send> method, which can be imported as C<try_to_sendmail>.
+#pod This method will return just false on failure to send mail.
+#pod
+#pod For example:
+#pod
+#pod   Email::Sender::Simple->try_to_send($email, { ... });
+#pod
+#pod   use Email::Sender::Simple qw(try_to_sendmail);
+#pod   try_to_sendmail($email, { ... });
+#pod
+#pod Some Email::Sender transports can signal success if some, but not all,
+#pod recipients could be reached.  Email::Sender::Simple does its best to ensure
+#pod that this never happens.  When you are using Email::Sender::Simple, mail should
+#pod either be sent or not.  Partial success should never occur.
+#pod
+#pod =head2 Picking a Transport
+#pod
+#pod =head3 passing in your own transport
+#pod
+#pod If Email::Sender::Simple doesn't pick the transport you want, or if you have
+#pod more specific needs, you can specify a transport in several ways.  The simplest
+#pod is to build a transport object and pass it in.  You can read more about
+#pod transports elsewhere.  For now, we'll just assume that you need to send mail
+#pod via SMTP on an unusual port.  You can send mail like this:
+#pod
+#pod   my $transport = Email::Sender::Transport::SMTP->new({
+#pod     host => 'smtp.example.com',
+#pod     port => 2525,
+#pod   });
+#pod
+#pod   sendmail($email, { transport => $transport });
+#pod
+#pod Now, instead of guessing at what transport to use, Email::Sender::Simple will
+#pod use the one you provided.  This transport will have to be specified for each
+#pod call to C<sendmail>, so you might want to look at other options, which follow.
+#pod
+#pod =head3 specifying transport in the environment
+#pod
+#pod If you have a program that makes several calls to Email::Sender::Simple, and
+#pod you need to run this program using a different mailserver, you can set
+#pod environment variables to change the default.  For example:
+#pod
+#pod   $ export EMAIL_SENDER_TRANSPORT=SMTP
+#pod   $ export EMAIL_SENDER_TRANSPORT_host=smtp.example.com
+#pod   $ export EMAIL_SENDER_TRANSPORT_port=2525
+#pod
+#pod   $ perl your-program
+#pod
+#pod It is important to note that if you have set the default transport by using the
+#pod environment, I<< no subsequent C<transport> args to C<sendmail> will be
+#pod respected >>.  If you set the default transport via the environment, that's it.
+#pod Everything will use that transport.  (Also, note that while we gave the host and
+#pod port arguments above in lower case, the casing of arguments in the environment
+#pod is flattened to support systems where environment variables are of a fixed
+#pod case.  So, C<EMAIL_SENDER_TRANSPORT_PORT> would also work.
+#pod
+#pod This is extremely valuable behavior, as it allows you to audit every message
+#pod that would be sent by a program by running something like this:
+#pod
+#pod   $ export EMAIL_SENDER_TRANSPORT=Maildir
+#pod   $ perl your-program
+#pod
+#pod In that example, any message sent via Email::Sender::Simple would be delivered
+#pod to a maildir in the current directory.
+#pod
+#pod =head3 subclassing to change the default transport
+#pod
+#pod If you want to use a library that will behave like Email::Sender::Simple but
+#pod with a different default transport, you can subclass Email::Sender::Simple and
+#pod replace the C<build_default_transport> method.
+#pod
+#pod =head2 Testing
+#pod
+#pod Email::Sender::Simple makes it very, very easy to test code that sends email.
+#pod The simplest way is to do something like this:
+#pod
+#pod   use Test::More;
+#pod   BEGIN { $ENV{EMAIL_SENDER_TRANSPORT} = 'Test' }
+#pod   use YourCode;
+#pod
+#pod   YourCode->run;
+#pod
+#pod   my @deliveries = Email::Sender::Simple->default_transport->deliveries;
+#pod
+#pod Now you've got an array containing every delivery performed through
+#pod Email::Sender::Simple, in order.  Because you set the transport via the
+#pod environment, no other code will be able to force a different transport.
+#pod
+#pod When testing code that forks, L<Email::Sender::Transport::SQLite> can be used
+#pod to allow every child process to deliver to a single, easy to inspect
+#pod destination database.
+#pod
+#pod =head2 Hey, where's my Bcc support?
+#pod
+#pod A common question is "Why doesn't Email::Sender::Simple automatically respect
+#pod my Bcc header?"  This is often combined with, "Here is a patch to 'fix' it."
+#pod This is not a bug or oversight. Bcc is being ignored intentionally for now
+#pod because simply adding the Bcc addresses to the message recipients would not
+#pod produce the usually-desired behavior.
+#pod
+#pod For example, here is a set of headers:
+#pod
+#pod   From: sender@example.com
+#pod   To:   to_rcpt@example.com
+#pod   Cc:   cc_rcpt@example.com
+#pod   Bcc:  the_boss@example.com
+#pod
+#pod In this case, we'd expect the message to be delivered to three people:
+#pod to_rcpt, cc_rcpt, and the_boss.  This is why it's often suggested that the
+#pod Bcc header should be a source for envelope recipients.  In fact, though, a
+#pod message with a Bcc header should probably be delivered I<only> to the Bcc
+#pod recipients.  The "B" in Bcc means "blind."  The other recipients should not
+#pod see who has been Bcc'd.  This means you want to send I<two> messages:  one to
+#pod to_rcpt and cc_rcpt, with no Bcc header present; and another to the_boss
+#pod only, with the Bcc header.  B<If you just pick up Bcc addresses as
+#pod recipients, everyone will see who was Bcc'd.>
+#pod
+#pod Email::Sender::Simple promises to send messages atomically.  That is:  it
+#pod won't deliver to only some of the recipients, and not to others.  That means
+#pod it can't automatically detect the Bcc header and make two deliveries.  There
+#pod would be a possibility for the second to fail after the first succeeded,
+#pod which would break the promise of a pure failure or success.
+#pod
+#pod The other strategy for dealing with Bcc is to remove the Bcc header from the
+#pod message and then inject the message with an envelope including the Bcc
+#pod addresses.  The envelope information will not be visible to the final
+#pod recipients, so this is safe.  Unfortunately, this requires modifying the
+#pod message, and Email::Sender::Simple should not be altering the mutable email
+#pod object passed to it.  There is no C<clone> method on Email::Abstract, so it
+#pod cannot just build a clone and modify that, either.  When such a method
+#pod exists, Bcc handling may be possible.
+#pod
+#pod =head3 Example Bcc Handling
+#pod
+#pod If you want to support the Bcc header now, it is up to you to deal with how
+#pod you want to munge the mail and inject the (possibly) munged copies into your
+#pod outbound mailflow.  It is not reasonable to suggest that
+#pod Email::Sender::Simple do this job.
+#pod
+#pod =head4 Example 1: Explicitly set the envelope recipients for Bcc recipients
+#pod
+#pod Create the email without a Bcc header, send it to the Bcc users explicitly
+#pod and then send it to the To/Cc users implicitly.
+#pod
+#pod   my $message = create_email_mime_msg;  # <- whatever you do to get the message
+#pod
+#pod   $message->header_set('bcc');          # delete the Bcc header before sending
+#pod   sendmail($message, { to => $rcpt });  # send to explicit Bcc address
+#pod   sendmail($message);                   # and then send as normal
+#pod
+#pod =head4 Example 2: Explicitly set the envelope recipients for all recipients
+#pod
+#pod You can make a single call to C<sendmail> by pulling all the recipient
+#pod addresses from the headers yourself and specifying all the envelope
+#pod recipients once.  Again, delete the Bcc header before the message is sent.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod =head2 This is awesome!  Where can I learn more?
+#pod
+#pod Have a look at L<Email::Sender::Manual>, where all the manual's documents are
+#pod listed.  You can also look at the documentation for L<Email::Sender::Simple>
+#pod and the various Email::Sender::Transport classes.
+#pod
+#pod =cut
 
 1;
 
@@ -258,7 +258,7 @@ Email::Sender::Manual::QuickStart - how to start using Email::Sender right now
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 QUICK START
 
@@ -481,8 +481,8 @@ and then send it to the To/Cc users implicitly.
 
   my $message = create_email_mime_msg;  # <- whatever you do to get the message
 
-  $message->delete_header('bcc');       # delete the Bcc header before sending
-  sendmail($message, { to => $rcpt' }); # send to explicit Bcc address
+  $message->header_set('bcc');          # delete the Bcc header before sending
+  sendmail($message, { to => $rcpt });  # send to explicit Bcc address
   sendmail($message);                   # and then send as normal
 
 =head4 Example 2: Explicitly set the envelope recipients for all recipients
@@ -505,7 +505,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -2,13 +2,13 @@ use strict;
 use warnings;
 package Email::Sender::Manual;
 # ABSTRACT: table of contents for the Email::Sender manual
-$Email::Sender::Manual::VERSION = '1.300011';
-# =head1 THE MANUAL
-#
-# L<Email::Sender::Manual::QuickStart> tells you just what you need to know to
-# start using Email::Sender.
-#
-# =cut
+$Email::Sender::Manual::VERSION = '1.300018';
+#pod =head1 THE MANUAL
+#pod
+#pod L<Email::Sender::Manual::QuickStart> tells you just what you need to know to
+#pod start using Email::Sender.
+#pod
+#pod =cut
 
 1;
 
@@ -24,7 +24,7 @@ Email::Sender::Manual - table of contents for the Email::Sender manual
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 THE MANUAL
 
@@ -37,7 +37,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,6 +1,6 @@
 package Email::Sender::Role::CommonSending;
 # ABSTRACT: the common sending tasks most Email::Sender classes will need
-$Email::Sender::Role::CommonSending::VERSION = '1.300011';
+$Email::Sender::Role::CommonSending::VERSION = '1.300018';
 use Moo::Role;
 
 use Carp ();
@@ -11,26 +11,26 @@ use Email::Sender::Failure::Permanent;
 use Scalar::Util ();
 use Try::Tiny;
 
-# =head1 DESCRIPTION
-#
-# Email::Sender::Role::CommonSending provides a number of features that should
-# ease writing new classes that perform the L<Email::Sender> role.  Instead of
-# writing a C<send> method, implementors will need to write a smaller
-# C<send_email> method, which will be passed an L<Email::Abstract> object and
-# envelope containing C<from> and C<to> entries.  The C<to> entry will be
-# guaranteed to be an array reference.
-#
-# A C<success> method will also be provided as a shortcut for calling:
-#
-#   Email::Sender::Success->new(...);
-#
-# A few other minor details are handled by CommonSending; for more information,
-# consult the source.
-#
-# The methods documented here may be overridden to alter the behavior of the
-# CommonSending role.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod Email::Sender::Role::CommonSending provides a number of features that should
+#pod ease writing new classes that perform the L<Email::Sender> role.  Instead of
+#pod writing a C<send> method, implementors will need to write a smaller
+#pod C<send_email> method, which will be passed an L<Email::Abstract> object and
+#pod envelope containing C<from> and C<to> entries.  The C<to> entry will be
+#pod guaranteed to be an array reference.
+#pod
+#pod A C<success> method will also be provided as a shortcut for calling:
+#pod
+#pod   Email::Sender::Success->new(...);
+#pod
+#pod A few other minor details are handled by CommonSending; for more information,
+#pod consult the source.
+#pod
+#pod The methods documented here may be overridden to alter the behavior of the
+#pod CommonSending role.
+#pod
+#pod =cut
 
 with 'Email::Sender';
 
@@ -57,12 +57,12 @@ sub send {
   }
 }
 
-# =method prepare_email
-#
-# This method is passed a scalar and is expected to return an Email::Abstract
-# object.  You probably shouldn't override it in most cases.
-#
-# =cut
+#pod =method prepare_email
+#pod
+#pod This method is passed a scalar and is expected to return an Email::Abstract
+#pod object.  You probably shouldn't override it in most cases.
+#pod
+#pod =cut
 
 sub prepare_email {
   my ($self, $msg) = @_;
@@ -78,13 +78,13 @@ sub prepare_email {
   return Email::Abstract->new($msg);
 }
 
-# =method prepare_envelope
-#
-# This method is passed a hashref and returns a new hashref that should be used
-# as the envelope passed to the C<send_email> method.  This method is responsible
-# for ensuring that the F<to> entry is an array.
-#
-# =cut
+#pod =method prepare_envelope
+#pod
+#pod This method is passed a hashref and returns a new hashref that should be used
+#pod as the envelope passed to the C<send_email> method.  This method is responsible
+#pod for ensuring that the F<to> entry is an array.
+#pod
+#pod =cut
 
 sub prepare_envelope {
   my ($self, $env) = @_;
@@ -96,16 +96,16 @@ sub prepare_envelope {
   return \%new_env;
 }
 
-# =method success
-#
-#   ...
-#   return $self->success;
-#
-# This method returns a new Email::Sender::Success object.  Arguments passed to
-# this method are passed along to the Success's constructor.  This is provided as
-# a convenience for returning success from subclasses' C<send_email> methods.
-#
-# =cut
+#pod =method success
+#pod
+#pod   ...
+#pod   return $self->success;
+#pod
+#pod This method returns a new Email::Sender::Success object.  Arguments passed to
+#pod this method are passed along to the Success's constructor.  This is provided as
+#pod a convenience for returning success from subclasses' C<send_email> methods.
+#pod
+#pod =cut
 
 sub success {
   my $self = shift;
@@ -127,7 +127,7 @@ Email::Sender::Role::CommonSending - the common sending tasks most Email::Sender
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -176,7 +176,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,13 @@
 package Email::Sender::Role::HasMessage;
 # ABSTRACT: an object that has a message
-$Email::Sender::Role::HasMessage::VERSION = '1.300011';
+$Email::Sender::Role::HasMessage::VERSION = '1.300018';
 use Moo::Role;
 
-# =attr message
-#
-# This attribute is a message associated with the object.
-#
-# =cut
+#pod =attr message
+#pod
+#pod This attribute is a message associated with the object.
+#pod
+#pod =cut
 
 has message => (
   is       => 'ro',
@@ -29,7 +29,7 @@ Email::Sender::Role::HasMessage - an object that has a message
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 ATTRIBUTES
 
@@ -43,7 +43,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,15 @@
 package Email::Sender::Simple;
 # ABSTRACT: the simple interface for sending mail with Sender
-$Email::Sender::Simple::VERSION = '1.300011';
+$Email::Sender::Simple::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Role::CommonSending';
 
-# =head1 SEE INSTEAD
-#
-# For now, the best documentation of this class is in
-# L<Email::Sender::Manual::QuickStart>.
-#
-# =cut
+#pod =head1 SEE INSTEAD
+#pod
+#pod For now, the best documentation of this class is in
+#pod L<Email::Sender::Manual::QuickStart>.
+#pod
+#pod =cut
 
 use Sub::Exporter::Util ();
 use Sub::Exporter -setup => {
@@ -179,7 +179,7 @@ Email::Sender::Simple - the simple interface for sending mail with Sender
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 SEE INSTEAD
 
@@ -192,7 +192,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,18 +1,18 @@
 package Email::Sender::Success::Partial;
 # ABSTRACT: a report of partial success when delivering
-$Email::Sender::Success::Partial::VERSION = '1.300011';
+$Email::Sender::Success::Partial::VERSION = '1.300018';
 use Moo;
 extends 'Email::Sender::Success';
 
 use MooX::Types::MooseLike::Base qw(InstanceOf);
 
-# =head1 DESCRIPTION
-#
-# These objects indicate that some deliver was accepted for some recipients and
-# not others.  The success object's C<failure> attribute will return a
-# L<Email::Sender::Failure::Multi> describing which parts of the delivery failed.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod These objects indicate that some deliver was accepted for some recipients and
+#pod not others.  The success object's C<failure> attribute will return a
+#pod L<Email::Sender::Failure::Multi> describing which parts of the delivery failed.
+#pod
+#pod =cut
 
 use Email::Sender::Failure::Multi;
 
@@ -37,7 +37,7 @@ Email::Sender::Success::Partial - a report of partial success when delivering
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -51,7 +51,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,14 @@
 package Email::Sender::Success;
 # ABSTRACT: the result of successfully sending mail
-$Email::Sender::Success::VERSION = '1.300011';
+$Email::Sender::Success::VERSION = '1.300018';
 use Moo;
 
-# =head1 DESCRIPTION
-#
-# An Email::Sender::Success object is just an indicator that an email message was
-# successfully sent.  Unless extended, it has no properties of its own.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod An Email::Sender::Success object is just an indicator that an email message was
+#pod successfully sent.  Unless extended, it has no properties of its own.
+#pod
+#pod =cut
 
 no Moo;
 1;
@@ -25,7 +25,7 @@ Email::Sender::Success - the result of successfully sending mail
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -38,7 +38,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,15 @@
 package Email::Sender::Transport::DevNull;
 # ABSTRACT: happily throw away your mail
-$Email::Sender::Transport::DevNull::VERSION = '1.300011';
+$Email::Sender::Transport::DevNull::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Transport';
 
-# =head1 DESCRIPTION
-#
-# This class implements L<Email::Sender::Transport>.  Any mail sent through a
-# DevNull transport will be silently discarded.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod This class implements L<Email::Sender::Transport>.  Any mail sent through a
+#pod DevNull transport will be silently discarded.
+#pod
+#pod =cut
 
 sub send_email { return $_[0]->success }
 
@@ -28,7 +28,7 @@ Email::Sender::Transport::DevNull - happily throw away your mail
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -41,7 +41,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,27 +1,27 @@
 package Email::Sender::Transport::Failable;
 # ABSTRACT: a wrapper to makes things fail predictably
-$Email::Sender::Transport::Failable::VERSION = '1.300011';
+$Email::Sender::Transport::Failable::VERSION = '1.300018';
 use Moo;
 extends 'Email::Sender::Transport::Wrapper';
 
 use MooX::Types::MooseLike::Base qw(ArrayRef);
 
-# =head1 DESCRIPTION
-#
-# This transport extends L<Email::Sender::Transport::Wrapper>, meaning that it
-# must be created with a C<transport> attribute of another
-# Email::Sender::Transport.  It will proxy all email sending to that transport,
-# but only after first deciding if it should fail.
-#
-# It does this by calling each coderef in its C<failure_conditions> attribute,
-# which must be an arrayref of code references.  Each coderef will be called and
-# will be passed the Failable transport, the Email::Abstract object, the
-# envelope, and a reference to an array containing the rest of the arguments to
-# C<send>.
-#
-# If any coderef returns a true value, the value will be used to signal failure.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod This transport extends L<Email::Sender::Transport::Wrapper>, meaning that it
+#pod must be created with a C<transport> attribute of another
+#pod Email::Sender::Transport.  It will proxy all email sending to that transport,
+#pod but only after first deciding if it should fail.
+#pod
+#pod It does this by calling each coderef in its C<failure_conditions> attribute,
+#pod which must be an arrayref of code references.  Each coderef will be called and
+#pod will be passed the Failable transport, the Email::Abstract object, the
+#pod envelope, and a reference to an array containing the rest of the arguments to
+#pod C<send>.
+#pod
+#pod If any coderef returns a true value, the value will be used to signal failure.
+#pod
+#pod =cut
 
 has 'failure_conditions' => (
   isa => ArrayRef,
@@ -61,7 +61,7 @@ Email::Sender::Transport::Failable - a wrapper to makes things fail predictably
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -84,7 +84,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,6 +1,6 @@
 package Email::Sender::Transport::Maildir;
 # ABSTRACT: deliver mail to a maildir on disk
-$Email::Sender::Transport::Maildir::VERSION = '1.300011';
+$Email::Sender::Transport::Maildir::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Transport';
 
@@ -13,27 +13,27 @@ use Sys::Hostname;
 
 use MooX::Types::MooseLike::Base qw(Bool);
 
-# =head1 DESCRIPTION
-#
-# This transport delivers into a maildir.  The maildir's location may be given as
-# the F<dir> argument to the constructor, and defaults to F<Maildir> in the
-# current directory (at the time of transport initialization).
-#
-# If the directory does not exist, it will be created.
-#
-# By default, three headers will be added:
-#
-#  * X-Email-Sender-From - the envelope sender
-#  * X-Email-Sender-To   - the envelope recipients (one header per rcpt)
-#  * Lines               - the number of lines in the body
-#
-# These can be controlled with the C<add_lines_header> and
-# C<add_envelope_headers> constructor arguments.
-#
-# The L<Email::Sender::Success> object returned on success has a C<filename>
-# method that returns the filename to which the message was delivered.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod This transport delivers into a maildir.  The maildir's location may be given as
+#pod the F<dir> argument to the constructor, and defaults to F<Maildir> in the
+#pod current directory (at the time of transport initialization).
+#pod
+#pod If the directory does not exist, it will be created.
+#pod
+#pod By default, three headers will be added:
+#pod
+#pod  * X-Email-Sender-From - the envelope sender
+#pod  * X-Email-Sender-To   - the envelope recipients (one header per rcpt)
+#pod  * Lines               - the number of lines in the body
+#pod
+#pod These can be controlled with the C<add_lines_header> and
+#pod C<add_envelope_headers> constructor arguments.
+#pod
+#pod The L<Email::Sender::Success> object returned on success has a C<filename>
+#pod method that returns the filename to which the message was delivered.
+#pod
+#pod =cut
 
 {
   package
@@ -182,7 +182,7 @@ Email::Sender::Transport::Maildir - deliver mail to a maildir on disk
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -210,7 +210,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,25 +1,25 @@
 package Email::Sender::Transport::Mbox;
 # ABSTRACT: deliver mail to an mbox on disk
-$Email::Sender::Transport::Mbox::VERSION = '1.300011';
+$Email::Sender::Transport::Mbox::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Transport';
 
 use Carp;
 use File::Path;
 use File::Basename;
-use IO::File;
+use IO::File 1.11; # binmode
 use Email::Simple 1.998;  # needed for ->header_obj
 use Fcntl ':flock';
 
-# =head1 DESCRIPTION
-#
-# This transport delivers into an mbox.  The mbox file may be given by the 
-# F<filename> argument to the constructor, and defaults to F<mbox>.
-#
-# The transport I<currently> assumes that the mbox is in F<mboxo> format, but
-# this may change or be configurable in the future.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod This transport delivers into an mbox.  The mbox file may be given by the 
+#pod F<filename> argument to the constructor, and defaults to F<mbox>.
+#pod
+#pod The transport I<currently> assumes that the mbox is in F<mboxo> format, but
+#pod this may change or be configurable in the future.
+#pod
+#pod =cut
 
 has 'filename' => (is => 'ro', default => sub { 'mbox' }, required => 1);
 
@@ -126,7 +126,7 @@ Email::Sender::Transport::Mbox - deliver mail to an mbox on disk
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -142,7 +142,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,16 @@
 package Email::Sender::Transport::Print;
 # ABSTRACT: print email to a filehandle (like stdout)
-$Email::Sender::Transport::Print::VERSION = '1.300011';
+$Email::Sender::Transport::Print::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Transport';
 
-# =head1 DESCRIPTION
-#
-# When this transport is handed mail, it prints it to a filehandle.  By default,
-# it will print to STDOUT, but it can be given any L<IO::Handle> object to print
-# to as its C<fh> attribute.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod When this transport is handed mail, it prints it to a filehandle.  By default,
+#pod it will print to STDOUT, but it can be given any L<IO::Handle> object to print
+#pod to as its C<fh> attribute.
+#pod
+#pod =cut
 
 use IO::Handle;
 use MooX::Types::MooseLike::Base qw(InstanceOf);
@@ -53,7 +53,7 @@ Email::Sender::Transport::Print - print email to a filehandle (like stdout)
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -67,7 +67,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,15 @@
 package Email::Sender::Transport::SMTP::Persistent;
 # ABSTRACT: an SMTP client that stays online
-$Email::Sender::Transport::SMTP::Persistent::VERSION = '1.300011';
+$Email::Sender::Transport::SMTP::Persistent::VERSION = '1.300018';
 use Moo;
 extends 'Email::Sender::Transport::SMTP';
 
-# =head1 DESCRIPTION
-#
-# The stock L<Email::Sender::Transport::SMTP> reconnects each time it sends a
-# message.  This transport only reconnects when the existing connection fails.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod The stock L<Email::Sender::Transport::SMTP> reconnects each time it sends a
+#pod message.  This transport only reconnects when the existing connection fails.
+#pod
+#pod =cut
 
 use Net::SMTP;
 
@@ -38,14 +38,14 @@ sub _smtp_client {
 
 sub _message_complete { }
 
-# =method disconnect
-#
-#   $transport->disconnect;
-#
-# This method sends an SMTP QUIT command and destroys the SMTP client, if on
-# exists and is connected.
-#
-# =cut
+#pod =method disconnect
+#pod
+#pod   $transport->disconnect;
+#pod
+#pod This method sends an SMTP QUIT command and destroys the SMTP client, if on
+#pod exists and is connected.
+#pod
+#pod =cut
 
 sub disconnect {
   my ($self) = @_;
@@ -69,7 +69,7 @@ Email::Sender::Transport::SMTP::Persistent - an SMTP client that stays online
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -91,7 +91,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,6 +1,6 @@
 package Email::Sender::Transport::SMTP;
 # ABSTRACT: send email over SMTP
-$Email::Sender::Transport::SMTP::VERSION = '1.300011';
+$Email::Sender::Transport::SMTP::VERSION = '1.300018';
 use Moo;
 
 use Email::Sender::Failure::Multi;
@@ -9,30 +9,38 @@ use Email::Sender::Role::HasMessage ();
 use Email::Sender::Util;
 use MooX::Types::MooseLike::Base qw(Bool Int Str);
 
-# =head1 DESCRIPTION
-#
-# This transport is used to send email over SMTP, either with or without secure
-# sockets (SSL).  It is one of the most complex transports available, capable of
-# partial success.
-#
-# For a potentially more efficient version of this transport, see
-# L<Email::Sender::Transport::SMTP::Persistent>.
-#
-# =head1 ATTRIBUTES
-#
-# The following attributes may be passed to the constructor:
-#
-# =over 4
-#
-# =item C<host>: the name of the host to connect to; defaults to C<localhost>
-#
-# =item C<ssl>: if true, connect via SSL; defaults to false
-#
-# =item C<port>: port to connect to; defaults to 25 for non-SSL, 465 for SSL
-#
-# =item C<timeout>: maximum time in secs to wait for server; default is 120
-#
-# =cut
+use utf8 (); # See below. -- rjbs, 2015-05-14
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This transport is used to send email over SMTP, either with or without secure
+#pod sockets (SSL).  It is one of the most complex transports available, capable of
+#pod partial success.
+#pod
+#pod For a potentially more efficient version of this transport, see
+#pod L<Email::Sender::Transport::SMTP::Persistent>.
+#pod
+#pod =head1 ATTRIBUTES
+#pod
+#pod The following attributes may be passed to the constructor:
+#pod
+#pod =over 4
+#pod
+#pod =item C<host>: the name of the host to connect to; defaults to C<localhost>
+#pod
+#pod =item C<ssl>: if true, connect via SSL; defaults to false
+#pod
+#pod =item C<port>: port to connect to; defaults to 25 for non-SSL, 465 for SSL
+#pod
+#pod =item C<timeout>: maximum time in secs to wait for server; default is 120
+#pod
+#pod =cut
+
+sub BUILD {
+  my ($self) = @_;
+  Carp::croak("do not pass port number to SMTP transport in host, use port parameter")
+    if $self->host =~ /:/;
+}
 
 has host => (is => 'ro', isa => Str,  default => sub { 'localhost' });
 has ssl  => (is => 'ro', isa => Bool, default => sub { 0 });
@@ -45,36 +53,36 @@ has port => (
 
 has timeout => (is => 'ro', isa => Int, default => sub { 120 });
 
-# =item C<sasl_username>: the username to use for auth; optional
-#
-# =item C<sasl_password>: the password to use for auth; required if C<username> is provided
-#
-# =item C<allow_partial_success>: if true, will send data even if some recipients were rejected; defaults to false
-#
-# =cut
+#pod =item C<sasl_username>: the username to use for auth; optional
+#pod
+#pod =item C<sasl_password>: the password to use for auth; required if C<username> is provided
+#pod
+#pod =item C<allow_partial_success>: if true, will send data even if some recipients were rejected; defaults to false
+#pod
+#pod =cut
 
 has sasl_username => (is => 'ro', isa => Str);
 has sasl_password => (is => 'ro', isa => Str);
 
 has allow_partial_success => (is => 'ro', isa => Bool, default => sub { 0 });
 
-# =item C<helo>: what to say when saying HELO; no default
-#
-# =item C<localaddr>: local address from which to connect
-#
-# =item C<localport>: local port from which to connect
-#
-# =cut
+#pod =item C<helo>: what to say when saying HELO; no default
+#pod
+#pod =item C<localaddr>: local address from which to connect
+#pod
+#pod =item C<localport>: local port from which to connect
+#pod
+#pod =cut
 
 has helo      => (is => 'ro', isa => Str);
 has localaddr => (is => 'ro');
 has localport => (is => 'ro', isa => Int);
 
-# =item C<debug>: if true, put the L<Net::SMTP> object in debug mode
-#
-# =back
-#
-# =cut
+#pod =item C<debug>: if true, put the L<Net::SMTP> object in debug mode
+#pod
+#pod =back
+#pod
+#pod =cut
 
 has debug => (is => 'ro', isa => Bool, default => sub { 0 });
 
@@ -203,6 +211,12 @@ sub send_email {
 
   while (length $msg_string) {
     my $next_hunk = substr $msg_string, 0, $hunk_size, '';
+
+    # I would love to remove this when Net::SMTP is unscrewed.
+    # See https://rt.cpan.org/Ticket/Display.html?id=104433
+    # -- rjbs, 2015-05-14
+    utf8::downgrade($next_hunk);
+
     $smtp->datasend($next_hunk) or $FAULT->("error at during DATA");
   }
 
@@ -237,13 +251,13 @@ sub partial_success {
 
 sub _message_complete { $_[1]->quit; }
 
-# =head1 PARTIAL SUCCESS
-#
-# If C<allow_partial_success> was set when creating the transport, the transport
-# may return L<Email::Sender::Success::Partial> objects.  Consult that module's
-# documentation.
-#
-# =cut
+#pod =head1 PARTIAL SUCCESS
+#pod
+#pod If C<allow_partial_success> was set when creating the transport, the transport
+#pod may return L<Email::Sender::Success::Partial> objects.  Consult that module's
+#pod documentation.
+#pod
+#pod =cut
 
 with 'Email::Sender::Transport';
 no Moo;
@@ -261,7 +275,7 @@ Email::Sender::Transport::SMTP - send email over SMTP
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -314,7 +328,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,23 +1,23 @@
 package Email::Sender::Transport::Sendmail;
 # ABSTRACT: send mail via sendmail(1)
-$Email::Sender::Transport::Sendmail::VERSION = '1.300011';
+$Email::Sender::Transport::Sendmail::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Transport';
 
 use MooX::Types::MooseLike::Base qw(Str);
 
-# =head2 DESCRIPTION
-#
-# This transport sends mail by piping it to the F<sendmail> command.  If the
-# location of the F<sendmail> command is not provided in the constructor (see
-# below) then the library will look for an executable file called F<sendmail> in
-# the path.
-#
-# To specify the location of sendmail:
-#
-#   my $sender = Email::Sender::Transport::Sendmail->new({ sendmail => $path });
-#
-# =cut
+#pod =head2 DESCRIPTION
+#pod
+#pod This transport sends mail by piping it to the F<sendmail> command.  If the
+#pod location of the F<sendmail> command is not provided in the constructor (see
+#pod below) then the library will look for an executable file called F<sendmail> in
+#pod the path.
+#pod
+#pod To specify the location of sendmail:
+#pod
+#pod   my $sender = Email::Sender::Transport::Sendmail->new({ sendmail => $path });
+#pod
+#pod =cut
 
 use File::Spec ();
 
@@ -88,7 +88,7 @@ sub send_email {
   my $string = $email->as_string;
   $string =~ s/\x0D\x0A/\x0A/g unless $^O eq 'MSWin32';
 
-  print $pipe $email->as_string
+  print $pipe $string
     or Email::Sender::Failure->throw("couldn't send message to sendmail: $!");
 
   close $pipe
@@ -112,7 +112,7 @@ Email::Sender::Transport::Sendmail - send mail via sendmail(1)
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head2 DESCRIPTION
 
@@ -131,7 +131,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,60 +1,60 @@
 package Email::Sender::Transport::Test;
 # ABSTRACT: deliver mail in memory for testing
-$Email::Sender::Transport::Test::VERSION = '1.300011';
+$Email::Sender::Transport::Test::VERSION = '1.300018';
 use Moo;
 
 use Email::Sender::Failure::Multi;
 use Email::Sender::Success::Partial;
 use MooX::Types::MooseLike::Base qw(ArrayRef Bool);
 
-# =head1 DESCRIPTION
-#
-# This transport is meant for testing email deliveries in memory.  It will store
-# a record of any delivery made so that they can be inspected afterward.
-#
-# =for Pod::Coverage recipient_failure delivery_failure
-#
-# By default, the Test transport will not allow partial success and will always
-# succeed.  It can be made to fail predictably, however, if it is extended and
-# its C<recipient_failure> or C<delivery_failure> methods are overridden.  These
-# methods are called as follows:
-#
-#   $self->delivery_failure($email, $envelope);
-#
-#   $self->recipient_failure($to);
-#
-# If they return true, the sending will fail.  If the transport was created with
-# a true C<allow_partial_success> attribute, recipient failures can cause partial
-# success to be returned.
-#
-# For more flexible failure modes, you can override more aggressively or can use
-# L<Email::Sender::Transport::Failable>.
-#
-# =attr deliveries
-#
-# =for Pod::Coverage clear_deliveries
-#
-# This attribute stores an arrayref of all the deliveries made via the transport.
-#
-# Each delivery is a hashref, in the following format:
-#
-#   {
-#     email     => $email,
-#     envelope  => $envelope,
-#     successes => \@ok_rcpts,
-#     failures  => \@failures,
-#   }
-#
-# Both successful and failed deliveries are stored.
-#
-# A number of methods related to this attribute are provided:
-#
-# =for :list
-# * delivery_count
-# * clear_deliveries
-# * shift_deliveries
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod This transport is meant for testing email deliveries in memory.  It will store
+#pod a record of any delivery made so that they can be inspected afterward.
+#pod
+#pod =for Pod::Coverage recipient_failure delivery_failure
+#pod
+#pod By default, the Test transport will not allow partial success and will always
+#pod succeed.  It can be made to fail predictably, however, if it is extended and
+#pod its C<recipient_failure> or C<delivery_failure> methods are overridden.  These
+#pod methods are called as follows:
+#pod
+#pod   $self->delivery_failure($email, $envelope);
+#pod
+#pod   $self->recipient_failure($to);
+#pod
+#pod If they return true, the sending will fail.  If the transport was created with
+#pod a true C<allow_partial_success> attribute, recipient failures can cause partial
+#pod success to be returned.
+#pod
+#pod For more flexible failure modes, you can override more aggressively or can use
+#pod L<Email::Sender::Transport::Failable>.
+#pod
+#pod =attr deliveries
+#pod
+#pod =for Pod::Coverage clear_deliveries
+#pod
+#pod This attribute stores an arrayref of all the deliveries made via the transport.
+#pod
+#pod Each delivery is a hashref, in the following format:
+#pod
+#pod   {
+#pod     email     => $email,
+#pod     envelope  => $envelope,
+#pod     successes => \@ok_rcpts,
+#pod     failures  => \@failures,
+#pod   }
+#pod
+#pod Both successful and failed deliveries are stored.
+#pod
+#pod A number of methods related to this attribute are provided:
+#pod
+#pod =for :list
+#pod * delivery_count
+#pod * clear_deliveries
+#pod * shift_deliveries
+#pod
+#pod =cut
 
 has allow_partial_success => (is => 'ro', isa => Bool, default => sub { 0 });
 
@@ -141,7 +141,7 @@ Email::Sender::Transport::Test - deliver mail in memory for testing
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -209,7 +209,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,18 +1,18 @@
 package Email::Sender::Transport::Wrapper;
 # ABSTRACT: a mailer to wrap a mailer for mailing mail
-$Email::Sender::Transport::Wrapper::VERSION = '1.300011';
+$Email::Sender::Transport::Wrapper::VERSION = '1.300018';
 use Moo;
 with 'Email::Sender::Transport';
 
 use Email::Sender::Util;
 
-# =head1 DESCRIPTION
-#
-# Email::Sender::Transport::Wrapper wraps a transport, provided as the
-# C<transport> argument to the constructor.  It is provided as a simple way to
-# use method modifiers to create wrapping classes.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod Email::Sender::Transport::Wrapper wraps a transport, provided as the
+#pod C<transport> argument to the constructor.  It is provided as a simple way to
+#pod use method modifiers to create wrapping classes.
+#pod
+#pod =cut
 
 has transport => (
   is   => 'ro',
@@ -68,7 +68,7 @@ Email::Sender::Transport::Wrapper - a mailer to wrap a mailer for mailing mail
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -82,7 +82,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,31 +1,31 @@
 package Email::Sender::Transport;
 # ABSTRACT: a role for email transports
-$Email::Sender::Transport::VERSION = '1.300011';
+$Email::Sender::Transport::VERSION = '1.300018';
 use Moo::Role;
 
-# =head1 DESCRIPTION
-#
-# Email::Sender::Transport is a Moo role to aid in writing classes used to send
-# mail.  For the most part, its behavior comes entirely from the role
-# L<Email::Sender::Role::CommonSending>, which it includes. The important
-# difference is that Transports are often intended to be used by
-# L<Email::Sender::Simple>, and they provide two methods related to that purpose.
-#
-# =for Pod::Coverage is_simple allow_partial_success
-#
-# First, they provide an C<allow_partial_success> method which returns true or
-# false to indicate whether the transport will ever signal partial success.
-#
-# Second, they provide an C<is_simple> method, which returns true if the
-# transport is suitable for use with Email::Sender::Simple.  By default, this
-# method returns the inverse of C<allow_partial_success>.
-#
-# It is B<imperative> that these methods be accurate to prevent
-# Email::Sender::Simple users from sending partially successful transmissions.
-# Partial success is a complex case that almost all users will wish to avoid at
-# all times.
-#
-# =cut
+#pod =head1 DESCRIPTION
+#pod
+#pod Email::Sender::Transport is a Moo role to aid in writing classes used to send
+#pod mail.  For the most part, its behavior comes entirely from the role
+#pod L<Email::Sender::Role::CommonSending>, which it includes. The important
+#pod difference is that Transports are often intended to be used by
+#pod L<Email::Sender::Simple>, and they provide two methods related to that purpose.
+#pod
+#pod =for Pod::Coverage is_simple allow_partial_success
+#pod
+#pod First, they provide an C<allow_partial_success> method which returns true or
+#pod false to indicate whether the transport will ever signal partial success.
+#pod
+#pod Second, they provide an C<is_simple> method, which returns true if the
+#pod transport is suitable for use with Email::Sender::Simple.  By default, this
+#pod method returns the inverse of C<allow_partial_success>.
+#pod
+#pod It is B<imperative> that these methods be accurate to prevent
+#pod Email::Sender::Simple users from sending partially successful transmissions.
+#pod Partial success is a complex case that almost all users will wish to avoid at
+#pod all times.
+#pod
+#pod =cut
 
 with 'Email::Sender::Role::CommonSending';
 
@@ -52,7 +52,7 @@ Email::Sender::Transport - a role for email transports
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 DESCRIPTION
 
@@ -82,7 +82,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -2,7 +2,7 @@ use strict;
 use warnings;
 package Email::Sender::Util;
 # ABSTRACT: random stuff that makes Email::Sender go
-$Email::Sender::Util::VERSION = '1.300011';
+$Email::Sender::Util::VERSION = '1.300018';
 use Email::Address;
 use Email::Sender::Failure;
 use Email::Sender::Failure::Permanent;
@@ -37,7 +37,23 @@ sub _sender_from_email {
 # now I don't want to deal with making a sane set of args. -- rjbs, 2008-12-09
 sub _failure {
   my ($self, $error, $smtp, @rest) = @_;
-  my $code = $smtp ? $smtp->code : undef;
+
+  my ($code, $message);
+  if ($smtp) {
+    $code = $smtp->code;
+    $message = $smtp->message;
+    $message = ! defined $message ? "(no SMTP error message)"
+             : ! length  $message ? "(empty SMTP error message)"
+             :                       $message;
+
+    $message = defined $error && length $error
+             ? "$error: $message"
+             : $message;
+  } else {
+    $message = $error;
+    $message = "(no error given)" unless defined $message;
+    $message = "(empty error string)" unless length $message;
+  }
 
   my $error_class = ! $code       ? 'Email::Sender::Failure'
                   : $code =~ /^4/ ? 'Email::Sender::Failure::Temporary'
@@ -45,9 +61,7 @@ sub _failure {
                   :                 'Email::Sender::Failure';
 
   $error_class->new({
-    message => $smtp
-               ? ($error ? ("$error: " . $smtp->message) : $smtp->message)
-               : $error,
+    message => $message,
     code    => $code,
     @rest,
   });
@@ -78,7 +92,7 @@ Email::Sender::Util - random stuff that makes Email::Sender go
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 AUTHOR
 
@@ -86,7 +100,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -1,57 +1,57 @@
 package Email::Sender;
 # ABSTRACT: a library for sending email
-$Email::Sender::VERSION = '1.300011';
+$Email::Sender::VERSION = '1.300018';
 use Moo::Role;
 requires 'send';
 
-# =head1 SYNOPSIS
-#
-#   my $message = Email::MIME->create( ... );
-#   # produce an Email::Abstract compatible message object,
-#   # e.g. produced by Email::Simple, Email::MIME, Email::Stuff
-#
-#   use Email::Sender::Simple qw(sendmail);
-#   use Email::Sender::Transport::SMTP qw();
-#   use Try::Tiny;
-#
-#   try {
-#     sendmail(
-#       $message,
-#       {
-#         from => $SMTP_ENVELOPE_FROM_ADDRESS,
-#         transport => Email::Sender::Transport::SMTP->new({
-#             host => $SMTP_HOSTNAME,
-#             port => $SMTP_PORT,
-#         })
-#       }
-#     );
-#   } catch {
-#       warn "sending failed: $_";
-#   };
-#
-# =head1 OVERVIEW
-#
-# Email::Sender replaces the old and sometimes problematic Email::Send library,
-# which did a decent job at handling very simple email sending tasks, but was not
-# suitable for serious use, for a variety of reasons.
-#
-# Most users will be able to use L<Email::Sender::Simple> to send mail.  Users
-# with more specific needs should look at the available Email::Sender::Transport
-# classes.
-#
-# Documentation may be found in L<Email::Sender::Manual>, and new users should
-# start with L<Email::Sender::Manual::QuickStart>.
-#
-# =head1 IMPLEMENTING
-#
-# Email::Sender itself is a Moo role.  Any class that implements Email::Sender
-# is required to provide a method called C<send>.  This method should accept any
-# input that can be understood by L<Email::Abstract>, followed by a hashref
-# containing C<to> and C<from> arguments to be used as the envelope.  The method
-# should return an L<Email::Sender::Success> object on success or throw an
-# L<Email::Sender::Failure> on failure.
-#
-# =cut
+#pod =head1 SYNOPSIS
+#pod
+#pod   my $message = Email::MIME->create( ... );
+#pod   # produce an Email::Abstract compatible message object,
+#pod   # e.g. produced by Email::Simple, Email::MIME, Email::Stuff
+#pod
+#pod   use Email::Sender::Simple qw(sendmail);
+#pod   use Email::Sender::Transport::SMTP qw();
+#pod   use Try::Tiny;
+#pod
+#pod   try {
+#pod     sendmail(
+#pod       $message,
+#pod       {
+#pod         from => $SMTP_ENVELOPE_FROM_ADDRESS,
+#pod         transport => Email::Sender::Transport::SMTP->new({
+#pod             host => $SMTP_HOSTNAME,
+#pod             port => $SMTP_PORT,
+#pod         })
+#pod       }
+#pod     );
+#pod   } catch {
+#pod       warn "sending failed: $_";
+#pod   };
+#pod
+#pod =head1 OVERVIEW
+#pod
+#pod Email::Sender replaces the old and sometimes problematic Email::Send library,
+#pod which did a decent job at handling very simple email sending tasks, but was not
+#pod suitable for serious use, for a variety of reasons.
+#pod
+#pod Most users will be able to use L<Email::Sender::Simple> to send mail.  Users
+#pod with more specific needs should look at the available Email::Sender::Transport
+#pod classes.
+#pod
+#pod Documentation may be found in L<Email::Sender::Manual>, and new users should
+#pod start with L<Email::Sender::Manual::QuickStart>.
+#pod
+#pod =head1 IMPLEMENTING
+#pod
+#pod Email::Sender itself is a Moo role.  Any class that implements Email::Sender
+#pod is required to provide a method called C<send>.  This method should accept any
+#pod input that can be understood by L<Email::Abstract>, followed by a hashref
+#pod containing C<to> and C<from> arguments to be used as the envelope.  The method
+#pod should return an L<Email::Sender::Success> object on success or throw an
+#pod L<Email::Sender::Failure> on failure.
+#pod
+#pod =cut
 
 no Moo::Role;
 1;
@@ -68,7 +68,7 @@ Email::Sender - a library for sending email
 
 =head1 VERSION
 
-version 1.300011
+version 1.300018
 
 =head1 SYNOPSIS
 
@@ -121,9 +121,65 @@ L<Email::Sender::Failure> on failure.
 
 Ricardo Signes <rjbs@cpan.org>
 
+=head1 CONTRIBUTORS
+
+=for stopwords Alex Efros Aristotle Pagaltzis Christian Walde David Golden Steinbrunner Hans Dieter Pearcey HIROSE Masaaki Justin Hunter Kenichi Ishigaki kga Kris Matthews William Blunn
+
+=over 4
+
+=item *
+
+Alex Efros <powerman@powerman.name>
+
+=item *
+
+Aristotle Pagaltzis <pagaltzis@gmx.de>
+
+=item *
+
+Christian Walde <walde.christian@googlemail.com>
+
+=item *
+
+David Golden <dagolden@cpan.org>
+
+=item *
+
+David Steinbrunner <dsteinbrunner@pobox.com>
+
+=item *
+
+Hans Dieter Pearcey <hdp@cpan.org>
+
+=item *
+
+HIROSE Masaaki <hirose31@gmail.com>
+
+=item *
+
+Justin Hunter <justin.d.hunter@gmail.com>
+
+=item *
+
+Kenichi Ishigaki <ishigaki@cpan.org>
+
+=item *
+
+kga <watrty@gmail.com>
+
+=item *
+
+Kris Matthews <kris@tigerlms.com>
+
+=item *
+
+William Blunn <zgpmax@cpan.org>
+
+=back
+
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2014 by Ricardo Signes.
+This software is copyright (c) 2015 by Ricardo Signes.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,59 @@
+do { my $x = {
+       'configure' => {
+                        'requires' => {
+                                        'ExtUtils::MakeMaker' => '0'
+                                      }
+                      },
+       'develop' => {
+                      'requires' => {
+                                      'Test::Pod' => '1.41'
+                                    }
+                    },
+       'runtime' => {
+                      'requires' => {
+                                      'Carp' => '0',
+                                      'Email::Abstract' => '3.006',
+                                      'Email::Address' => '0',
+                                      'Email::Simple' => '1.998',
+                                      'Fcntl' => '0',
+                                      'File::Basename' => '0',
+                                      'File::Path' => '2.06',
+                                      'File::Spec' => '0',
+                                      'IO::File' => '1.11',
+                                      'IO::Handle' => '0',
+                                      'List::MoreUtils' => '0',
+                                      'Module::Runtime' => '0',
+                                      'Moo' => '1.000008',
+                                      'Moo::Role' => '0',
+                                      'MooX::Types::MooseLike' => '0.15',
+                                      'MooX::Types::MooseLike::Base' => '0',
+                                      'Net::SMTP' => '0',
+                                      'Scalar::Util' => '0',
+                                      'Sub::Exporter' => '0',
+                                      'Sub::Exporter::Util' => '0',
+                                      'Sys::Hostname' => '0',
+                                      'Throwable::Error' => '0.200003',
+                                      'Try::Tiny' => '0',
+                                      'strict' => '0',
+                                      'utf8' => '0',
+                                      'warnings' => '0'
+                                    }
+                    },
+       'test' => {
+                   'recommends' => {
+                                     'CPAN::Meta' => '2.120900'
+                                   },
+                   'requires' => {
+                                   'Capture::Tiny' => '0.08',
+                                   'Cwd' => '0',
+                                   'Exporter' => '0',
+                                   'ExtUtils::MakeMaker' => '0',
+                                   'File::Spec' => '0',
+                                   'File::Temp' => '0',
+                                   'Test::More' => '0.96',
+                                   'lib' => '0'
+                                 }
+                 }
+     };
+  $x;
+ }
\ No newline at end of file
@@ -0,0 +1,183 @@
+#!perl
+
+use strict;
+use warnings;
+
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.021
+
+use Test::More tests => 1;
+
+use ExtUtils::MakeMaker;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+    qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+            |
+            (?:\.[0-9]+) (?:_[0-9]+)?
+        ) | (?:
+            v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+            |
+            (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+        )
+    )/x;
+
+# hide optional CPAN::Meta modules from prereq scanner
+# and check if they are available
+my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
+
+# Verify requirements?
+my $DO_VERIFY_PREREQS = 1;
+
+sub _max {
+    my $max = shift;
+    $max = ( $_ > $max ) ? $_ : $max for @_;
+    return $max;
+}
+
+sub _merge_prereqs {
+    my ($collector, $prereqs) = @_;
+
+    # CPAN::Meta::Prereqs object
+    if (ref $collector eq $cpan_meta_pre) {
+        return $collector->with_merged_prereqs(
+            CPAN::Meta::Prereqs->new( $prereqs )
+        );
+    }
+
+    # Raw hashrefs
+    for my $phase ( keys %$prereqs ) {
+        for my $type ( keys %{ $prereqs->{$phase} } ) {
+            for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+                $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module};
+            }
+        }
+    }
+
+    return $collector;
+}
+
+my @include = qw(
+
+);
+
+my @exclude = qw(
+
+);
+
+# Add static prereqs to the included modules list
+my $static_prereqs = do 't/00-report-prereqs.dd';
+
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+    ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+    $static_prereqs
+);
+
+# Add dynamic prereqs to the included modules list (if we can)
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+if ( $source && $HAS_CPAN_META ) {
+    if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
+        $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
+    }
+}
+else {
+    $source = 'static metadata';
+}
+
+my @full_reports;
+my @dep_errors;
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
+
+# Add static includes into a fake section
+for my $mod (@include) {
+    $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
+    next unless $req_hash->{$phase};
+    next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+    for my $type ( qw(requires recommends suggests conflicts modules) ) {
+        next unless $req_hash->{$phase}{$type};
+
+        my $title = ucfirst($phase).' '.ucfirst($type);
+        my @reports = [qw/Module Want Have/];
+
+        for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+            next if $mod eq 'perl';
+            next if grep { $_ eq $mod } @exclude;
+
+            my $file = $mod;
+            $file =~ s{::}{/}g;
+            $file .= ".pm";
+            my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
+
+            my $want = $req_hash->{$phase}{$type}{$mod};
+            $want = "undef" unless defined $want;
+            $want = "any" if !$want && $want == 0;
+
+            my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
+
+            if ($prefix) {
+                my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
+                $have = "undef" unless defined $have;
+                push @reports, [$mod, $want, $have];
+
+                if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
+                    if ( $have !~ /\A$lax_version_re\z/ ) {
+                        push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
+                    }
+                    elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
+                        push @dep_errors, "$mod version '$have' is not in required range '$want'";
+                    }
+                }
+            }
+            else {
+                push @reports, [$mod, $want, "missing"];
+
+                if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+                    push @dep_errors, "$mod is not installed ($req_string)";
+                }
+            }
+        }
+
+        if ( @reports ) {
+            push @full_reports, "=== $title ===\n\n";
+
+            my $ml = _max( map { length $_->[0] } @reports );
+            my $wl = _max( map { length $_->[1] } @reports );
+            my $hl = _max( map { length $_->[2] } @reports );
+
+            if ($type eq 'modules') {
+                splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl];
+                push @full_reports, map { sprintf("    %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports;
+            }
+            else {
+                splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+                push @full_reports, map { sprintf("    %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+            }
+
+            push @full_reports, "\n";
+        }
+    }
+}
+
+if ( @full_reports ) {
+    diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports;
+}
+
+if ( @dep_errors ) {
+    diag join("\n",
+        "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n",
+        "The following REQUIRED prerequisites were not satisfied:\n",
+        @dep_errors,
+        "\n"
+    );
+}
+
+pass;
+
+# vim: ts=4 sts=4 sw=4 et:
@@ -1,101 +0,0 @@
-use strict;
-use warnings;
-use Test::More 0.88;
-# This is a relatively nice way to avoid Test::NoWarnings breaking our
-# expectations by adding extra tests, without using no_plan.  It also helps
-# avoid any other test module that feels introducing random tests, or even
-# test plans, is a nice idea.
-our $success = 0;
-END { $success && done_testing; }
-
-# List our own version used to generate this
-my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.10\n";
-
-eval {                     # no excuses!
-    # report our Perl details
-    my $want = "any version";
-    $v .= "perl: $] (wanted $want) on $^O from $^X\n\n";
-};
-defined($@) and diag("$@");
-
-# Now, our module version dependencies:
-sub pmver {
-    my ($module, $wanted) = @_;
-    $wanted = " (want $wanted)";
-    my $pmver;
-    eval "require $module;";
-    if ($@) {
-        if ($@ =~ m/Can't locate .* in \@INC/) {
-            $pmver = 'module not found.';
-        } else {
-            diag("${module}: $@");
-            $pmver = 'died during require.';
-        }
-    } else {
-        my $version;
-        eval { $version = $module->VERSION; };
-        if ($@) {
-            diag("${module}: $@");
-            $pmver = 'died during VERSION check.';
-        } elsif (defined $version) {
-            $pmver = "$version";
-        } else {
-            $pmver = '<undef>';
-        }
-    }
-
-    # So, we should be good, right?
-    return sprintf('%-45s => %-10s%-15s%s', $module, $pmver, $wanted, "\n");
-}
-
-eval { $v .= pmver('Capture::Tiny','0.08') };
-eval { $v .= pmver('Carp','any version') };
-eval { $v .= pmver('Cwd','any version') };
-eval { $v .= pmver('Email::Abstract','3.006') };
-eval { $v .= pmver('Email::Address','any version') };
-eval { $v .= pmver('Email::Simple','1.998') };
-eval { $v .= pmver('Exporter','any version') };
-eval { $v .= pmver('ExtUtils::MakeMaker','6.30') };
-eval { $v .= pmver('Fcntl','any version') };
-eval { $v .= pmver('File::Basename','any version') };
-eval { $v .= pmver('File::Path','2.06') };
-eval { $v .= pmver('File::Spec','any version') };
-eval { $v .= pmver('File::Temp','any version') };
-eval { $v .= pmver('IO::File','any version') };
-eval { $v .= pmver('IO::Handle','any version') };
-eval { $v .= pmver('List::MoreUtils','any version') };
-eval { $v .= pmver('Module::Runtime','any version') };
-eval { $v .= pmver('Moo','1.000008') };
-eval { $v .= pmver('Moo::Role','any version') };
-eval { $v .= pmver('MooX::Types::MooseLike','0.15') };
-eval { $v .= pmver('MooX::Types::MooseLike::Base','any version') };
-eval { $v .= pmver('Net::SMTP','any version') };
-eval { $v .= pmver('Scalar::Util','any version') };
-eval { $v .= pmver('Sub::Exporter','any version') };
-eval { $v .= pmver('Sub::Exporter::Util','any version') };
-eval { $v .= pmver('Sys::Hostname','any version') };
-eval { $v .= pmver('Test::More','0.96') };
-eval { $v .= pmver('Throwable::Error','0.200003') };
-eval { $v .= pmver('Try::Tiny','any version') };
-eval { $v .= pmver('lib','any version') };
-eval { $v .= pmver('strict','any version') };
-eval { $v .= pmver('warnings','any version') };
-
-
-# All done.
-$v .= <<'EOT';
-
-Thanks for using my code.  I hope it works for you.
-If not, please try and include this output in the bug report.
-That will help me reproduce the issue and solve your problem.
-
-EOT
-
-diag($v);
-ok(1, "we really didn't test anything, just reporting data");
-$success = 1;
-
-# Work around another nasty module on CPAN. :/
-no warnings 'once';
-$Template::Test::NO_FLUSH = 1;
-exit 0;
@@ -4,7 +4,7 @@ use Test::More tests => 2;
 
 note 'Checking Changes';
 my $changes_file = 'Changes';
-my $newver = '1.300011';
+my $newver = '1.300018';
 my $trial_token = '-TRIAL';
 
 SKIP: {