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