The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 028
LICENSE 44
MANIFEST 11
META.json 89255
META.yml 106235
Makefile.PL 2359
README 24
dist.ini 3411
lib/Email/Sender/Failure/Multi.pm 725
lib/Email/Sender/Failure/Permanent.pm 66
lib/Email/Sender/Failure/Temporary.pm 66
lib/Email/Sender/Failure.pm 849
lib/Email/Sender/Manual/QuickStart.pm 6245
lib/Email/Sender/Manual.pm 611
lib/Email/Sender/Role/CommonSending.pm 750
lib/Email/Sender/Role/HasMessage.pm 611
lib/Email/Sender/Simple.pm 612
lib/Email/Sender/Success/Partial.pm 614
lib/Email/Sender/Success.pm 612
lib/Email/Sender/Transport/DevNull.pm 612
lib/Email/Sender/Transport/Failable.pm 724
lib/Email/Sender/Transport/Maildir.pm 932
lib/Email/Sender/Transport/Mbox.pm 615
lib/Email/Sender/Transport/Print.pm 613
lib/Email/Sender/Transport/SMTP/Persistent.pm 620
lib/Email/Sender/Transport/SMTP.pm 976
lib/Email/Sender/Transport/Sendmail.pm 925
lib/Email/Sender/Transport/Test.pm 755
lib/Email/Sender/Transport/Wrapper.pm 613
lib/Email/Sender/Transport.pm 629
lib/Email/Sender/Util.pm 65
lib/Email/Sender.pm 855
t/00-compile.t 740
t/000-report-versions-tiny.t 811
t/lib/Test/Email/Sender/Util.pm 01
t/print.t 20
xt/release/changes_has_content.t 11
xt/release/pod-syntax.t 32
38 files changed (This is a version diff) 5081427
@@ -1,5 +1,33 @@
 Revision history for Email-Sender
 
+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
+          directory already exists
+
+1.300010  2014-01-11 14:15:13-05:00 America/New_York
+        - the SMTP transport now has a "debug" option
+
+1.300009  2013-09-01 12:03:06 America/New_York
+          see also 1.300008!
+
+          switch to automatic determination of prereqs to improve accuracy
+
+1.300008  2013-09-01 09:39:13 America/New_York
+          [THIS MIGHT BREAK YOUR CODE]
+          at long last, Sendmail and Maildir transports replaces CRLF with CR
+          before piping
+
+          [BUG FIXES]
+          fixes a bug where recipients beginning with a - would not work with
+          the Sendmail transport [rt.perl.org #66246]
+
+          require Email-Abstract 3.006, to get Email-Simple 1.998, to get
+          Email::Simple->new(\$str), resolving [rt.perl.org #85926]
+
+1.300007  2013-03-19 14:58:27 America/New_York
+          when sending over SMTP, send DATA in hunks of 1 mebibyte or smaller
+
 1.300006  2013-03-17 17:23:21 America/New_York
           re-fix the problem with attribute accessors and role methods
           clashing, previously fixed in 0.102360
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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) 2013 by Ricardo Signes.
+This software is Copyright (c) 2014 by Ricardo Signes.
 
 This is free software, licensed under:
 
@@ -22,7 +22,7 @@ This is free software, licensed under:
                      Version 1, February 1989
 
  Copyright (C) 1989 Free Software Foundation, Inc.
- 51 Franklin St, Suite 500, Boston, MA  02110-1335  USA
+ 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
@@ -272,7 +272,7 @@ That's all there is to it!
 
 --- The Artistic License 1.0 ---
 
-This software is Copyright (c) 2013 by Ricardo Signes.
+This software is Copyright (c) 2014 by Ricardo Signes.
 
 This is free software, licensed under:
 
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.014.
 Changes
 LICENSE
 MANIFEST
@@ -31,7 +32,6 @@ lib/Email/Sender/Transport/Test.pm
 lib/Email/Sender/Transport/Wrapper.pm
 lib/Email/Sender/Util.pm
 misc/smtp.t
-t/00-compile.t
 t/00-load.t
 t/000-report-versions-tiny.t
 t/devnull.t
@@ -4,7 +4,7 @@
       "Ricardo Signes <rjbs@cpan.org>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 4.300030, CPAN::Meta::Converter version 2.120921",
+   "generated_by" : "Dist::Zilla version 5.014, CPAN::Meta::Converter version 2.133380",
    "license" : [
       "perl_5"
    ],
@@ -21,179 +21,217 @@
       },
       "develop" : {
          "requires" : {
-            "Sub::Override" : "0",
             "Test::Pod" : "1.41",
             "version" : "0.9901"
          }
       },
       "runtime" : {
          "requires" : {
-            "Capture::Tiny" : "0.08",
             "Carp" : "0",
-            "Cwd" : "0",
-            "Email::Abstract" : "3",
+            "Email::Abstract" : "3.006",
             "Email::Address" : "0",
             "Email::Simple" : "1.998",
             "Fcntl" : "0",
             "File::Basename" : "0",
-            "File::Find" : "0",
-            "File::Path" : "0",
+            "File::Path" : "2.06",
             "File::Spec" : "0",
-            "File::Temp" : "0",
-            "FindBin" : "0",
+            "IO::File" : "0",
+            "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"
+            "Try::Tiny" : "0",
+            "strict" : "0",
+            "warnings" : "0"
          }
       },
       "test" : {
          "requires" : {
-            "Test::More" : "0.96"
+            "Capture::Tiny" : "0.08",
+            "Cwd" : "0",
+            "Exporter" : "0",
+            "File::Temp" : "0",
+            "Test::More" : "0.96",
+            "lib" : "0"
          }
       }
    },
    "release_status" : "stable",
    "resources" : {
-      "homepage" : "https://github.com/rjbs/email-sender",
+      "bugtracker" : {
+         "web" : "https://github.com/rjbs/Email-Sender/issues"
+      },
+      "homepage" : "https://github.com/rjbs/Email-Sender",
       "repository" : {
          "type" : "git",
-         "url" : "https://github.com/rjbs/email-sender.git",
-         "web" : "https://github.com/rjbs/email-sender"
+         "url" : "https://github.com/rjbs/Email-Sender.git",
+         "web" : "https://github.com/rjbs/Email-Sender"
       }
    },
-   "version" : "1.300006",
+   "version" : "1.300011",
    "x_Dist_Zilla" : {
       "perl" : {
-         "version" : "5.017009"
+         "version" : "5.019009"
       },
       "plugins" : [
          {
             "class" : "Dist::Zilla::Plugin::Git::GatherDir",
-            "name" : "@Filter/Git::GatherDir",
-            "version" : "2.009"
+            "name" : "@RJBS/Git::GatherDir",
+            "version" : "2.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
-            "name" : "@Filter/CheckPrereqsIndexed",
-            "version" : "0.008"
+            "name" : "@RJBS/CheckPrereqsIndexed",
+            "version" : "0.010"
          },
          {
             "class" : "Dist::Zilla::Plugin::CheckExtraTests",
-            "name" : "@Filter/CheckExtraTests",
-            "version" : "0.011"
+            "name" : "@RJBS/CheckExtraTests",
+            "version" : "0.018"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PromptIfStale",
+            "config" : {
+               "Dist::Zilla::Plugin::PromptIfStale" : {
+                  "check_all_plugins" : 0,
+                  "check_all_prereqs" : 0,
+                  "modules" : [
+                     "Dist::Zilla::PluginBundle::RJBS"
+                  ],
+                  "phase" : "build",
+                  "skip" : []
+               }
+            },
+            "name" : "@RJBS/RJBS-Outdated",
+            "version" : "0.020"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::PromptIfStale",
+            "config" : {
+               "Dist::Zilla::Plugin::PromptIfStale" : {
+                  "check_all_plugins" : "1",
+                  "check_all_prereqs" : 0,
+                  "modules" : [],
+                  "phase" : "release",
+                  "skip" : []
+               }
+            },
+            "name" : "@RJBS/CPAN-Outdated",
+            "version" : "0.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::PruneCruft",
-            "name" : "@Filter/@Filter/PruneCruft",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/PruneCruft",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::ManifestSkip",
-            "name" : "@Filter/@Filter/ManifestSkip",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/ManifestSkip",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaYAML",
-            "name" : "@Filter/@Filter/MetaYAML",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/MetaYAML",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::License",
-            "name" : "@Filter/@Filter/License",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/License",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::Readme",
-            "name" : "@Filter/@Filter/Readme",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/Readme",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::ExecDir",
-            "name" : "@Filter/@Filter/ExecDir",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/ExecDir",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::ShareDir",
-            "name" : "@Filter/@Filter/ShareDir",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/ShareDir",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::MakeMaker",
-            "name" : "@Filter/@Filter/MakeMaker",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/MakeMaker",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::Manifest",
-            "name" : "@Filter/@Filter/Manifest",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/Manifest",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::TestRelease",
-            "name" : "@Filter/@Filter/TestRelease",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/TestRelease",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::ConfirmRelease",
-            "name" : "@Filter/@Filter/ConfirmRelease",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/ConfirmRelease",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::UploadToCPAN",
-            "name" : "@Filter/@Filter/UploadToCPAN",
-            "version" : "4.300030"
+            "name" : "@RJBS/@Filter/UploadToCPAN",
+            "version" : "5.014"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::AutoPrereqs",
+            "name" : "@RJBS/AutoPrereqs",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::NextVersion",
-            "name" : "@Filter/Git::NextVersion",
-            "version" : "2.009"
+            "name" : "@RJBS/Git::NextVersion",
+            "version" : "2.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::PkgVersion",
-            "name" : "@Filter/PkgVersion",
-            "version" : "4.300030"
+            "name" : "@RJBS/PkgVersion",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaConfig",
-            "name" : "@Filter/MetaConfig",
-            "version" : "4.300030"
+            "name" : "@RJBS/MetaConfig",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::MetaJSON",
-            "name" : "@Filter/MetaJSON",
-            "version" : "4.300030"
+            "name" : "@RJBS/MetaJSON",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::NextRelease",
-            "name" : "@Filter/NextRelease",
-            "version" : "4.300030"
+            "name" : "@RJBS/NextRelease",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
-            "name" : "@Filter/Test::ChangesHasContent",
+            "name" : "@RJBS/Test::ChangesHasContent",
             "version" : "0.006"
          },
          {
             "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
-            "name" : "@Filter/PodSyntaxTests",
-            "version" : "4.300030"
-         },
-         {
-            "class" : "Dist::Zilla::Plugin::Test::Compile",
-            "name" : "@Filter/Test::Compile",
-            "version" : "2.001"
+            "name" : "@RJBS/PodSyntaxTests",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::ReportVersions::Tiny",
-            "name" : "@Filter/ReportVersions::Tiny",
-            "version" : "1.08"
+            "name" : "@RJBS/ReportVersions::Tiny",
+            "version" : "1.10"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -203,38 +241,141 @@
                   "type" : "requires"
                }
             },
-            "name" : "@Filter/TestMoreWithSubtests",
-            "version" : "4.300030"
+            "name" : "@RJBS/TestMoreWithSubtests",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::PodWeaver",
-            "name" : "@Filter/PodWeaver",
-            "version" : "3.101641"
+            "config" : {
+               "Dist::Zilla::Plugin::PodWeaver" : {
+                  "config_plugins" : [
+                     "@RJBS"
+                  ],
+                  "finder" : [
+                     ":InstallModules",
+                     ":ExecFiles"
+                  ],
+                  "plugins" : [
+                     {
+                        "class" : "Pod::Weaver::Plugin::EnsurePod5",
+                        "name" : "@CorePrep/EnsurePod5",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Plugin::H1Nester",
+                        "name" : "@CorePrep/H1Nester",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Plugin::SingleEncoding",
+                        "name" : "@RJBS/SingleEncoding",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Name",
+                        "name" : "@RJBS/Name",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Version",
+                        "name" : "@RJBS/Version",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Region",
+                        "name" : "@RJBS/Prelude",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Synopsis",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Description",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Overview",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Generic",
+                        "name" : "@RJBS/Stability",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Collect",
+                        "name" : "Attributes",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Collect",
+                        "name" : "Methods",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Collect",
+                        "name" : "Functions",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Leftovers",
+                        "name" : "@RJBS/Leftovers",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Region",
+                        "name" : "@RJBS/postlude",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Authors",
+                        "name" : "@RJBS/Authors",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Section::Legal",
+                        "name" : "@RJBS/Legal",
+                        "version" : "4.006"
+                     },
+                     {
+                        "class" : "Pod::Weaver::Plugin::Transformer",
+                        "name" : "@RJBS/List",
+                        "version" : "4.006"
+                     }
+                  ]
+               }
+            },
+            "name" : "@RJBS/PodWeaver",
+            "version" : "4.005"
          },
          {
             "class" : "Dist::Zilla::Plugin::GithubMeta",
-            "name" : "@Filter/GithubMeta",
-            "version" : "0.28"
+            "name" : "@RJBS/GithubMeta",
+            "version" : "0.42"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Check",
-            "name" : "@Filter/@Git/Check",
-            "version" : "2.009"
+            "name" : "@RJBS/@Git/Check",
+            "version" : "2.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Commit",
-            "name" : "@Filter/@Git/Commit",
-            "version" : "2.009"
+            "name" : "@RJBS/@Git/Commit",
+            "version" : "2.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Tag",
-            "name" : "@Filter/@Git/Tag",
-            "version" : "2.009"
+            "name" : "@RJBS/@Git/Tag",
+            "version" : "2.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::Git::Push",
-            "name" : "@Filter/@Git/Push",
-            "version" : "2.009"
+            "name" : "@RJBS/@Git/Push",
+            "version" : "2.020"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -245,7 +386,7 @@
                }
             },
             "name" : "Prereqs",
-            "version" : "4.300030"
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::Prereqs",
@@ -256,37 +397,62 @@
                }
             },
             "name" : "DevelopRequires",
-            "version" : "4.300030"
+            "version" : "5.014"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::RemovePrereqs",
+            "config" : {
+               "Dist::Zilla::Plugin::RemovePrereqs" : {
+                  "modules_to_remove" : [
+                     "JSON",
+                     "Test::MockObject",
+                     "Net::SMTP::SSL",
+                     "Sub::Override"
+                  ]
+               }
+            },
+            "name" : "RemovePrereqs",
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":InstallModules",
-            "version" : "4.300030"
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":IncModules",
-            "version" : "4.300030"
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":TestFiles",
-            "version" : "4.300030"
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ExecFiles",
-            "version" : "4.300030"
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":ShareFiles",
-            "version" : "4.300030"
+            "version" : "5.014"
          },
          {
             "class" : "Dist::Zilla::Plugin::FinderCode",
             "name" : ":MainModule",
-            "version" : "4.300030"
+            "version" : "5.014"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":AllFiles",
+            "version" : "5.014"
+         },
+         {
+            "class" : "Dist::Zilla::Plugin::FinderCode",
+            "name" : ":NoFiles",
+            "version" : "5.014"
          }
       ],
       "zilla" : {
@@ -294,7 +460,7 @@
          "config" : {
             "is_trial" : "0"
          },
-         "version" : "4.300030"
+         "version" : "5.014"
       }
    }
 }
@@ -3,177 +3,287 @@ abstract: 'a library for sending email'
 author:
   - 'Ricardo Signes <rjbs@cpan.org>'
 build_requires:
-  Test::More: 0.96
+  Capture::Tiny: '0.08'
+  Cwd: '0'
+  Exporter: '0'
+  File::Temp: '0'
+  Test::More: '0.96'
+  lib: '0'
 configure_requires:
-  ExtUtils::MakeMaker: 6.30
+  ExtUtils::MakeMaker: '6.30'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.300030, CPAN::Meta::Converter version 2.120921'
+generated_by: 'Dist::Zilla version 5.014, CPAN::Meta::Converter version 2.133380'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: Email-Sender
 requires:
-  Capture::Tiny: 0.08
-  Carp: 0
-  Cwd: 0
-  Email::Abstract: 3
-  Email::Address: 0
-  Email::Simple: 1.998
-  Fcntl: 0
-  File::Basename: 0
-  File::Find: 0
-  File::Path: 0
-  File::Spec: 0
-  File::Temp: 0
-  FindBin: 0
-  List::MoreUtils: 0
-  Module::Runtime: 0
-  Moo: 1.000008
-  Moo::Role: 0
-  MooX::Types::MooseLike: 0.15
-  Net::SMTP: 0
-  Scalar::Util: 0
-  Sub::Exporter: 0
-  Sys::Hostname: 0
-  Throwable::Error: 0.200003
-  Try::Tiny: 0
+  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: '0'
+  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'
+  warnings: '0'
 resources:
-  homepage: https://github.com/rjbs/email-sender
-  repository: https://github.com/rjbs/email-sender.git
-version: 1.300006
+  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'
 x_Dist_Zilla:
   perl:
-    version: 5.017009
+    version: '5.019009'
   plugins:
     -
       class: Dist::Zilla::Plugin::Git::GatherDir
-      name: '@Filter/Git::GatherDir'
-      version: 2.009
+      name: '@RJBS/Git::GatherDir'
+      version: '2.020'
     -
       class: Dist::Zilla::Plugin::CheckPrereqsIndexed
-      name: '@Filter/CheckPrereqsIndexed'
-      version: 0.008
+      name: '@RJBS/CheckPrereqsIndexed'
+      version: '0.010'
     -
       class: Dist::Zilla::Plugin::CheckExtraTests
-      name: '@Filter/CheckExtraTests'
-      version: 0.011
+      name: '@RJBS/CheckExtraTests'
+      version: '0.018'
+    -
+      class: Dist::Zilla::Plugin::PromptIfStale
+      config:
+        Dist::Zilla::Plugin::PromptIfStale:
+          check_all_plugins: 0
+          check_all_prereqs: 0
+          modules:
+            - Dist::Zilla::PluginBundle::RJBS
+          phase: build
+          skip: []
+      name: '@RJBS/RJBS-Outdated'
+      version: '0.020'
+    -
+      class: Dist::Zilla::Plugin::PromptIfStale
+      config:
+        Dist::Zilla::Plugin::PromptIfStale:
+          check_all_plugins: '1'
+          check_all_prereqs: 0
+          modules: []
+          phase: release
+          skip: []
+      name: '@RJBS/CPAN-Outdated'
+      version: '0.020'
     -
       class: Dist::Zilla::Plugin::PruneCruft
-      name: '@Filter/@Filter/PruneCruft'
-      version: 4.300030
+      name: '@RJBS/@Filter/PruneCruft'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::ManifestSkip
-      name: '@Filter/@Filter/ManifestSkip'
-      version: 4.300030
+      name: '@RJBS/@Filter/ManifestSkip'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::MetaYAML
-      name: '@Filter/@Filter/MetaYAML'
-      version: 4.300030
+      name: '@RJBS/@Filter/MetaYAML'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::License
-      name: '@Filter/@Filter/License'
-      version: 4.300030
+      name: '@RJBS/@Filter/License'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::Readme
-      name: '@Filter/@Filter/Readme'
-      version: 4.300030
+      name: '@RJBS/@Filter/Readme'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::ExecDir
-      name: '@Filter/@Filter/ExecDir'
-      version: 4.300030
+      name: '@RJBS/@Filter/ExecDir'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::ShareDir
-      name: '@Filter/@Filter/ShareDir'
-      version: 4.300030
+      name: '@RJBS/@Filter/ShareDir'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::MakeMaker
-      name: '@Filter/@Filter/MakeMaker'
-      version: 4.300030
+      name: '@RJBS/@Filter/MakeMaker'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::Manifest
-      name: '@Filter/@Filter/Manifest'
-      version: 4.300030
+      name: '@RJBS/@Filter/Manifest'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::TestRelease
-      name: '@Filter/@Filter/TestRelease'
-      version: 4.300030
+      name: '@RJBS/@Filter/TestRelease'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::ConfirmRelease
-      name: '@Filter/@Filter/ConfirmRelease'
-      version: 4.300030
+      name: '@RJBS/@Filter/ConfirmRelease'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::UploadToCPAN
-      name: '@Filter/@Filter/UploadToCPAN'
-      version: 4.300030
+      name: '@RJBS/@Filter/UploadToCPAN'
+      version: '5.014'
+    -
+      class: Dist::Zilla::Plugin::AutoPrereqs
+      name: '@RJBS/AutoPrereqs'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::Git::NextVersion
-      name: '@Filter/Git::NextVersion'
-      version: 2.009
+      name: '@RJBS/Git::NextVersion'
+      version: '2.020'
     -
       class: Dist::Zilla::Plugin::PkgVersion
-      name: '@Filter/PkgVersion'
-      version: 4.300030
+      name: '@RJBS/PkgVersion'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::MetaConfig
-      name: '@Filter/MetaConfig'
-      version: 4.300030
+      name: '@RJBS/MetaConfig'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::MetaJSON
-      name: '@Filter/MetaJSON'
-      version: 4.300030
+      name: '@RJBS/MetaJSON'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::NextRelease
-      name: '@Filter/NextRelease'
-      version: 4.300030
+      name: '@RJBS/NextRelease'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::Test::ChangesHasContent
-      name: '@Filter/Test::ChangesHasContent'
-      version: 0.006
+      name: '@RJBS/Test::ChangesHasContent'
+      version: '0.006'
     -
       class: Dist::Zilla::Plugin::PodSyntaxTests
-      name: '@Filter/PodSyntaxTests'
-      version: 4.300030
-    -
-      class: Dist::Zilla::Plugin::Test::Compile
-      name: '@Filter/Test::Compile'
-      version: 2.001
+      name: '@RJBS/PodSyntaxTests'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::ReportVersions::Tiny
-      name: '@Filter/ReportVersions::Tiny'
-      version: 1.08
+      name: '@RJBS/ReportVersions::Tiny'
+      version: '1.10'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
         Dist::Zilla::Plugin::Prereqs:
           phase: test
           type: requires
-      name: '@Filter/TestMoreWithSubtests'
-      version: 4.300030
+      name: '@RJBS/TestMoreWithSubtests'
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::PodWeaver
-      name: '@Filter/PodWeaver'
-      version: 3.101641
+      config:
+        Dist::Zilla::Plugin::PodWeaver:
+          config_plugins:
+            - '@RJBS'
+          finder:
+            - ':InstallModules'
+            - ':ExecFiles'
+          plugins:
+            -
+              class: Pod::Weaver::Plugin::EnsurePod5
+              name: '@CorePrep/EnsurePod5'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Plugin::H1Nester
+              name: '@CorePrep/H1Nester'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Plugin::SingleEncoding
+              name: '@RJBS/SingleEncoding'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Name
+              name: '@RJBS/Name'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Version
+              name: '@RJBS/Version'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Region
+              name: '@RJBS/Prelude'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Synopsis'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Description'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Overview'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Generic
+              name: '@RJBS/Stability'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Collect
+              name: Attributes
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Collect
+              name: Methods
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Collect
+              name: Functions
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Leftovers
+              name: '@RJBS/Leftovers'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Region
+              name: '@RJBS/postlude'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Authors
+              name: '@RJBS/Authors'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Section::Legal
+              name: '@RJBS/Legal'
+              version: '4.006'
+            -
+              class: Pod::Weaver::Plugin::Transformer
+              name: '@RJBS/List'
+              version: '4.006'
+      name: '@RJBS/PodWeaver'
+      version: '4.005'
     -
       class: Dist::Zilla::Plugin::GithubMeta
-      name: '@Filter/GithubMeta'
-      version: 0.28
+      name: '@RJBS/GithubMeta'
+      version: '0.42'
     -
       class: Dist::Zilla::Plugin::Git::Check
-      name: '@Filter/@Git/Check'
-      version: 2.009
+      name: '@RJBS/@Git/Check'
+      version: '2.020'
     -
       class: Dist::Zilla::Plugin::Git::Commit
-      name: '@Filter/@Git/Commit'
-      version: 2.009
+      name: '@RJBS/@Git/Commit'
+      version: '2.020'
     -
       class: Dist::Zilla::Plugin::Git::Tag
-      name: '@Filter/@Git/Tag'
-      version: 2.009
+      name: '@RJBS/@Git/Tag'
+      version: '2.020'
     -
       class: Dist::Zilla::Plugin::Git::Push
-      name: '@Filter/@Git/Push'
-      version: 2.009
+      name: '@RJBS/@Git/Push'
+      version: '2.020'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -181,7 +291,7 @@ x_Dist_Zilla:
           phase: runtime
           type: requires
       name: Prereqs
-      version: 4.300030
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::Prereqs
       config:
@@ -189,33 +299,52 @@ x_Dist_Zilla:
           phase: develop
           type: requires
       name: DevelopRequires
-      version: 4.300030
+      version: '5.014'
+    -
+      class: Dist::Zilla::Plugin::RemovePrereqs
+      config:
+        Dist::Zilla::Plugin::RemovePrereqs:
+          modules_to_remove:
+            - JSON
+            - Test::MockObject
+            - Net::SMTP::SSL
+            - Sub::Override
+      name: RemovePrereqs
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':InstallModules'
-      version: 4.300030
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':IncModules'
-      version: 4.300030
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':TestFiles'
-      version: 4.300030
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ExecFiles'
-      version: 4.300030
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':ShareFiles'
-      version: 4.300030
+      version: '5.014'
     -
       class: Dist::Zilla::Plugin::FinderCode
       name: ':MainModule'
-      version: 4.300030
+      version: '5.014'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':AllFiles'
+      version: '5.014'
+    -
+      class: Dist::Zilla::Plugin::FinderCode
+      name: ':NoFiles'
+      version: '5.014'
   zilla:
     class: Dist::Zilla::Dist::Builder
     config:
-      is_trial: 0
-    version: 4.300030
+      is_trial: '0'
+    version: '5.014'
@@ -1,4 +1,5 @@
 
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.014.
 use strict;
 use warnings;
 
@@ -11,9 +12,7 @@ use ExtUtils::MakeMaker 6.30;
 my %WriteMakefileArgs = (
   "ABSTRACT" => "a library for sending email",
   "AUTHOR" => "Ricardo Signes <rjbs\@cpan.org>",
-  "BUILD_REQUIRES" => {
-    "Test::More" => "0.96"
-  },
+  "BUILD_REQUIRES" => {},
   "CONFIGURE_REQUIRES" => {
     "ExtUtils::MakeMaker" => "6.30"
   },
@@ -22,49 +21,86 @@ my %WriteMakefileArgs = (
   "LICENSE" => "perl",
   "NAME" => "Email::Sender",
   "PREREQ_PM" => {
-    "Capture::Tiny" => "0.08",
     "Carp" => 0,
-    "Cwd" => 0,
-    "Email::Abstract" => 3,
+    "Email::Abstract" => "3.006",
     "Email::Address" => 0,
     "Email::Simple" => "1.998",
     "Fcntl" => 0,
     "File::Basename" => 0,
-    "File::Find" => 0,
-    "File::Path" => 0,
+    "File::Path" => "2.06",
     "File::Spec" => 0,
-    "File::Temp" => 0,
-    "FindBin" => 0,
+    "IO::File" => 0,
+    "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
+    "Try::Tiny" => 0,
+    "strict" => 0,
+    "warnings" => 0
+  },
+  "TEST_REQUIRES" => {
+    "Capture::Tiny" => "0.08",
+    "Cwd" => 0,
+    "Exporter" => 0,
+    "File::Temp" => 0,
+    "Test::More" => "0.96",
+    "lib" => 0
   },
-  "VERSION" => "1.300006",
+  "VERSION" => "1.300011",
   "test" => {
     "TESTS" => "t/*.t"
   }
 );
 
 
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
-  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
-  my $pp = $WriteMakefileArgs{PREREQ_PM};
-  for my $mod ( keys %$br ) {
-    if ( exists $pp->{$mod} ) {
-      $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
-    }
-    else {
-      $pp->{$mod} = $br->{$mod};
-    }
-  }
+my %FallbackPrereqs = (
+  "Capture::Tiny" => "0.08",
+  "Carp" => 0,
+  "Cwd" => 0,
+  "Email::Abstract" => "3.006",
+  "Email::Address" => 0,
+  "Email::Simple" => "1.998",
+  "Exporter" => 0,
+  "Fcntl" => 0,
+  "File::Basename" => 0,
+  "File::Path" => "2.06",
+  "File::Spec" => 0,
+  "File::Temp" => 0,
+  "IO::File" => 0,
+  "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,
+  "Test::More" => "0.96",
+  "Throwable::Error" => "0.200003",
+  "Try::Tiny" => 0,
+  "lib" => 0,
+  "strict" => 0,
+  "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+  delete $WriteMakefileArgs{TEST_REQUIRES};
+  delete $WriteMakefileArgs{BUILD_REQUIRES};
+  $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
 }
 
 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
@@ -1,13 +1,15 @@
 
 
 This archive contains the distribution Email-Sender,
-version 1.300006:
+version 1.300011:
 
   a library for sending email
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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.
+
@@ -3,42 +3,19 @@ author  = Ricardo Signes <rjbs@cpan.org>
 license = Perl_5
 copyright_holder = Ricardo Signes
 
-[@Filter]
-bundle = @RJBS
-remove = AutoPrereqs
+[@RJBS]
 
 [Prereqs]
-; NON-CORE PREREQUISITES
-Capture::Tiny    = 0.08 ; for testing
-Module::Runtime  = 0
-Email::Abstract  = 3 ; XXX: really use Abstract?; 3 = \$str
-Email::Address   = 0 ; used for env-from-msg (::Simple)
-List::MoreUtils  = 0 ; minimum version unknown; uniq
-Moo              = 1.000008 ; bugfixes related to old Mouse installs
-Moo::Role        = 0
-MooX::Types::MooseLike = 0.15 ; InstanceOf uses ->isa
-Net::SMTP        = 0 ;
-Sub::Exporter    = 0 ;
-Try::Tiny        = 0 ; required by Moose, anyway
-Throwable::Error = 0.200003 ; with $obj->throw and ->throw($str) and Moo
-
-; SOON TO NOT BE PREREQUISIES ?
-Email::Simple       = 1.998 ; needed(?) for ->header_obj
-                            ; only needed by Mbox; split?
-
-; CORE PREREQUISITES
-Carp            = 0 ; minimum unknown
-Cwd             = 0 ; minimum unknown
-Fcntl           = 0 ;
-File::Basename  = 0 ;
-File::Find      = 0 ;
-File::Path      = 0 ;
-File::Spec      = 0 ;
-File::Temp      = 0 ;
-FindBin         = 0 ;
-Scalar::Util    = 0 ;
-Sys::Hostname   = 0 ;
+Moo                    = 1.000008 ; bugfixes related to old Mouse installs
+MooX::Types::MooseLike = 0.15     ; InstanceOf uses ->isa
+Throwable::Error = 0.200003       ; with $obj->throw and ->throw($str) and Moo
 
 [Prereqs / DevelopRequires]
-Sub::Override = 0
+Sub::Override    = 0
+Test::MockObject = 0
 
+[RemovePrereqs]
+remove = JSON
+remove = Test::MockObject
+remove = Net::SMTP::SSL
+remove = Sub::Override
@@ -1,12 +1,22 @@
 package Email::Sender::Failure::Multi;
-{
-  $Email::Sender::Failure::Multi::VERSION = '1.300006';
-}
+# ABSTRACT: an aggregate of multiple failures
+$Email::Sender::Failure::Multi::VERSION = '1.300011';
 use Moo;
-use MooX::Types::MooseLike::Base qw(ArrayRef);
 extends 'Email::Sender::Failure';
-# ABSTRACT: an aggregate of multiple failures
 
+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
 
 has failures => (
   is       => 'ro',
@@ -37,6 +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
 
 sub isa {
   my ($self, $class) = @_;
@@ -60,13 +76,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Failure::Multi - an aggregate of multiple failures
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -93,7 +111,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,10 +1,8 @@
 package Email::Sender::Failure::Permanent;
-{
-  $Email::Sender::Failure::Permanent::VERSION = '1.300006';
-}
+# ABSTRACT: a permanent delivery failure
+$Email::Sender::Failure::Permanent::VERSION = '1.300011';
 use Moo;
 extends 'Email::Sender::Failure';
-# ABSTRACT: a permanent delivery failure
 
 no Moo;
 1;
@@ -13,13 +11,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Failure::Permanent - a permanent delivery failure
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 AUTHOR
 
@@ -27,7 +27,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,10 +1,8 @@
 package Email::Sender::Failure::Temporary;
-{
-  $Email::Sender::Failure::Temporary::VERSION = '1.300006';
-}
+# ABSTRACT: a temporary delivery failure
+$Email::Sender::Failure::Temporary::VERSION = '1.300011';
 use Moo;
 extends 'Email::Sender::Failure';
-# ABSTRACT: a temporary delivery failure
 
 no Moo;
 1;
@@ -13,13 +11,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Failure::Temporary - a temporary delivery failure
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 AUTHOR
 
@@ -27,7 +27,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,33 @@
 package Email::Sender::Failure;
-{
-  $Email::Sender::Failure::VERSION = '1.300006';
-}
+# ABSTRACT: a report of failure from an email sending transport
+$Email::Sender::Failure::VERSION = '1.300011';
 use Moo;
-use MooX::Types::MooseLike::Base qw(ArrayRef);
-use Carp ();
 extends 'Throwable::Error';
-# ABSTRACT: a report of failure from an email sending transport
 
+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
 
 has code => (
   is => 'ro',
 );
 
+# =attr recipients
+#
+# This returns a list of addresses to which the email could not be sent.
+#
+# =cut
 
 has recipients => (
   isa     => ArrayRef,
@@ -34,6 +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
 
 sub BUILD {
   my ($self) = @_;
@@ -41,6 +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
 
 no Moo;
 1;
@@ -49,13 +88,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Failure - a report of failure from an email sending transport
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 ATTRIBUTES
 
@@ -103,7 +144,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,248 @@
 use strict;
 use warnings;
 package Email::Sender::Manual::QuickStart;
-{
-  $Email::Sender::Manual::QuickStart::VERSION = '1.300006';
-}
 # 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
 
 1;
 
@@ -13,13 +250,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Manual::QuickStart - how to start using Email::Sender right now
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 QUICK START
 
@@ -266,7 +505,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,14 @@
 use strict;
 use warnings;
 package Email::Sender::Manual;
-{
-  $Email::Sender::Manual::VERSION = '1.300006';
-}
 # 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
 
 1;
 
@@ -13,13 +16,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Manual - table of contents for the Email::Sender manual
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 THE MANUAL
 
@@ -32,7 +37,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,36 @@
 package Email::Sender::Role::CommonSending;
-{
-  $Email::Sender::Role::CommonSending::VERSION = '1.300006';
-}
-use Moo::Role;
 # ABSTRACT: the common sending tasks most Email::Sender classes will need
+$Email::Sender::Role::CommonSending::VERSION = '1.300011';
+use Moo::Role;
 
 use Carp ();
-use Email::Abstract;
+use Email::Abstract 3.006;
 use Email::Sender::Success;
 use Email::Sender::Failure::Temporary;
 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
 
 with 'Email::Sender';
 
@@ -39,6 +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
 
 sub prepare_email {
   my ($self, $msg) = @_;
@@ -54,6 +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
 
 sub prepare_envelope {
   my ($self, $env) = @_;
@@ -65,6 +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
 
 sub success {
   my $self = shift;
@@ -78,13 +119,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Role::CommonSending - the common sending tasks most Email::Sender classes will need
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -133,7 +176,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,10 +1,13 @@
 package Email::Sender::Role::HasMessage;
-{
-  $Email::Sender::Role::HasMessage::VERSION = '1.300006';
-}
-use Moo::Role;
 # ABSTRACT: an object that has a message
+$Email::Sender::Role::HasMessage::VERSION = '1.300011';
+use Moo::Role;
 
+# =attr message
+#
+# This attribute is a message associated with the object.
+#
+# =cut
 
 has message => (
   is       => 'ro',
@@ -18,13 +21,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Role::HasMessage - an object that has a message
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 ATTRIBUTES
 
@@ -38,7 +43,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,15 @@
 package Email::Sender::Simple;
-{
-  $Email::Sender::Simple::VERSION = '1.300006';
-}
+# ABSTRACT: the simple interface for sending mail with Sender
+$Email::Sender::Simple::VERSION = '1.300011';
 use Moo;
 with 'Email::Sender::Role::CommonSending';
-# ABSTRACT: the simple interface for sending mail with Sender
 
+# =head1 SEE INSTEAD
+#
+# For now, the best documentation of this class is in
+# L<Email::Sender::Manual::QuickStart>.
+#
+# =cut
 
 use Sub::Exporter::Util ();
 use Sub::Exporter -setup => {
@@ -167,13 +171,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Simple - the simple interface for sending mail with Sender
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 SEE INSTEAD
 
@@ -186,7 +192,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,12 +1,18 @@
 package Email::Sender::Success::Partial;
-{
-  $Email::Sender::Success::Partial::VERSION = '1.300006';
-}
+# ABSTRACT: a report of partial success when delivering
+$Email::Sender::Success::Partial::VERSION = '1.300011';
 use Moo;
 extends 'Email::Sender::Success';
+
 use MooX::Types::MooseLike::Base qw(InstanceOf);
-# ABSTRACT: a report of partial success when delivering
 
+# =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
 
 use Email::Sender::Failure::Multi;
 
@@ -23,13 +29,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Success::Partial - a report of partial success when delivering
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -43,7 +51,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,10 +1,14 @@
 package Email::Sender::Success;
-{
-  $Email::Sender::Success::VERSION = '1.300006';
-}
-use Moo;
 # ABSTRACT: the result of successfully sending mail
+$Email::Sender::Success::VERSION = '1.300011';
+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
 
 no Moo;
 1;
@@ -13,13 +17,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Success - the result of successfully sending mail
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -32,7 +38,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,15 @@
 package Email::Sender::Transport::DevNull;
-{
-  $Email::Sender::Transport::DevNull::VERSION = '1.300006';
-}
+# ABSTRACT: happily throw away your mail
+$Email::Sender::Transport::DevNull::VERSION = '1.300011';
 use Moo;
 with 'Email::Sender::Transport';
-# ABSTRACT: happily throw away your mail
 
+# =head1 DESCRIPTION
+#
+# This class implements L<Email::Sender::Transport>.  Any mail sent through a
+# DevNull transport will be silently discarded.
+#
+# =cut
 
 sub send_email { return $_[0]->success }
 
@@ -16,13 +20,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::DevNull - happily throw away your mail
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -35,7 +41,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,12 +1,27 @@
 package Email::Sender::Transport::Failable;
-{
-  $Email::Sender::Transport::Failable::VERSION = '1.300006';
-}
+# ABSTRACT: a wrapper to makes things fail predictably
+$Email::Sender::Transport::Failable::VERSION = '1.300011';
 use Moo;
-use MooX::Types::MooseLike::Base qw(ArrayRef);
 extends 'Email::Sender::Transport::Wrapper';
-# ABSTRACT: a wrapper to makes things fail predictably
 
+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
 
 has 'failure_conditions' => (
   isa => ArrayRef,
@@ -38,13 +53,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Failable - a wrapper to makes things fail predictably
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -67,7 +84,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,20 +1,39 @@
 package Email::Sender::Transport::Maildir;
-{
-  $Email::Sender::Transport::Maildir::VERSION = '1.300006';
-}
+# ABSTRACT: deliver mail to a maildir on disk
+$Email::Sender::Transport::Maildir::VERSION = '1.300011';
 use Moo;
 with 'Email::Sender::Transport';
-# ABSTRACT: deliver mail to a maildir on disk
 
 use Errno ();
 use Fcntl;
-use File::Path;
+use File::Path 2.06;
 use File::Spec;
 
 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
 
 {
   package
@@ -80,7 +99,7 @@ sub _ensure_maildir_exists {
     next if -d $subdir;
 
     Email::Sender::Failure->throw("couldn't create $subdir: $!")
-      unless File::Path::mkpath($subdir);
+      unless File::Path::make_path($subdir) || -d $subdir;
   }
 }
 
@@ -109,7 +128,9 @@ sub _deliver_email {
   # if (eval { $email->can('stream_to') }) {
   #  eval { $mail->stream_to($fh); 1 } or return;
   #} else {
-  print $tmp_fh $email->as_string
+  my $string = $email->as_string;
+  $string =~ s/\x0D\x0A/\x0A/g unless $^O eq 'MSWin32';
+  print $tmp_fh $string
     or Email::Sender::Failure->throw("could not write to $tmp_filename: $!");
 
   close $tmp_fh
@@ -153,13 +174,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Maildir - deliver mail to a maildir on disk
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -187,7 +210,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,10 +1,8 @@
 package Email::Sender::Transport::Mbox;
-{
-  $Email::Sender::Transport::Mbox::VERSION = '1.300006';
-}
+# ABSTRACT: deliver mail to an mbox on disk
+$Email::Sender::Transport::Mbox::VERSION = '1.300011';
 use Moo;
 with 'Email::Sender::Transport';
-# ABSTRACT: deliver mail to an mbox on disk
 
 use Carp;
 use File::Path;
@@ -13,6 +11,15 @@ use IO::File;
 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
 
 has 'filename' => (is => 'ro', default => sub { 'mbox' }, required => 1);
 
@@ -111,13 +118,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Mbox - deliver mail to an mbox on disk
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -133,7 +142,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,16 @@
 package Email::Sender::Transport::Print;
-{
-  $Email::Sender::Transport::Print::VERSION = '1.300006';
-}
+# ABSTRACT: print email to a filehandle (like stdout)
+$Email::Sender::Transport::Print::VERSION = '1.300011';
 use Moo;
 with 'Email::Sender::Transport';
-# ABSTRACT: print email to a filehandle (like stdout)
 
+# =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
 
 use IO::Handle;
 use MooX::Types::MooseLike::Base qw(InstanceOf);
@@ -40,13 +45,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Print - print email to a filehandle (like stdout)
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -60,7 +67,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,15 @@
 package Email::Sender::Transport::SMTP::Persistent;
-{
-  $Email::Sender::Transport::SMTP::Persistent::VERSION = '1.300006';
-}
+# ABSTRACT: an SMTP client that stays online
+$Email::Sender::Transport::SMTP::Persistent::VERSION = '1.300011';
 use Moo;
 extends 'Email::Sender::Transport::SMTP';
-# ABSTRACT: an SMTP client that stays online
 
+# =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
 
 use Net::SMTP;
 
@@ -34,6 +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
 
 sub disconnect {
   my ($self) = @_;
@@ -49,13 +61,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::SMTP::Persistent - an SMTP client that stays online
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -77,7 +91,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,38 @@
 package Email::Sender::Transport::SMTP;
-{
-  $Email::Sender::Transport::SMTP::VERSION = '1.300006';
-}
-use Moo;
-use MooX::Types::MooseLike::Base qw(Bool Int Str);
 # ABSTRACT: send email over SMTP
+$Email::Sender::Transport::SMTP::VERSION = '1.300011';
+use Moo;
 
 use Email::Sender::Failure::Multi;
 use Email::Sender::Success::Partial;
+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
 
 has host => (is => 'ro', isa => Str,  default => sub { 'localhost' });
 has ssl  => (is => 'ro', isa => Bool, default => sub { 0 });
@@ -22,17 +45,39 @@ 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
 
 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
 
 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
+
+has debug => (is => 'ro', isa => Bool, default => sub { 0 });
+
 # I am basically -sure- that this is wrong, but sending hundreds of millions of
 # messages has shown that it is right enough.  I will try to make it textbook
 # later. -- rjbs, 2008-12-05
@@ -85,6 +130,7 @@ sub _net_smtp_args {
     $self->host,
     Port    => $self->port,
     Timeout => $self->timeout,
+    Debug   => $self->debug,
     defined $self->helo      ? (Hello     => $self->helo)      : (),
     defined $self->localaddr ? (LocalAddr => $self->localaddr) : (),
     defined $self->localport ? (LocalPort => $self->localport) : (),
@@ -107,7 +153,7 @@ sub send_email {
   my $FAULT = sub { $self->_throw($_[0], $smtp); };
 
   $smtp->mail(_quoteaddr($env->{from}))
-    or $FAULT->("$env->{from} failed after MAIL FROM:");
+    or $FAULT->("$env->{from} failed after MAIL FROM");
 
   my @failures;
   my @ok_rcpts;
@@ -151,7 +197,15 @@ sub send_email {
   # -- rjbs, 2008-12-04
 
   $smtp->data                        or $FAULT->("error at DATA start");
-  $smtp->datasend($email->as_string) or $FAULT->("error at during DATA");
+
+  my $msg_string = $email->as_string;
+  my $hunk_size  = $self->_hunk_size;
+
+  while (length $msg_string) {
+    my $next_hunk = substr $msg_string, 0, $hunk_size, '';
+    $smtp->datasend($next_hunk) or $FAULT->("error at during DATA");
+  }
+
   $smtp->dataend                     or $FAULT->("error at after DATA");
 
   my $message = $smtp->message;
@@ -169,6 +223,8 @@ sub send_email {
   });
 }
 
+sub _hunk_size { 2**20 } # send messages to DATA in hunks of 1 mebibyte
+
 sub success {
   my $self = shift;
   my $success = Moo::Role->create_class_with_roles('Email::Sender::Success', 'Email::Sender::Role::HasMessage')->new(@_);
@@ -181,6 +237,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
 
 with 'Email::Sender::Transport';
 no Moo;
@@ -190,13 +253,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::SMTP - send email over SMTP
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -233,6 +298,8 @@ The following attributes may be passed to the constructor:
 
 =item C<localport>: local port from which to connect
 
+=item C<debug>: if true, put the L<Net::SMTP> object in debug mode
+
 =back
 
 =head1 PARTIAL SUCCESS
@@ -247,7 +314,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,12 +1,23 @@
 package Email::Sender::Transport::Sendmail;
-{
-  $Email::Sender::Transport::Sendmail::VERSION = '1.300006';
-}
+# ABSTRACT: send mail via sendmail(1)
+$Email::Sender::Transport::Sendmail::VERSION = '1.300011';
 use Moo;
-use MooX::Types::MooseLike::Base qw(Str);
 with 'Email::Sender::Transport';
-# ABSTRACT: send mail via sendmail(1)
 
+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
 
 use File::Spec ();
 
@@ -58,8 +69,8 @@ sub _sendmail_pipe {
   my $prog = $self->sendmail;
 
   my ($first, @args) = $^O eq 'MSWin32'
-           ? qq(| "$prog" -f $envelope->{from} @{$envelope->{to}})
-           : (q{|-}, $prog, '-f', $envelope->{from}, @{$envelope->{to}});
+           ? qq(| "$prog" -i -f $envelope->{from} @{$envelope->{to}})
+           : (q{|-}, $prog, '-i', '-f', $envelope->{from}, '--', @{$envelope->{to}});
 
   no warnings 'exec'; ## no critic
   my $pipe;
@@ -74,6 +85,9 @@ sub send_email {
 
   my $pipe = $self->_sendmail_pipe($envelope);
 
+  my $string = $email->as_string;
+  $string =~ s/\x0D\x0A/\x0A/g unless $^O eq 'MSWin32';
+
   print $pipe $email->as_string
     or Email::Sender::Failure->throw("couldn't send message to sendmail: $!");
 
@@ -90,13 +104,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Sendmail - send mail via sendmail(1)
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head2 DESCRIPTION
 
@@ -115,7 +131,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,60 @@
 package Email::Sender::Transport::Test;
-{
-  $Email::Sender::Transport::Test::VERSION = '1.300006';
-}
-use Moo;
-use MooX::Types::MooseLike::Base qw(ArrayRef Bool);
 # ABSTRACT: deliver mail in memory for testing
+$Email::Sender::Transport::Test::VERSION = '1.300011';
+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
 
 has allow_partial_success => (is => 'ro', isa => Bool, default => sub { 0 });
 
@@ -87,13 +133,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Test - deliver mail in memory for testing
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -161,7 +209,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,18 @@
 package Email::Sender::Transport::Wrapper;
-{
-  $Email::Sender::Transport::Wrapper::VERSION = '1.300006';
-}
+# ABSTRACT: a mailer to wrap a mailer for mailing mail
+$Email::Sender::Transport::Wrapper::VERSION = '1.300011';
 use Moo;
 with 'Email::Sender::Transport';
-# ABSTRACT: a mailer to wrap a mailer for mailing mail
 
 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
 
 has transport => (
   is   => 'ro',
@@ -55,13 +60,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport::Wrapper - a mailer to wrap a mailer for mailing mail
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -75,7 +82,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,10 +1,31 @@
 package Email::Sender::Transport;
-{
-  $Email::Sender::Transport::VERSION = '1.300006';
-}
-use Moo::Role;
 # ABSTRACT: a role for email transports
+$Email::Sender::Transport::VERSION = '1.300011';
+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
 
 with 'Email::Sender::Role::CommonSending';
 
@@ -23,13 +44,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Transport - a role for email transports
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 DESCRIPTION
 
@@ -59,7 +82,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,11 +1,8 @@
 use strict;
 use warnings;
 package Email::Sender::Util;
-{
-  $Email::Sender::Util::VERSION = '1.300006';
-}
 # ABSTRACT: random stuff that makes Email::Sender go
-
+$Email::Sender::Util::VERSION = '1.300011';
 use Email::Address;
 use Email::Sender::Failure;
 use Email::Sender::Failure::Permanent;
@@ -73,13 +70,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender::Util - random stuff that makes Email::Sender go
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 AUTHOR
 
@@ -87,7 +86,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,12 +1,57 @@
 package Email::Sender;
-{
-  $Email::Sender::VERSION = '1.300006';
-}
-use Moo::Role;
 # ABSTRACT: a library for sending email
-
+$Email::Sender::VERSION = '1.300011';
+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
 
 no Moo::Role;
 1;
@@ -15,13 +60,15 @@ __END__
 
 =pod
 
+=encoding UTF-8
+
 =head1 NAME
 
 Email::Sender - a library for sending email
 
 =head1 VERSION
 
-version 1.300006
+version 1.300011
 
 =head1 SYNOPSIS
 
@@ -63,7 +110,7 @@ start with L<Email::Sender::Manual::QuickStart>.
 
 =head1 IMPLEMENTING
 
-Email::Sender itelf is a Moo role.  Any class that implements Email::Sender
+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
@@ -76,7 +123,7 @@ Ricardo Signes <rjbs@cpan.org>
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Ricardo Signes.
+This software is copyright (c) 2014 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,74 +0,0 @@
-#!perl
-
-use strict;
-use warnings;
-
-use Test::More;
-
-
-
-use File::Find;
-use File::Temp qw{ tempdir };
-
-my @modules;
-find(
-  sub {
-    return if $File::Find::name !~ /\.pm\z/;
-    my $found = $File::Find::name;
-    $found =~ s{^lib/}{};
-    $found =~ s{[/\\]}{::}g;
-    $found =~ s/\.pm$//;
-    # nothing to skip
-    push @modules, $found;
-  },
-  'lib',
-);
-
-sub _find_scripts {
-    my $dir = shift @_;
-
-    my @found_scripts = ();
-    find(
-      sub {
-        return unless -f;
-        my $found = $File::Find::name;
-        # nothing to skip
-        open my $FH, '<', $_ or do {
-          note( "Unable to open $found in ( $! ), skipping" );
-          return;
-        };
-        my $shebang = <$FH>;
-        return unless $shebang =~ /^#!.*?\bperl\b\s*$/;
-        push @found_scripts, $found;
-      },
-      $dir,
-    );
-
-    return @found_scripts;
-}
-
-my @scripts;
-do { push @scripts, _find_scripts($_) if -d $_ }
-    for qw{ bin script scripts };
-
-my $plan = scalar(@modules) + scalar(@scripts);
-$plan ? (plan tests => $plan) : (plan skip_all => "no tests to run");
-
-{
-    # fake home for cpan-testers
-    # no fake requested ## local $ENV{HOME} = tempdir( CLEANUP => 1 );
-
-    like( qx{ $^X -Ilib -e "require $_; print '$_ ok'" }, qr/^\s*$_ ok/s, "$_ loaded ok" )
-        for sort @modules;
-
-    SKIP: {
-        eval "use Test::Script 1.05; 1;";
-        skip "Test::Script needed to test script compilation", scalar(@scripts) if $@;
-        foreach my $file ( @scripts ) {
-            my $script = $file;
-            $script =~ s!.*/!!;
-            script_compiles( $file, "$script script compiles" );
-        }
-    }
-
-}
@@ -9,7 +9,7 @@ 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.08\n";
+my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.10\n";
 
 eval {                     # no excuses!
     # report our Perl details
@@ -51,32 +51,35 @@ sub pmver {
 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') };
+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::Find','any version') };
-eval { $v .= pmver('File::Path','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('FindBin','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::Override','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('Test::Pod','1.41') };
 eval { $v .= pmver('Throwable::Error','0.200003') };
 eval { $v .= pmver('Try::Tiny','any version') };
-eval { $v .= pmver('version','0.9901') };
+eval { $v .= pmver('lib','any version') };
+eval { $v .= pmver('strict','any version') };
+eval { $v .= pmver('warnings','any version') };
 
 
 # All done.
@@ -64,6 +64,7 @@ sub perform_stock_mockery {
   $mock_smtp->{datafail} = '';
   for my $part (qw(data datasend dataend)) {
     $mock_smtp->mock($part => sub {
+      # main::diag(">> $_[1] <<") if $part eq 'datasend';
       return $_[0]->fail(300 => 'NFI') if $_[0]->{datafail} eq $part;
       return $_[0]->succ;
     });
@@ -46,7 +46,5 @@ my $result = $xport->send(
   },
 );
 
-use Data::Dumper;
-
 isa_ok($result, 'Email::Sender::Success');
 is($xport->fh->{str}, $want, 'what we expected got printed');
@@ -4,7 +4,7 @@ use Test::More tests => 2;
 
 note 'Checking Changes';
 my $changes_file = 'Changes';
-my $newver = '1.300006';
+my $newver = '1.300011';
 my $trial_token = '-TRIAL';
 
 SKIP: {
@@ -1,7 +1,6 @@
 #!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
 use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
 
 all_pod_files_ok();