Courriel-0.40/0000775000175000017500000000000012653205401013061 5ustar autarchautarchCourriel-0.40/dist.ini0000644000175000017500000000302012653205401014516 0ustar autarchautarchname = Courriel author = Dave Rolsky license = Artistic_2_0 copyright_holder = Dave Rolsky [@DROLSKY] dist = Courriel pod_coverage_class = Pod::Coverage::Moose pod_coverage_skip = Courriel::ContentType pod_coverage_skip = Courriel::Disposition pod_coverage_skip = Courriel::Helpers pod_coverage_skip = Courriel::Role::HeaderWithAttributes pod_coverage_skip = Courriel::Role::Part pod_coverage_skip = Courriel::Role::Streams pod_coverage_skip = Courriel::Types pod_coverage_skip = Courriel::Types::Internal pod_coverage_skip = Email::Abstract::Courriel pod_coverage_trustme = Courriel => qr/^replace_body$/ prereqs_skip = Email::Sender::Simple prereqs_skip = Path::Class stopwords = API stopwords = CPAN stopwords = Courriel stopwords = DateTime stopwords = Multipart stopwords = PayPal stopwords = Postel stopwords = UTC stopwords = UTF stopwords = ascii stopwords = attribute's stopwords = cid stopwords = distro stopwords = filename stopwords = html stopwords = inline stopwords = lookup stopwords = multipart stopwords = utf stopwords = zh ; some of the test code intentionally has trailing whitespace -remove = Test::EOL ; some of the test data intentionally has tabs -remove = Test::NoTabs -remove = Test::Synopsis [Encoding] encoding = bytes match = \.jpg$ [Prereqs] List::MoreUtils = 0.28 [Prereqs / TestRecommends] Email::Sender = 0 Path::Class = 0 ; I think the right fix is to make Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable add the relevant prereqs [Prereqs / DevelopRequires] Pod::Coverage::Moose = 0Courriel-0.40/benchmarks/0000775000175000017500000000000012653205401015176 5ustar autarchautarchCourriel-0.40/benchmarks/vs-email-mime0000644000175000017500000000176012653205401017565 0ustar autarchautarch#!/usr/bin/env perl use Benchmark qw( timethese ); use Courriel; use Email::MIME; my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:22 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: multipart/alternative; boundary=20cf3071cfd06272ae04a46c9306 --20cf3071cfd06272ae04a46c9306 Content-Type: text/plain; charset=ISO-8859-1 This is a test email. It has some *bold* text. --20cf3071cfd06272ae04a46c9306 Content-Type: text/html; charset=ISO-8859-1 This is a test email.

It has some bold text.

--20cf3071cfd06272ae04a46c9306-- EOF sub courriel { my $copy = $text; Courriel->parse( text => \$copy ); } sub email_mime { my $copy = $text; Email::MIME->new(\$copy); } timethese( 5000, { Courriel => \&courriel, 'Email::MIME' => \&email_mime, } ); Courriel-0.40/perltidyrc0000644000175000017500000000043612653205401015166 0ustar autarchautarch-l=78 -i=4 -ci=4 -se -b -bar -boc -vt=0 -vtc=0 -cti=0 -pt=1 -bt=1 -sbt=1 -bbt=1 -nolq -npro -nsfs --blank-lines-before-packages=0 --opening-hash-brace-right --no-outdent-long-comments -wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x=" Courriel-0.40/cpanfile0000644000175000017500000000472212653205401014570 0ustar autarchautarchrequires "Carp" => "0"; requires "DateTime" => "0"; requires "DateTime::Format::Mail" => "0"; requires "DateTime::Format::Natural" => "0"; requires "Devel::PartialDump" => "0"; requires "Email::Abstract::Plugin" => "0"; requires "Email::Address" => "0"; requires "Email::Address::List" => "0"; requires "Email::MIME::Encodings" => "0"; requires "Email::MessageID" => "0"; requires "Encode" => "0"; requires "Exporter" => "0"; requires "File::Basename" => "0"; requires "File::LibMagic" => "0"; requires "File::Slurp::Tiny" => "0"; requires "List::AllUtils" => "0"; requires "List::MoreUtils" => "0.28"; requires "MIME::Base64" => "0"; requires "MIME::QuotedPrint" => "0"; requires "Moose" => "0"; requires "Moose::Role" => "0"; requires "MooseX::Params::Validate" => "0.21"; requires "MooseX::Role::Parameterized" => "0"; requires "MooseX::StrictConstructor" => "0"; requires "MooseX::Types" => "0"; requires "MooseX::Types::Combine" => "0"; requires "MooseX::Types::Common::String" => "0"; requires "MooseX::Types::Moose" => "0"; requires "Scalar::Util" => "0"; requires "Sub::Exporter" => "0"; requires "namespace::autoclean" => "0"; requires "parent" => "0"; requires "perl" => "v5.10.0"; requires "strict" => "0"; requires "warnings" => "0"; on 'test' => sub { requires "ExtUtils::MakeMaker" => "0"; requires "File::Spec" => "0"; requires "Sys::Hostname" => "0"; requires "Test::Differences" => "0"; requires "Test::Fatal" => "0"; requires "Test::More" => "0.96"; requires "Test::Requires" => "0"; requires "utf8" => "0"; }; on 'test' => sub { recommends "CPAN::Meta" => "2.120900"; recommends "Email::Sender" => "0"; recommends "Path::Class" => "0"; }; on 'configure' => sub { requires "ExtUtils::MakeMaker" => "0"; }; on 'develop' => sub { requires "Code::TidyAll" => "0.24"; requires "File::Spec" => "0"; requires "IO::Handle" => "0"; requires "IPC::Open3" => "0"; requires "Perl::Critic" => "1.123"; requires "Perl::Tidy" => "20140711"; requires "Pod::Coverage::Moose" => "0"; requires "Pod::Coverage::TrustPod" => "0"; requires "Test::CPAN::Changes" => "0.19"; requires "Test::CPAN::Meta::JSON" => "0.16"; requires "Test::Code::TidyAll" => "0.24"; requires "Test::Mojibake" => "0"; requires "Test::More" => "0.88"; requires "Test::Pod" => "1.41"; requires "Test::Pod::Coverage" => "1.08"; requires "Test::Pod::LinkCheck" => "0"; requires "Test::Pod::No404s" => "0"; requires "Test::Spelling" => "0.12"; requires "Test::Version" => "1"; }; Courriel-0.40/t/0000775000175000017500000000000012653205401013324 5ustar autarchautarchCourriel-0.40/t/author-test-version.t0000644000175000017500000000107112653205401017450 0ustar autarchautarch BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } use strict; use warnings; use Test::More; # generated by Dist::Zilla::Plugin::Test::Version 1.05 use Test::Version; my @imports = qw( version_all_ok ); my $params = { is_strict => 1, has_version => 1, multiple => 0, }; push @imports, $params if version->parse( $Test::Version::VERSION ) >= version->parse('1.002'); Test::Version->import(@imports); version_all_ok; done_testing; Courriel-0.40/t/Email-Sender.t0000644000175000017500000000360012653205401015753 0ustar autarchautarchuse strict; use warnings; use Test::Requires { 'Email::Sender' => '0', }; use Test::Fatal; use Test::More 0.88; use Courriel::Builder; ## no critic (Variables::RequireLocalizedPunctuationVars) BEGIN { $ENV{EMAIL_SENDER_TRANSPORT} = 'Test' } use Email::Sender::Simple qw( sendmail ); { Email::Sender::Simple->default_transport->clear_deliveries; my $email = build_email( subject('test send'), from('joe@example.com'), to('jane@example.com'), plain_body('This is the body.'), ); sendmail($email); my @sent = Email::Sender::Simple->default_transport->deliveries; is( scalar @sent, 1, 'sent one email' ); is_deeply( $sent[0]->{envelope}, { from => 'joe@example.com', to => ['jane@example.com'], }, 'got the right envelope for sent email' ); is( $sent[0]->{email}->as_string, $email->as_string, 'sent email had the right body' ); } { Email::Sender::Simple->default_transport->clear_deliveries; my $email = build_email( subject('test send'), from('joe@example.com'), to('jane@example.com'), plain_body('This is the body.'), attach( content => 'Plain text content' ), ); is( exception { sendmail($email) }, undef, 'no exception sending email with attachment via Email::Sender::Simple' ); my @sent = Email::Sender::Simple->default_transport->deliveries; is( scalar @sent, 1, 'sent one email' ); is_deeply( $sent[0]->{envelope}, { from => 'joe@example.com', to => ['jane@example.com'], }, 'got the right envelope for sent email' ); is( $sent[0]->{email}->as_string, $email->as_string, 'sent email had the right body' ); } done_testing(); Courriel-0.40/t/weird-input.t0000644000175000017500000000321512653205401015757 0ustar autarchautarchuse strict; use warnings; use Test::More 0.88; use Test::Requires ( 'Path::Class' => '0', ); use File::Slurp::Tiny qw( read_file ); use Path::Class qw( dir ); use Courriel; my $dir = dir(qw( t data stress-test)); { my $email = _parse( $dir->file('mbox_bad_date_email.txt') ); is( $email->datetime->date, '2000-06-07', 'email with totally bogus Date header still produces correct date for ->datetime' ); } { my $email = _parse( $dir->file('mbox_date_encoded.txt') ); is( $email->datetime->date, '2001-12-24', 'email with totally weirdly encoded Date header still produces correct date for ->datetime' ); } { my $email = _parse( $dir->file('mbox_mime_missing-abuse.txt') ); my $plain = $email->plain_body_part; like( $plain->content, qr/You need to read/, 'found plain body content with broken mime boundary' ); } { my $email = _parse( $dir->file('mbox_mime_virus-alert-headers.txt') ); my $plain = $email->plain_body_part; like( $plain->content, qr/V I R U S A L E R T/, 'found plain body content with no content-type header' ); } { my $email = _parse( $dir->file('mbox_unknown8bit.txt') ); my $plain = $email->plain_body_part; like( $plain->content, qr/dip my toe/, 'plain body part contains expected content' ); } done_testing(); sub _parse { my $file = shift; my $text = read_file( $file->stringify ); my $email = eval { Courriel->parse( text => \$text ) }; BAIL_OUT("Failed to parse $file") if $@ || !$email; return $email; } Courriel-0.40/t/release-pod-no404s.t0000644000175000017500000000076512653205401016744 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } use strict; use warnings; use Test::More; foreach my $env_skip ( qw( SKIP_POD_NO404S AUTOMATED_TESTING ) ){ plan skip_all => "\$ENV{$env_skip} is set, skipping" if $ENV{$env_skip}; } eval "use Test::Pod::No404s"; if ( $@ ) { plan skip_all => 'Test::Pod::No404s required for testing POD'; } else { all_pod_files_ok(); } Courriel-0.40/t/stress.t0000644000175000017500000000077612653205401015044 0ustar autarchautarchuse strict; use warnings; use Test::Fatal; use Test::More 0.88; use Test::Requires ( 'Path::Class' => '0', ); use File::Slurp::Tiny qw( read_file ); use Path::Class qw( dir ); use Courriel; my $dir = dir(qw( t data stress-test )); while ( my $file = $dir->next ) { next if $file->is_dir; my $text = read_file( $file->stringify ); is( exception { Courriel->parse( text => $text ) }, undef, 'no exception from parsing ' . $file->basename ); } done_testing(); Courriel-0.40/t/00-report-prereqs.t0000644000175000017500000001273112653205401016722 0ustar autarchautarch#!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: Courriel-0.40/t/release-portability.t0000644000175000017500000000053512653205401017472 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } use strict; use warnings; use Test::More; eval 'use Test::Portability::Files'; plan skip_all => 'Test::Portability::Files required for testing portability' if $@; run_tests(); Courriel-0.40/t/author-mojibake.t0000644000175000017500000000040212653205401016564 0ustar autarchautarch#!perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } use strict; use warnings qw(all); use Test::More; use Test::Mojibake; all_files_encoding_ok(); Courriel-0.40/t/release-pod-coverage.t0000644000175000017500000000305412653205401017502 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } # This file was automatically generated by Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable. use Test::Pod::Coverage 1.08; use Test::More 0.88; BEGIN { if ( $] <= 5.008008 ) { plan skip_all => 'These tests require Pod::Coverage::TrustPod, which only works with Perl 5.8.9+'; } } use Pod::Coverage::TrustPod; { package My::Coverage; use parent 'Pod::Coverage::Moose', 'Pod::Coverage::TrustPod'; $INC{'My/Coverage.pm'} = 1; } my %skip = map { $_ => 1 } qw( Courriel::ContentType Courriel::Disposition Courriel::Helpers Courriel::Role::HeaderWithAttributes Courriel::Role::Part Courriel::Role::Streams Courriel::Types Courriel::Types::Internal Email::Abstract::Courriel ); my @modules; for my $module ( all_modules() ) { next if $skip{$module}; push @modules, $module; } plan skip_all => 'All the modules we found were excluded from POD coverage test.' unless @modules; plan tests => scalar @modules; my %trustme = ( 'Courriel' => [ qr/^replace_body$/ ] ); my @also_private; for my $module ( sort @modules ) { pod_coverage_ok( $module, { coverage_class => 'My::Coverage', also_private => \@also_private, trustme => $trustme{$module} || [], }, "pod coverage for $module" ); } done_testing(); Courriel-0.40/t/release-tidyall.t0000644000175000017500000000050712653205401016571 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } # This file was automatically generated by Dist::Zilla::Plugin::Test::TidyAll use Test::Code::TidyAll 0.24; use Test::More 0.88; tidyall_ok(); done_testing(); Courriel-0.40/t/Part-Single.t0000644000175000017500000001536012653205401015641 0ustar autarchautarchuse strict; use warnings; use utf8; use Test::More 0.88; use Courriel::Header::ContentType; use Courriel::Header::Disposition; use Courriel::Headers; use Courriel::Part::Single; use Email::MIME::Encodings; use Encode qw( encode ); use MIME::Base64 qw( encode_base64 ); use Scalar::Util qw( blessed ); my $crlf = "\x0d\x0a"; { my $body = <<'EOF'; Some plain text in a body. EOF $body =~ s/\n/$crlf/g; my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', ), encoding => '8bit', encoded_content => \$body, ); is( $part->content(), $body, 'content matches original body' ); is( ${ $part->content_ref() }, $body, 'content_ref matches original body' ); } { my $body = <<'EOF'; Some plain text in a body. EOF $body =~ s/\n/$crlf/g; my $encoded = Email::MIME::Encodings::encode( 'base64', $body ); my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', ), encoding => 'base64', encoded_content => \$encoded, ); is( $part->content(), $body, 'content matches original body - base64 encoding on part' ); } { my $body = <<'EOF'; Some plain text in a body. EOF $body =~ s/\n/$crlf/g; my $encoded = Email::MIME::Encodings::encode( 'quoted-printable', $body ); my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', ), encoding => 'quoted-printable', encoded_content => \$encoded, ); is( $part->content(), $body, 'content matches original body - qp encoding on part' ); } { my $body = <<'EOF'; Some plain text in a body. EOF $body =~ s/\n/$crlf/g; my $encoded = Email::MIME::Encodings::encode( 'base64', $body ); my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', ), encoding => 'base64', content => \$body, ); is_deeply( [ map { $_->value() } $part->headers()->get('Content-Transfer-Encoding') ], ['base64'], 'Content-Transfer-Encoding is always set in part headers' ); is( $part->encoded_content(), $encoded, 'encoded_content matches encoded version of content' ); is( ${ $part->encoded_content_ref() }, $encoded, 'encoded_content_ref matches encoded version of content' ); } { my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'image/jpeg' ), disposition => Courriel::Header::Disposition->new( disposition => 'attachment', attributes => { filename => 'foo.jpg' }, ), encoded_content => 'foo', ); my $new_h = Courriel::Headers->new(); $part->_set_headers($new_h); is_deeply( _headers_as_arrayref($new_h), [ 'Content-Type' => 'image/jpeg', 'Content-Disposition' => q{attachment; filename=foo.jpg}, 'Content-Transfer-Encoding' => '8bit', ], 'content type is updated when headers are set' ); } { my $orig_content = "foo \x{4E00} bar"; my $encoded = encode_base64( encode( 'UTF-8', $orig_content ) ); my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', attributes => { charset => 'UTF-8' }, ), encoding => 'base64', encoded_content => $encoded, ); is( $part->content(), $orig_content, 'decoded content matches original content', ); } { my $orig_content = "foo \x{4E00} bar"; my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', attributes => { charset => 'UTF-8' }, ), encoding => 'base64', content => $orig_content, ); is( $part->encoded_content(), encode_base64( encode( 'UTF-8', $orig_content ), $Courriel::Helpers::CRLF ), 'encoded content matches expected when original contains UTF-8', ); } { my $orig_content = "foo \x{4E00} bar"; my $encoded = encode( 'UTF-8', $orig_content ); my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', attributes => { charset => 'UTF-8' }, ), encoding => '8bit', encoded_content => $encoded, ); is( $part->content(), $orig_content, 'decoded content matches original content (8bit transfer encoding)', ); } { my $orig_content = "foo \x{4E00} bar"; my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'text/plain', attributes => { charset => 'UTF-8' }, ), encoding => '8bit', content => $orig_content, ); is( $part->encoded_content(), encode( 'UTF-8', $orig_content ), 'encoded content should contain raw bytes', ); } { my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'image/jpeg' ), encoded_content => 'foo', ); ok( !Encode::is_utf8( $part->content() ), 'part is not decoded as utf8 when content-type has no charset' ); } { my $part = Courriel::Part::Single->new( headers => Courriel::Headers->new(), content_type => Courriel::Header::ContentType->new( mime_type => 'image/jpeg' ), content => 'foo', ); ok( defined $part->encoded_content(), 'can build encoded content for binary content' ); } done_testing(); sub _headers_as_arrayref { my $h = shift; return [ map { blessed($_) ? $_->value() : $_ } $h->headers() ]; } Courriel-0.40/t/Headers.t0000644000175000017500000005141612653205401015071 0ustar autarchautarchuse strict; use warnings; use utf8; use Test::Differences; use Test::Fatal; use Test::More 0.88; use Courriel::Builder; use Courriel::Headers; use Courriel::Helpers; use Scalar::Util qw( blessed ); ## no critic (InputOutput::RequireCheckedSyscalls) binmode $_, ':encoding(UTF-8)' for map { Test::Builder->new->$_ } qw( output failure_output todo_output ); ## use critic my $crlf = $Courriel::Helpers::CRLF; my $hola = "\x{00A1}Hola, se\x{00F1}or!"; { my $h = Courriel::Headers->new; is_deeply( _headers_as_arrayref($h), [], 'can make an empty headers object' ); $h->add( Subject => 'Foo bar' ); is_deeply( _headers_as_arrayref($h), [ Subject => 'Foo bar' ], 'added Subject header' ); is_deeply( [ map { $_->value } $h->get('subject') ], ['Foo bar'], 'got subject header (name is case-insensitive)' ); is_deeply( [ $h->get_values('subject') ], ['Foo bar'], 'got subject header with get_values method' ); is_deeply( [ $h->get_values('no-such-header') ], [], 'get_values returns empty list for nonexistent header' ); $h->add( 'Content-Type' => 'text/plain' ); is_deeply( _headers_as_arrayref($h), [ Subject => 'Foo bar', 'Content-Type' => 'text/plain', ], 'added Content-Type header' ); $h->add( 'Subject' => 'Part 2' ); is_deeply( _headers_as_arrayref($h), [ Subject => 'Foo bar', Subject => 'Part 2', 'Content-Type' => 'text/plain', ], 'added another subject header and it shows up after first subject' ); is_deeply( [ map { $_->value } $h->get('subject') ], [ 'Foo bar', 'Part 2' ], 'got all subject headers' ); my $string = <<'EOF'; Subject: Foo bar Subject: Part 2 Content-Type: text/plain EOF $string =~ s/\n/$crlf/g; is( $h->as_string, $string, 'got expected header string' ); $h->remove('Subject'); is_deeply( _headers_as_arrayref($h), [ 'Content-Type' => 'text/plain', ], 'removed Subject headers' ); $string = <<'EOF'; Content-Type: text/plain EOF $string =~ s/\n/$crlf/g; is( $h->as_string, $string, 'got expected header string' ); } { my $headers = <<'EOF'; Foo: 1 Bar: 2 Baz: 3 EOF $headers =~ s/\n/$crlf/g; my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Foo => 1, Bar => 2, Baz => 3, ], 'parsed simple headers' ); } { my $h = Courriel::Headers->new; $h->add( Subject => ' test' ); is( $h->as_string, "Subject: test\r\n", 'Headers prefixed by whitespace are not blank' ); } { my ( $val, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; test1=simple; test2="quoted string"}); is( $val, 'foo/bar', 'got correct value for header with attributes' ); is_deeply( _attributes_as_hashref($attrs), { test1 => 'simple', test2 => 'quoted string', }, 'parsed attributes with simple values correctly' ); } { my ( $val, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; test1='single'; test2="double"}); is( $val, 'foo/bar', 'got correct value for header with attributes' ); is_deeply( _attributes_as_hashref($attrs), { test1 => 'single', test2 => 'double', }, 'parsed attributes with simple values correctly' ); } { my ( $val, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; test1="has \\"escaped \\vals"; test2="contains ' single \\quote"} ); is( $val, 'foo/bar', 'got correct value for header with attributes' ); is_deeply( _attributes_as_hashref($attrs), { test1 => q{has "escaped vals}, test2 => q{contains ' single quote}, }, 'parsed attributes with weird values correctly' ); } { my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; val*0=foo; val*1=bar}); is_deeply( _attributes_as_hashref($attrs), { val => 'foobar', }, 'parsed attribute continuation correctly' ); } { my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; val*0="foo bar"; val*1=" baz buz"}); is_deeply( _attributes_as_hashref($attrs), { val => 'foo bar baz buz', }, 'parsed quoted attribute continuation correctly' ); } { my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; val*0=foo; val*1=" bar"}); is_deeply( _attributes_as_hashref($attrs), { val => 'foo bar', }, 'parsed partially quoted attribute continuation correctly' ); } { my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; val*=UTF-8'en-gb'Some%20text%20with%20encoding}); my $attr = $attrs->{val}; is_deeply( [ $attr->value, $attr->charset, $attr->language, ], [ 'Some text with encoding', 'UTF-8', 'en-gb', ], 'parsed encoded attribute correctly' ); } { my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; val*=UTF-8''%e4%b8%80%e4%b8%80}); my $attr = $attrs->{val}; is_deeply( [ $attr->value, $attr->charset, $attr->language, ], [ "\x{4E00}\x{4E00}", 'UTF-8', undef, ], 'parsed encoded chinese attribute correctly, with no language' ); } { my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{text/plain; name*=utf-8''Iv%C3%A1n%20F.txt}); my $attr = $attrs->{name}; is_deeply( [ $attr->value, $attr->charset, $attr->language, ], [ "Iv\x{00E1}n F.txt", 'UTF-8', undef, ], 'parsed encoded European attribute correctly, with no language' ); } { my $extended = <<'EOF'; foo/bar; val*0*=UTF-8'en-gb'Some%20text%20with%20encoding; val*1=" but now it's quoted and then "; val*2=simple; val*3*=%20then%20hex%20simple; EOF my ( undef, $attrs ) = Courriel::Helpers::parse_header_with_attributes($extended); my $attr = $attrs->{val}; is_deeply( [ $attr->value, $attr->charset, $attr->language, ], [ q{Some text with encoding but now it's quoted and then simple then hex simple}, 'UTF-8', 'en-gb', ], 'parsed encoded attribute with continuations correctly' ); } { my ( $value, $attrs ); is( exception { ( $value, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar;}); }, undef, 'no exception for trailing semi-colon on header that can have attributes' ); is_deeply( [ $value, $attrs ], [ 'foo/bar', {} ], 'handled trailing semi-colon correctly (parsed as having no attributes' ); } { my ( $value, $attrs ); is( exception { ( $value, $attrs ) = Courriel::Helpers::parse_header_with_attributes( q{foo/bar; bad}); }, undef, 'no exception for bad attribute syntax' ); is_deeply( [ $value, $attrs ], [ 'foo/bar', {} ], 'handled bad attribute syntax correctly' ); } { my $headers = <<'EOF'; Foo: 1 Bar: 2 Baz: 3 Bar: 4 EOF $headers =~ s/\n/$crlf/g; my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Foo => 1, Bar => 2, Baz => 3, Bar => 4, ], 'parsed headers with repeated value' ); my $string = <<'EOF'; Foo: 1 Baz: 3 EOF $string =~ s/\n/$crlf/g; is( $h->as_string( skip => ['Bar'] ), $string, 'got expected header string (skipping Bar headers)' ); } { my $headers = <<'EOF'; Foo: hello world Bar: 2 Baz: 3 EOF $headers =~ s/\n/$crlf/g; my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Foo => 'hello world', Bar => 2, Baz => 3, ], 'parsed headers with continuation line' ); } { my $headers = <<'EOF'; Subject: =?iso-8859-1?Q?=A1Hola,_se=F1or!?= Bar: 2 Baz: 3 EOF my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Subject => $hola, Bar => 2, Baz => 3, ], 'parsed headers with MIME encoded value' ); my $string = <<'EOF'; Subject: =?UTF-8?B?wqFIb2xhLCA=?= =?UTF-8?B?c2XDsW9yIQ==?= Bar: 2 Baz: 3 EOF $string =~ s/\n/$crlf/g; is( $h->as_string, $string, 'got expected header string (encoded utf8 values)' ); my $h2 = Courriel::Headers->parse( text => $h->as_string ); is( $h2->get_values('Subject'), $h->get_values('Subject'), 'round trip encoding of header with utf8 value' ); } { my $headers = <<'EOF'; Subject: =?iso-8859-1?Q?=A1Hola,_se=F1or!?= =?utf-8?Q?=c2=a1Hola=2c_se=c3=b1or!?= EOF my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Subject => $hola . $hola, ], 'parsed headers with two MIME encoded words correctly (ignore space in between them)' ); } { my $headers = <<'EOF'; Subject: =?iso-8859-1?Q?=A1Hola,_se=F1or!?= not encoded EOF my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Subject => $hola . ' not encoded' ], 'parsed headers with MIME encoded word followed by unencoded text' ); } { my $headers = <<'EOF'; Subject: =?iso-8859-1?Q?=A1Hola,_se=F1or!?= not encoded EOF my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Subject => $hola . ' not encoded' ], 'parsed headers with MIME encoded word followed by three spaces then unencoded text' ); } { my $headers = <<'EOF'; Subject: not encoded =?iso-8859-1?Q?=A1Hola,_se=F1or!?= EOF my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Subject => 'not encoded ' . $hola ], 'parsed headers with unencoded text followed by MIME encoded word' ); } { my $headers = <<'EOF'; Subject: not encoded =?iso-8859-1?Q?=A1Hola,_se=F1or!?= EOF my $h = Courriel::Headers->parse( text => \$headers ); is_deeply( _headers_as_arrayref($h), [ Subject => 'not encoded ' . $hola ], 'parsed headers with unencoded text followed by three spaces then MIME encoded word' ); } { my $chinese = "\x{4E00}" x 100; my $h = Courriel::Headers->new( headers => [ Subject => $chinese ] ); my $string = <<'EOF'; Subject: =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= =?UTF-8?B?5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA5LiA?= EOF $string =~ s/\n/$crlf/g; is( $h->as_string, $string, 'Chinese subject is encoded properly' ); is_deeply( _headers_as_arrayref( Courriel::Headers->parse( text => $h->as_string ) ), [ Subject => $chinese ], 'Chinese subject header round trips properly' ); } { my $headers = <<'EOF'; Subject: has three spaces EOF my $h = Courriel::Headers->parse( text => \$headers ); like( $h->as_string, qr/\QSubject: has three spaces/, 'original spacing in header value is preserved when stringified' ); } { my $header = Courriel::Header->new( name => 'To', value => q{Ďāᶌȩ ȒȯƖŝķẏ }, ); like( $header->as_string, qr/ \Q?UTF-8?B?\E \S+ \s+ \Q\E /x, 'email address is not encoded but unicode content before it is when address has no UTF-8' ); } { my $header = Courriel::Header->new( name => 'To', value => q{Ďāᶌȩ ȒȯƖŝķẏ <āutarch@urth.org>}, ); like( $header->as_string, qr/ \Q?UTF-8?B?\E \S+ \s+ \Q<āutarch\E\@\Qurth.org>\E /x, 'email address is not encoded but unicode content before it is even when address has UTF-8' ); } { my $header = Courriel::Header->new( name => 'To', value => q{Ďāᶌȩ ȒȯƖŝķẏ <āutarch@urth.org>, "Joe Smith" }, ); like( $header->as_string, qr/ \Q?UTF-8?B?\E \S+ \s+ \Q<āutarch\E\@\Qurth.org>\E \Q, "Joe Smith" \E /x, 'multiple addresses in To header are handled correctly when encoding' ); } { my $value = q{from Ďāᶌȩ ȒȯƖŝķẏ}; my $header = Courriel::Header->new( name => 'Received', value => $value, ); like( $header->as_string, qr/\Q$value/, 'Received header is not encoded' ); } { my $real = <<'EOF'; Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on urth.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: autarch@urth.org Delivered-To: autarch@urth.org Received: from localhost (localhost.localdomain [127.0.0.1]) by urth.org (Postfix) with ESMTP id BDC8B171751 for ; Sat, 28 May 2011 12:54:18 -0500 (CDT) X-Virus-Scanned: Debian amavisd-new at urth.org Received: from urth.org ([127.0.0.1]) by localhost (urth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YITg-uxEcP1N for ; Sat, 28 May 2011 12:54:10 -0500 (CDT) Received: from x1.develooper.com (x1.develooper.com [207.171.7.70]) by urth.org (Postfix) with SMTP id D312D1707FC for ; Sat, 28 May 2011 12:54:09 -0500 (CDT) Received: (qmail 26426 invoked by uid 225); 28 May 2011 17:54:08 -0000 Delivered-To: DROLSKY@cpan.org Received: (qmail 26422 invoked by uid 103); 28 May 2011 17:54:08 -0000 Received: from x16.dev (10.0.100.26) by x1.dev with QMQP; 28 May 2011 17:54:08 -0000 Received: from cpan.rt.develooper.com (HELO cpan.rt.develooper.com) (207.171.7.181) by 16.mx.develooper.com (qpsmtpd/0.80/v0.80-19-gf52d165) with ESMTP; Sat, 28 May 2011 10:54:05 -0700 Received: by cpan.rt.develooper.com (Postfix, from userid 536) id 7E07B704A; Sat, 28 May 2011 10:54:03 -0700 (PDT) Precedence: normal Subject: [rt.cpan.org #68527] [PATCH] add a 'end_of_life' optional deprecation parameter From: "Yanick Champoux via RT" Reply-To: bug-Package-DeprecationManager@rt.cpan.org In-Reply-To: <1306605315-23916-1-git-send-email-yanick@cpan.org> References: <1306605315-23916-1-git-send-email-yanick@cpan.org> Message-ID: X-RT-Loop-Prevention: rt.cpan.org RT-Ticket: rt.cpan.org #68527 Managed-by: RT 3.8.HEAD (http://www.bestpractical.com/rt/) RT-Originator: yanick@cpan.org MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" X-RT-Original-Encoding: utf-8 Date: Sat, 28 May 2011 13:54:03 -0400 To: undisclosed-recipients:; EOF $real =~ s/\n/$crlf/g; my $h = Courriel::Headers->parse( text => \$real ); is_deeply( [ map { $_->value } $h->get('Precedence') ], ['normal'], 'Precendence header was parsed properly' ); is_deeply( [ map { $_->value } $h->get('Message-ID') ], [''], 'Message-ID header was parsed properly' ); is_deeply( [ map { $_->value } $h->get('X-Spam-Level') ], [q{}], 'X-Spam-Level (empty header) was parsed properly', ); is_deeply( [ map { $_->value } $h->get('X-Spam-Status') ], [ 'No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD autolearn=ham version=3.3.1' ], 'X-Spam-Status header was parsed properly' ); my $expect = <<'EOF'; Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on urth.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: autarch@urth.org Delivered-To: autarch@urth.org Received: from localhost (localhost.localdomain [127.0.0.1]) by urth.org (Postfix) with ESMTP id BDC8B171751 for ; Sat, 28 May 2011 12:54:18 -0500 (CDT) X-Virus-Scanned: Debian amavisd-new at urth.org Received: from urth.org ([127.0.0.1]) by localhost (urth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YITg-uxEcP1N for ; Sat, 28 May 2011 12:54:10 -0500 (CDT) Received: from x1.develooper.com (x1.develooper.com [207.171.7.70]) by urth.org (Postfix) with SMTP id D312D1707FC for ; Sat, 28 May 2011 12:54:09 -0500 (CDT) Received: (qmail 26426 invoked by uid 225); 28 May 2011 17:54:08 -0000 Delivered-To: DROLSKY@cpan.org Received: (qmail 26422 invoked by uid 103); 28 May 2011 17:54:08 -0000 Received: from x16.dev (10.0.100.26) by x1.dev with QMQP; 28 May 2011 17:54:08 -0000 Received: from cpan.rt.develooper.com (HELO cpan.rt.develooper.com) (207.171.7.181) by 16.mx.develooper.com (qpsmtpd/0.80/v0.80-19-gf52d165) with ESMTP; Sat, 28 May 2011 10:54:05 -0700 Received: by cpan.rt.develooper.com (Postfix, from userid 536) id 7E07B704A; Sat, 28 May 2011 10:54:03 -0700 (PDT) Precedence: normal Subject: [rt.cpan.org #68527] [PATCH] add a 'end_of_life' optional deprecation parameter From: "Yanick Champoux via RT" Reply-To: bug-Package-DeprecationManager@rt.cpan.org In-Reply-To: <1306605315-23916-1-git-send-email-yanick@cpan.org> References: <1306605315-23916-1-git-send-email-yanick@cpan.org> Message-ID: X-RT-Loop-Prevention: rt.cpan.org RT-Ticket: rt.cpan.org #68527 Managed-by: RT 3.8.HEAD (http://www.bestpractical.com/rt/) RT-Originator: yanick@cpan.org MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" X-RT-Original-Encoding: utf-8 Date: Sat, 28 May 2011 13:54:03 -0400 To: undisclosed-recipients:; EOF $expect =~ s/\n/$crlf/g; eq_or_diff( $h->as_string, $expect, 'output for real headers matches original headers, but with more correct folding' ); } { my $bad = <<'EOF'; Ok: 1 : bad EOF like( exception { Courriel::Headers->parse( text => \$bad, ); }, qr/Found an unparseable .+ at line 2/, 'exception on bad headers' ); } { my $bad = <<'EOF'; Ok: 1 Ok: 2 Not ok Ok: 4 EOF like( Courriel::Headers->parse( text => \$bad, )->as_string, qr/Ok: 2Not ok/, 'handle arbitrary newline without an exception' ); } { # Second line has spaces my $bad = <<'EOF'; Ok: 1 Ok: 2 EOF like( Courriel::Headers->parse( text => \$bad, )->as_string, qr/Ok: 1/, 'handle empty continuation line without an exception' ); } done_testing(); sub _headers_as_arrayref { my $h = shift; return [ map { blessed($_) ? $_->value : $_ } $h->headers ]; } sub _attributes_as_hashref { my $attrs = shift; return { map { $_ => $attrs->{$_}->value } keys %{$attrs} }; } Courriel-0.40/t/author-pod-syntax.t0000644000175000017500000000050312653205401017113 0ustar autarchautarch#!perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } # This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. use strict; use warnings; use Test::More; use Test::Pod 1.41; all_pod_files_ok(); Courriel-0.40/t/Courriel.t0000644000175000017500000005536612653205401015312 0ustar autarchautarchuse strict; use warnings; use Test::Differences; use Test::Fatal; use Test::More 0.88; use Courriel; use Courriel::Builder; use Courriel::Helpers; use Encode qw( encode is_utf8 ); use Scalar::Util qw( blessed ); ## no critic (InputOutput::RequireCheckedSyscalls) binmode $_, ':encoding(UTF-8)' for map { Test::Builder->new->$_ } qw( output failure_output todo_output ); ## use critic my $crlf = $Courriel::Helpers::CRLF; { my $text = <<'EOF'; Subject: This is the body EOF my $email = Courriel->parse( text => \$text ); ok( defined $email->subject, 'empty subject is defined' ); } { my $text = <<'EOF'; Subject: Foo This is the body EOF my $email = Courriel->parse( text => \$text ); is( $email->subject, 'Foo', 'got the right subject' ); is( $email->part_count, 1, 'email has one part' ); is_deeply( _headers_as_arrayref($email), [ Subject => 'Foo', 'Content-Transfer-Encoding' => '8bit', ], 'headers were parsed correctly' ); my ($part) = $email->parts; is( $part->content_type->mime_type, 'text/plain', 'email with no content type defaults to text/plain' ); is( $part->content_type->charset, undef, 'email with no charset does not get a default charset' ); is( $part->encoding, '8bit', 'email with no encoding defaults to 8bit' ); is_deeply( $part->content, $text, 'content for part was parsed correctly' ); isa_ok( $email->datetime, 'DateTime' ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:22 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: multipart/alternative; boundary=20cf3071cfd06272ae04a46c9306 --20cf3071cfd06272ae04a46c9306 Content-Type: text/plain; charset=ISO-8859-1 Content-Disposition: inline This is a test email. It has some *bold* text. --20cf3071cfd06272ae04a46c9306 Content-Type: text/html; charset=ISO-8859-1 Content-Disposition: inline This is a test email.

It has some bold text.

--20cf3071cfd06272ae04a46c9306-- EOF my $original = $text; my $email = Courriel->parse( text => \$text ); is( $email->part_count, 2, 'email has two parts' ); is_deeply( _headers_as_arrayref($email), [ 'MIME-Version' => '1.0', 'Date' => 'Sun, 29 May 2011 11:22:22 -0500', 'Message-ID' => '', 'Subject' => 'Testing', 'From' => 'Dave Rolsky ', 'To' => 'Dave Rolsky ', 'Content-Type' => 'multipart/alternative; boundary=20cf3071cfd06272ae04a46c9306', ], 'headers were parsed correctly' ); my @parts = $email->parts; is( $parts[0]->content_type->mime_type, 'text/plain', 'first part is text/plain' ); my $plain = <<'EOF'; This is a test email. It has some *bold* text. EOF _compare_text( $parts[0]->content, $plain, 'plain content is as expected', ); is( $parts[1]->content_type->mime_type, 'text/html', 'second part is text/html' ); my $html = <<'EOF'; This is a test email.

It has some bold text.

EOF _compare_text( $parts[1]->content, $html, 'html content is as expected', ); is( $email->plain_body_part, $parts[0], 'found plain body part' ); is( $email->html_body_part, $parts[1], 'found html body part' ); is( $email->datetime->strftime('%{datetime} %Z'), DateTime->new( year => 2011, month => 5, day => 29, hour => 11, minute => 22, second => 22, time_zone => '-0500', )->set_time_zone('UTC')->strftime('%{datetime} %Z'), 'email datetime is parsed from Date header correctly' ); is_deeply( [ sort map { $_->address } $email->recipients ], ['autarch@urth.org'], 'recipients includes all expected addresses', ); my $string = $original; $string =~ s/^.+?\n//; # remove mbox marker line $string =~ s/(\n\nThis is a test email)/\nContent-Transfer-Encoding: 8bit$1/g; $string =~ s/\n/$crlf/g; # The header formatter adds quotes around phrases in email addresses. $string =~ s/: Dave Rolsky/: "Dave Rolsky"/g; _compare_text( $email->as_string, $string, 'as_string output matches original email' ); } { my $text = <<'EOF'; Received: from urth.org ([127.0.0.1]) by localhost (urth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id LdGtFbrMk+AE for ; Fri, 27 May 2011 11:24:48 -0500 (CDT) Received: from exploreveg.org (exploreveg.org [173.11.48.51]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by urth.org (Postfix) with ESMTPS id 08B6A171735 for ; Fri, 27 May 2011 11:24:44 -0500 (CDT) MIME-Version: 1.0 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: text/plain Whatever EOF my $email = Courriel->parse( text => \$text ); is( $email->datetime->strftime('%{datetime} %Z'), DateTime->new( year => 2011, month => 5, day => 27, hour => 11, minute => 24, second => 44, time_zone => '-0500', )->set_time_zone('UTC')->strftime('%{datetime} %Z'), 'email datetime is parsed from Received header correctly' ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Resent-Date: Sun, 29 May 2011 11:22:23 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: text/plain Whatever EOF my $email = Courriel->parse( text => \$text ); is( $email->datetime->strftime('%{datetime} %Z'), DateTime->new( year => 2011, month => 5, day => 29, hour => 11, minute => 22, second => 23, time_zone => '-0500', )->set_time_zone('UTC')->strftime('%{datetime} %Z'), 'email datetime is parsed from Resent-Date header correctly' ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Resent-Date: Sun, 29 May 2011 11:22:23 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: text/plain Content-Transfer-Encoding: base64 QmxhbmRpdGlpcyBhbWV0IHF1YWVyYXQgb21uaXMgdW5kZS4gTW9sbGl0aWEgb21uaXMgcXVhcyBp bnZlbnRvcmUgZG9sb3J1bSBxdWkgZXQgYXNwZXJpb3Jlcy4gRmFjaWxpcyBhdCBhY2N1c2FtdXMg bWludXMgdmVyaXRhdGlzIGltcGVkaXQgZG9sb3IuIFZlbGl0IG9tbmlzIG9mZmljaWEgdXQgdm9s dXB0YXRlbSB0ZW1wb3JlIHZvbHVwdGF0dW0gc2l0IGFjY3VzYW50aXVtLiBQZXJmZXJlbmRpcyBl eHBsaWNhYm8gbmloaWwgc3VudCBzZWQuDQoNClJlbSBkb2xvcmUgcmVwZWxsZW5kdXMgbW9kaSBu aWhpbCBkb2xvcmVtIGhhcnVtIHZvbHVwdGFzIG5vbi4gRXNzZSBzaW50IGV4ZXJjaXRhdGlvbmVt IHNpbWlsaXF1ZSBhbGlhcyBldC4gRWl1cyBhdXRlbSBhbGlxdWlkIGNvbnNlcXVhdHVyIG5hbSBo YXJ1bSBmdWdpYXQu EOF my $email = Courriel->parse( text => \$text ); is( $email->plain_body_part->encoding, 'base64', 'encoding is set from parsed header', ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:23 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky , John Smith CC: "Whatever goes here" , Jill Smith Content-Type: text/plain Whatever EOF my $email = Courriel->parse( text => \$text ); is( $email->from->address, 'autarch@gmail.com', 'from returns the right address' ); is_deeply( [ sort map { $_->address } $email->to ], [ 'autarch@urth.org', 'foo@example.com', ], 'to includes all expected addresses', ); is_deeply( [ sort map { $_->address } $email->cc ], [ 'jill@example.com', 'what@example.com' ], 'cc includes all expected addresses', ); is_deeply( [ sort map { $_->address } $email->recipients ], [ 'autarch@urth.org', 'foo@example.com', 'jill@example.com', 'what@example.com' ], 'recipients includes all expected addresses', ); is_deeply( [ sort map { $_->address } $email->participants ], [ 'autarch@gmail.com', 'autarch@urth.org', 'foo@example.com', 'jill@example.com', 'what@example.com' ], 'participants includes all expected addresses', ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:23 -0500 Message-ID: Subject: Testing Content-Type: text/plain Whatever EOF my $email = Courriel->parse( text => \$text ); is( $email->from, undef, 'from returns undef' ); is_deeply( [ map { $_->address } $email->to ], [], 'to return an empty array ref', ); is_deeply( [ map { $_->address } $email->cc ], [], 'cc return an empty array ref', ); is_deeply( [ map { $_->address } $email->participants ], [], 'participants return an empty array ref', ); is_deeply( [ map { $_->address } $email->recipients ], [], 'recipients return an empty array ref', ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:22 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: multipart/alternative; boundary=20cf3071cfd06272ae04a46c9306 --20cf3071cfd06272ae04a46c9306 Content-Type: text/plain; charset=ISO-8859-1 This is a test email. It has some *bold* text. --20cf3071cfd06272ae04a46c9306 Content-Type: text/html; charset=ISO-8859-1 Content-Disposition: attachment; filename="html-attachment.html"; creation-date="Sun, 29 May 2011 11:01:02 -0500"; modification-date="Sun, 29 May 2011 11:01:03 -0500"; read-date="Sun, 29 May 2011 11:01:04 -0500" This is a test email.

It has some bold text.

--20cf3071cfd06272ae04a46c9306-- EOF my $email = Courriel->parse( text => \$text ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); ok( $attachment, 'found attachment' ); is( $attachment->filename, 'html-attachment.html', 'got filename from content disposition' ); is( $attachment->disposition->creation_datetime->strftime( '%{datetime} %Z'), DateTime->new( year => 2011, month => 5, day => 29, hour => 11, minute => 1, second => 2, time_zone => '-0500', )->set_time_zone('UTC')->strftime('%{datetime} %Z'), 'got creation_datetime from content disposition' ); is( $attachment->disposition->modification_datetime->strftime( '%{datetime} %Z'), DateTime->new( year => 2011, month => 5, day => 29, hour => 11, minute => 1, second => 3, time_zone => '-0500', )->set_time_zone('UTC')->strftime('%{datetime} %Z'), 'got modification_datetime from content disposition' ); is( $attachment->disposition->read_datetime->strftime('%{datetime} %Z'), DateTime->new( year => 2011, month => 5, day => 29, hour => 11, minute => 1, second => 4, time_zone => '-0500', )->set_time_zone('UTC')->strftime('%{datetime} %Z'), 'got read_datetime from content disposition' ); } { my $email = build_email( plain_body('foo'), attach( content => 'some content' ), attach( content => 'some more content' ), ); is( $email->content_type->mime_type, 'multipart/mixed', 'email is multipart/mixed' ); my @parts = $email->all_parts_matching( sub {1} ); is( scalar @parts, 4, 'email has 4 parts' ); my $clone = $email->clone_without_attachments; is( $clone->content_type->mime_type, 'text/plain', 'after clone type is text/plain' ); @parts = $clone->all_parts_matching( sub {1} ); is( scalar @parts, 1, 'email has 1 part after clone' ); is( $parts[0]->encoding, 'base64', 'part is base64 encoded' ); is_deeply( [ map { $_->value } $parts[0]->headers->get('Content-Transfer-Encoding') ], ['base64'], 'Content-Transfer encoding is base64' ); } { my $email = build_email( plain_body('foo'), html_body('bar'), attach( content => 'some content' ), attach( content => 'some more content' ), ); is( $email->content_type->mime_type, 'multipart/mixed', 'email is multipart/mixed' ); my @parts = $email->all_parts_matching( sub {1} ); is( scalar @parts, 6, 'email has 6 parts' ); my $clone = $email->clone_without_attachments; is( $clone->content_type->mime_type, 'multipart/alternative', 'after clone type is multipart/alternative' ); @parts = $clone->all_parts_matching( sub {1} ); is( scalar @parts, 3, 'email has 3 parts after clone' ); my $plain = $clone->plain_body_part; is( $plain->encoding, 'base64', 'plain part is base64 encoded' ); is_deeply( [ map { $_->value } $plain->headers->get('Content-Transfer-Encoding') ], ['base64'], 'plain part Content-Transfer encoding is base64' ); my $html = $clone->html_body_part; is( $html->encoding, 'base64', 'html part is base64 encoded' ); is_deeply( [ map { $_->value } $html->headers->get('Content-Transfer-Encoding') ], ['base64'], 'html part Content-Transfer encoding is base64' ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:22 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: multipart/alternative; boundary=20cf3071cfd06272ae04a46c9306 --20cf3071cfd06272ae04a46c9306 Content-Type: TEXT/PLAIN; charset=ISO-8859-1 Content-Disposition: inline This is a test email. It has some *bold* text. --20cf3071cfd06272ae04a46c9306 Content-Type: tEXT/htML; charset=ISO-8859-1 Content-Disposition: inline This is a test email.

It has some bold text.

--20cf3071cfd06272ae04a46c9306-- EOF my $email = Courriel->parse( text => \$text ); ok( $email->plain_body_part, 'ignored case of mime type when finding plain body part' ); ok( $email->html_body_part, 'ignored case of mime type when finding html body part' ); is( $email->plain_body_part->content_type->mime_type, 'text/plain', 'ContentType->mime_type method returns all lower case value' ); is( $email->plain_body_part->content_type->as_header_value, 'TEXT/PLAIN; charset=ISO-8859-1', 'header value preserves original casing of mime type' ); } { my $text = <<'EOF'; From: Dave Rolsky MIME-Version: 1.0 Resent-Date: Sun, 29 May 2011 11:22:23 -0500 Message-ID: Subject: Testing To: Dave Rolsky Content-Type: text/plain foo EOF my $email = Courriel->parse( text => \$text ); is( $email->headers->get('From')->value, 'Dave Rolsky ', 'From header at beginning of mail is not stripped by mbox separator removal', ); } { my $text = <<'EOF'; From blah blah blah MIME-Version: 1.0 Resent-Date: Sun, 29 May 2011 11:22:23 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: text/plain foo EOF is( exception { Courriel->parse( text => \$text ); }, undef, 'mbox separator which contains a newline is parser correctly' ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:22 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: multipart/alternative; boundary=20cf3071cfd06272ae04a46c9306 WTF, just a single part. EOF my $email; is( exception { $email = Courriel->parse( text => \$text ); }, undef, 'multipart mime type with single part body still parses' ); is( $email->part_count, 1, 'email has one part' ); } { my $text = <<"EOF"; Subject: Foo Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: 8bit Vel\x{00E1}zquez EOF my $email = Courriel->parse( text => \$text, is_character => 1 ); my $content = $email->plain_body_part->content; $content =~ s/[\r\n]//g; is( $content, "Vel\x{00E1}zquez", '8bit encoded body (marked as utf8) ends up decoded properly' ); ok( is_utf8($content), 'content ends up marked as is_utf8' ); } { my $text = <<"EOF"; Subject: Foo Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: 8bit Vel\x{00E1}zquez EOF $text = encode( 'utf-8', $text ); my $email = Courriel->parse( text => \$text, is_character => 0 ); my $content = $email->plain_body_part->content; $content =~ s/[\r\n]//g; is( $content, "Vel\x{00E1}zquez", '8bit encoded body (marked as binary) ends up decoded properly' ); ok( is_utf8($content), 'content ends up marked as is_utf8' ); } { my $text = <<'EOF'; From autarch@gmail.com Sun May 29 11:22:29 2011 MIME-Version: 1.0 Date: Sun, 29 May 2011 11:22:22 -0500 Message-ID: Subject: Testing From: Dave Rolsky To: Dave Rolsky Content-Type: MULTIPART/ALTERNATIVE; BOUNDARY=20cf3071cfd06272ae04a46c9306 --20cf3071cfd06272ae04a46c9306 Content-Type: text/plain; charset=ISO-8859-1 Content-Disposition: inline This is a test email. It has some *bold* text. --20cf3071cfd06272ae04a46c9306 Content-Type: text/html; charset=ISO-8859-1 Content-Disposition: inline This is a test email.

It has some bold text.

--20cf3071cfd06272ae04a46c9306-- EOF my $email = Courriel->parse( text => \$text ); is( $email->content_type->attribute_value('boundary'), '20cf3071cfd06272ae04a46c9306', 'attribute name is case insensitive on lookup' ); is( $email->content_type->attribute_value('BOUNDARY'), '20cf3071cfd06272ae04a46c9306', 'attribute name is case insensitive on lookup' ); is( $email->content_type->attribute('boundary')->name, 'BOUNDARY', 'HeaderAttribute object name preserves original casing' ); } { my $email = build_email( subject('Test Subject'), from('autarch@urth.org'), to( 'autarch@urth.org', Email::Address->parse('bob@example.com') ), cc( 'jane@example.com', Email::Address->parse('joe@example.com') ), header( 'X-Foo' => 42 ), header( 'X-Bar' => 84 ), plain_body('The body of the message') ); my $string = q{}; my $output = sub { $string .= $_ for @_ }; $email->stream_to( output => $output ); like( $string, qr/Subject: Test Subject/, 'stream_to coderef - Subject is correct' ); like( $string, qr/\r\n\r\nVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2U=/, 'stream_to coderef - body is correct' ); $string = q{}; ## no critic (InputOutput::RequireCheckedOpen, InputOutput::RequireCheckedSyscalls, InputOutput::RequireBriefOpen) open my $fh, '>', \$string; $email->stream_to( output => $fh ); like( $string, qr/Subject: Test Subject/, 'stream_to filehandle - Subject is correct' ); like( $string, qr/\r\n\r\nVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2U=/, 'stream_to filehandle - body is correct' ); $string = q{}; $email->stream_to( output => Printable->new( \$string ) ); like( $string, qr/Subject: Test Subject/, 'stream_to object - Subject is correct' ); like( $string, qr/\r\n\r\nVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2U=/, 'stream_to object - body is correct' ); } done_testing(); sub _headers_as_arrayref { my $email = shift; return [ map { blessed($_) ? $_->value : $_ } $email->headers->headers ]; } sub _compare_text { my $got = shift; my $expect = shift; my $desc = shift; for ( $got, $expect ) { s/$Courriel::Helpers::LINE_SEP_RE/$crlf/g; s/$crlf$crlf$crlf+/$crlf$crlf/g; } local $Test::Builder::Level = $Test::Builder::Level + 1; eq_or_diff( $got, $expect, $desc ); } { package Printable; sub new { my $stringref = $_[1]; return bless $stringref, $_[0]; } ## no critic (Subroutines::ProhibitBuiltinHomonyms) sub print { my $self = shift; ${$self} .= $_ for @_; } } Courriel-0.40/t/release-pod-linkcheck.t0000644000175000017500000000077512653205401017651 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } use strict; use warnings; use Test::More; foreach my $env_skip ( qw( SKIP_POD_LINKCHECK ) ){ plan skip_all => "\$ENV{$env_skip} is set, skipping" if $ENV{$env_skip}; } eval "use Test::Pod::LinkCheck"; if ( $@ ) { plan skip_all => 'Test::Pod::LinkCheck required for testing POD'; } else { Test::Pod::LinkCheck->new->all_pod_ok; } Courriel-0.40/t/author-00-compile.t0000644000175000017500000000343012653205401016654 0ustar autarchautarch BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } use 5.006; use strict; use warnings; # this test was generated with Dist::Zilla::Plugin::Test::Compile 2.054 use Test::More; plan tests => 17; my @module_files = ( 'Courriel.pm', 'Courriel/Builder.pm', 'Courriel/Header.pm', 'Courriel/Header/ContentType.pm', 'Courriel/Header/Disposition.pm', 'Courriel/HeaderAttribute.pm', 'Courriel/Headers.pm', 'Courriel/Helpers.pm', 'Courriel/Part/Multipart.pm', 'Courriel/Part/Single.pm', 'Courriel/Role/HeaderWithAttributes.pm', 'Courriel/Role/Part.pm', 'Courriel/Role/Streams.pm', 'Courriel/Types.pm', 'Courriel/Types/Internal.pm', 'Email/Abstract/Courriel.pm' ); # no fake home requested my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib'; use File::Spec; use IPC::Open3; use IO::Handle; open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!"; my @warnings; for my $lib (@module_files) { # see L my $stderr = IO::Handle->new; my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]"); binmode $stderr, ':crlf' if $^O eq 'MSWin32'; my @_warnings = <$stderr>; waitpid($pid, 0); is($?, 0, "$lib loaded ok"); shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ and not eval { require blib; blib->VERSION('1.01') }; if (@_warnings) { warn @_warnings; push @warnings, @_warnings; } } is(scalar(@warnings), 0, 'no warnings found') or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ); Courriel-0.40/t/release-cpan-changes.t0000644000175000017500000000052112653205401017452 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } use strict; use warnings; use Test::More 0.96 tests => 2; use_ok('Test::CPAN::Changes'); subtest 'changes_ok' => sub { changes_file_ok('Changes'); }; done_testing(); Courriel-0.40/t/Builder.t0000644000175000017500000002356512653205401015110 0ustar autarchautarchuse strict; use warnings; use Test::Differences; use Test::Fatal; use Test::More 0.88; use Courriel::Builder; use Courriel::Helpers; use List::AllUtils qw( all ); use Sys::Hostname qw( hostname ); { my $email = build_email( subject('Test Subject'), from('autarch@urth.org'), to( 'autarch@urth.org', Email::Address->parse('bob@example.com') ), cc( 'jane@example.com', Email::Address->parse('joe@example.com') ), header( 'X-Foo' => 42 ), header( 'X-Bar' => 84 ), plain_body('The body of the message') ); isa_ok( $email, 'Courriel' ); my %expect = ( Subject => 'Test Subject', From => 'autarch@urth.org', To => 'autarch@urth.org, bob@example.com', Cc => 'jane@example.com, joe@example.com', 'X-Foo' => '42', 'X-Bar' => 84, 'Content-Type' => 'text/plain; charset=UTF-8', 'MIME-Version' => '1.0', ); for my $key ( sort keys %expect ) { is_deeply( [ map { $_->value } $email->headers->get($key) ], [ $expect{$key} ], "got expected value for $key header" ); } my @date = $email->headers->get('Date'); is( scalar @date, 1, 'found one Date header' ); like( $date[0]->value, qr/\w\w\w, +\d{1,2} \w\w\w \d\d\d\d \d\d:\d\d:\d\d [-+]\d\d\d\d/, 'Date header looks like a proper date' ); my @id = $email->headers->get('Message-Id'); is( scalar @id, 1, 'found one Message-Id header' ); like( $id[0]->value, qr/<[^>]+>/, 'Message-Id is in brackets' ); } { my $email = build_email( subject('Test Subject'), plain_body( content => 'Foo', charset => 'ISO-8859-1' ), ); my @ct = $email->headers->get('Content-Type'); is( scalar @ct, 1, 'found one Content-Type header' ); is( $ct[0]->value, 'text/plain; charset=ISO-8859-1', 'Content-Type has the right charset' ); } { my $email = build_email( subject(q{}), plain_body( content => 'Foo', ), ); is_deeply( [ map { $_->value } $email->headers->get('Subject') ], [q{}], 'got an empty string for the Subject header', ); } { my $dt = DateTime->new( year => 1980, month => 1, day => 13, time_zone => '-0500' ); my $email = build_email( subject('Test Subject'), header( Date => DateTime::Format::Mail->format_datetime($dt) ), plain_body( content => 'Foo' ), ); my @date = $email->headers->get('Date'); is( scalar @date, 1, 'found one Date header' ); is( $date[0]->value, 'Sun, 13 Jan 1980 00:00:00 -0500', 'explicit Date header is not overwritten' ); } { my $email = build_email( subject('Test Subject'), plain_body( content => "Foo \x{00F1}", encoding => 'quoted-printable' ), ); is( $email->plain_body_part->encoded_content, 'Foo =C3=B1=' . $Courriel::Helpers::CRLF, 'body is encoded using quoted-printable' ); } { my $content = 'content ref'; my $email = build_email( subject('Test Subject'), plain_body( \$content ), ); is( $email->plain_body_part->content, $content, 'can pass body content as a scalar ref' ); } { my $email = build_email( subject('Test Subject'), plain_body('foo'), html_body('

foo

'), ); is( $email->content_type->mime_type, 'multipart/alternative', 'passing a plain and html body with no attachments makes a multipart/alternative email' ); } { my $pl_script = <<'EOF'; #!/usr/bin/perl print "Hello world\n"; EOF my $email = build_email( subject('Test Subject'), plain_body('foo'), attach( content => $pl_script ), ); is( $email->content_type->mime_type, 'multipart/mixed', 'passing an attachment makes a multipart/mixed email' ); my @parts = $email->parts; is( scalar @parts, 2, 'email has two parts' ); ok( ( all { !$_->is_multipart } @parts ), 'email consists of two single parts' ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); ok( $attachment, 'one of the parts returns true for is_attachment' ); SKIP: { skip 'These tests rely on my local magic definitions', 2 unless $ENV{RELEASE_TESTING} && hostname() eq 'houseabsolute.urth.org'; like( $attachment->mime_type, qr{/x-perl$}, 'correct mime type detected for attachment' ); is( $attachment->charset, 'us-ascii', 'correct charset detected for attachment' ); } is( $attachment->content, $pl_script, 'attachment content matches the original code' ); like( $email->as_string, qr{Content-Type:\s+multipart/mixed;\s+boundary=.+}, 'Content-Type header for multipart email includes boundary' ); my $parsed = Courriel->parse( text => $email->as_string ); my $parsed_attachment = $parsed->first_part_matching( sub { $_[0]->is_attachment } ); is( $parsed_attachment->content, $pl_script, 'attachment content survives round trip from string to object' ); } { my $pl_script = <<'EOF'; #!/usr/bin/perl print "Hello world\n"; EOF my $email = build_email( subject('Test Subject'), plain_body('foo'), html_body('

foo

'), attach( content => $pl_script ), ); is( $email->content_type->mime_type, 'multipart/mixed', 'passing a plain and html body with attachments makes a multipart/alternative email' ); ok( $email->plain_body_part, 'email has a plain body' ); ok( $email->html_body_part, 'email has an html body' ); ok( $email->first_part_matching( sub { $_[0]->mime_type eq 'multipart/alternative' } ), 'email has a multipart/alternative part' ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); ok( $attachment, 'email has an attachment' ); } { open my $fh, '<', 't/data/office.jpg' or die $!; ## no critic (Variables::RequireInitializationForLocalVars) my $image = do { local $/; <$fh> }; ## use critic close $fh or die $!; my $email = build_email( subject('Test Subject'), html_body( '

foo

', attach( content => $image, filename => 'office.jpg', ), ), ); is( $email->content_type->mime_type, 'multipart/related', 'passing an html body with attached image makes a multipart/related email' ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); ok( $attachment, 'email has an attachment' ); is( $attachment->mime_type, 'image/jpeg', 'got the right mime type for image attachment' ); } { my $email = build_email( subject('Test Subject'), plain_body('Foo'), attach('t/data/office.jpg'), ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); ok( $attachment, 'email has an attachment' ); is( $attachment->mime_type, 'image/jpeg', 'got the right mime type for image attachment from file' ); } { my $email = build_email( subject('Test Subject'), plain_body('Foo'), attach( file => 't/data/office.jpg', content_id => 'abc123', ), ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); is_deeply( [ map { $_->value } $attachment->headers->get('Content-ID') ], [''], 'attachment has the correct Content-ID, and it is wrapped in brackets' ); } { my $email = build_email( subject('Test Subject'), plain_body('Foo'), attach( file => 't/data/office.jpg', mime_type => 'w/tf', ), ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); is_deeply( $attachment->mime_type, 'w/tf', 'attachment has explicitly set mime type' ); } { my $email = build_email( subject('Test Subject'), plain_body('Foo'), attach( file => 't/data/office.jpg', filename => 'something-else.jpg', ), ); my $attachment = $email->first_part_matching( sub { $_[0]->is_attachment } ); is_deeply( $attachment->filename, 'something-else.jpg', 'attachment has explicitly set filename' ); } { like( exception { build_email( ['wtf'] ); }, qr/\QValidation failed for 'HashRef' with value [ "wtf" ]/, 'got error when passing invalid value to build_email' ); } { like( exception { build_email( { bad_key => 42 } ); }, qr/A weird value was passed to build_email:/, 'got error when passing invalid value to build_email' ); } { like( exception { build_email( subject('foo') ); }, qr/Cannot call build_email without a plain or html body/, 'got error when passing invalid value to build_email' ); } { like( exception { build_email(); }, qr/0 parameters were passed to Courriel::Builder::build_email but 1 was expected/, 'got error when passing no arguments to build_email' ); } done_testing(); Courriel-0.40/t/00-report-prereqs.dd0000644000175000017500000001131712653205401017045 0ustar autarchautarchdo { my $x = { 'configure' => { 'requires' => { 'ExtUtils::MakeMaker' => '0' } }, 'develop' => { 'requires' => { 'Code::TidyAll' => '0.24', 'File::Spec' => '0', 'IO::Handle' => '0', 'IPC::Open3' => '0', 'Perl::Critic' => '1.123', 'Perl::Tidy' => '20140711', 'Pod::Coverage::Moose' => '0', 'Pod::Coverage::TrustPod' => '0', 'Test::CPAN::Changes' => '0.19', 'Test::CPAN::Meta::JSON' => '0.16', 'Test::Code::TidyAll' => '0.24', 'Test::Mojibake' => '0', 'Test::More' => '0.88', 'Test::Pod' => '1.41', 'Test::Pod::Coverage' => '1.08', 'Test::Pod::LinkCheck' => '0', 'Test::Pod::No404s' => '0', 'Test::Spelling' => '0.12', 'Test::Version' => '1' } }, 'runtime' => { 'requires' => { 'Carp' => '0', 'DateTime' => '0', 'DateTime::Format::Mail' => '0', 'DateTime::Format::Natural' => '0', 'Devel::PartialDump' => '0', 'Email::Abstract::Plugin' => '0', 'Email::Address' => '0', 'Email::Address::List' => '0', 'Email::MIME::Encodings' => '0', 'Email::MessageID' => '0', 'Encode' => '0', 'Exporter' => '0', 'File::Basename' => '0', 'File::LibMagic' => '0', 'File::Slurp::Tiny' => '0', 'List::AllUtils' => '0', 'List::MoreUtils' => '0.28', 'MIME::Base64' => '0', 'MIME::QuotedPrint' => '0', 'Moose' => '0', 'Moose::Role' => '0', 'MooseX::Params::Validate' => '0.21', 'MooseX::Role::Parameterized' => '0', 'MooseX::StrictConstructor' => '0', 'MooseX::Types' => '0', 'MooseX::Types::Combine' => '0', 'MooseX::Types::Common::String' => '0', 'MooseX::Types::Moose' => '0', 'Scalar::Util' => '0', 'Sub::Exporter' => '0', 'namespace::autoclean' => '0', 'parent' => '0', 'perl' => 'v5.10.0', 'strict' => '0', 'warnings' => '0' } }, 'test' => { 'recommends' => { 'CPAN::Meta' => '2.120900', 'Email::Sender' => '0', 'Path::Class' => '0' }, 'requires' => { 'ExtUtils::MakeMaker' => '0', 'File::Spec' => '0', 'Sys::Hostname' => '0', 'Test::Differences' => '0', 'Test::Fatal' => '0', 'Test::More' => '0.96', 'Test::Requires' => '0', 'utf8' => '0' } } }; $x; }Courriel-0.40/t/release-meta-json.t0000644000175000017500000000032212653205401017017 0ustar autarchautarch#!perl BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } use Test::CPAN::Meta::JSON; meta_json_ok(); Courriel-0.40/t/HeaderAttribute.t0000644000175000017500000000577412653205401016600 0ustar autarchautarchuse strict; use warnings; use Test::More 0.88; use Courriel::HeaderAttribute; { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => 'simple', ); is( $attr->as_string, 'foo=simple', 'simple attribute as string' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => 'a' x 150, ); my $expect = 'foo*0=' . ( 'a' x 78 ); $expect .= q{ } . 'foo*1=' . ( 'a' x ( 150 - 78 ) ); is( $attr->as_string, $expect, 'simple attribute with continuation as string' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => 'has space', ); is( $attr->as_string, q{foo="has space"}, 'quoted attribute as string' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => q{has space and double quote (")}, ); is( $attr->as_string, q{foo="has space and double quote (\\")"}, 'quoted attribute as string with escaped quote' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => 'a ' x 70, ); my $expect = q{foo*0="} . ( 'a ' x 39 ) . q{"}; $expect .= q{ } . q{foo*1="} . ( 'a ' x 31 ) . q{"}; is( $attr->as_string, $expect, 'simple attribute with continuation as string' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => 'not really chinese', language => 'zh', ); is( $attr->as_string, q{foo*=UTF-8'zh'not%20really%20chinese}, 'attribute with a language is always encoded' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => "\x{4E00}\x{4E00}\x{4E00}", language => 'zh', ); is( $attr->as_string, q{foo*=UTF-8'zh'%E4%B8%80%E4%B8%80%E4%B8%80}, 'attribute with utf-8 data' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => "\x{4E00}\x{4E00}\x{4E00}", ); is( $attr->charset, 'UTF-8', 'any non ASCII data automatically sets the charset to UTF-8' ); is( $attr->as_string, q{foo*=UTF-8''%E4%B8%80%E4%B8%80%E4%B8%80}, 'attribute with utf-8 data and no language' ); } { my $attr = Courriel::HeaderAttribute->new( name => 'foo', value => "\x{4E00}" x 30, ); my $expect = join q{ }, q{foo*0*=UTF-8''%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8}, 'foo*1*=%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4', 'foo*2*=%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80', 'foo*3*=%E4%B8%80%E4%B8%80%E4%B8%80%E4%B8%80'; is( $attr->as_string, $expect, 'attribute with utf-8 data and continuations' ); } done_testing(); Courriel-0.40/t/author-pod-spell.t0000644000175000017500000000142212653205401016705 0ustar autarchautarch BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } use strict; use warnings; use Test::More; # generated by Dist::Zilla::Plugin::Test::PodSpelling 2.007000 use Test::Spelling 0.12; use Pod::Wordlist; add_stopwords(); all_pod_files_spelling_ok( qw( bin lib ) ); __DATA__ DROLSKY DROLSKY's PayPal Rolsky Rolsky's API CPAN Courriel DateTime Multipart Postel UTC UTF ascii attribute's cid distro filename html inline lookup multipart utf zh Dave autarch Gregory Oschwald goschwald Ricardo Signes rjbs Zbigniew Łukasiak zzbbyy lib Builder Header ContentType Disposition HeaderAttribute Headers Helpers Part Single Role HeaderWithAttributes Streams Types Internal Email Abstract Courriel-0.40/t/Part-Multipart.t0000644000175000017500000000425512653205401016402 0ustar autarchautarchuse strict; use warnings; use Test::More 0.88; use Courriel::Header::ContentType; use Courriel::Headers; use Courriel::Part::Multipart; my $crlf = "\x0d\x0a"; { my $headers = Courriel::Headers->new( headers => [] ); my $part = Courriel::Part::Multipart->new( headers => $headers, boundary => 'foo', parts => [], ); is_deeply( _attributes_as_hashref( $part->headers->get('Content-Type') ), { boundary => 'foo' }, 'setting a multipart boundary in the constructor also sets it in the ContentType object later' ); } { my $headers = Courriel::Headers->new( headers => [] ); my $ct = Courriel::Header::ContentType->new( mime_type => 'multipart/mixed' ); my $part = Courriel::Part::Multipart->new( headers => $headers, content_type => $ct, boundary => 'foo', parts => [], ); is_deeply( _attributes_as_hashref( $part->headers->get('Content-Type') ), { boundary => 'foo' }, 'setting a multipart boundary in the constructor also sets it in the ContentType passed to the constructor' ); } { my $headers = Courriel::Headers->new( headers => [] ); my $part = Courriel::Part::Multipart->new( headers => $headers, parts => [], ); my $boundary = $part->boundary; is_deeply( _attributes_as_hashref( $part->headers->get('Content-Type') ), { boundary => $boundary }, 'when a boundary is built lazily, it is also set in the content type object' ); } { my $headers = Courriel::Headers->new( headers => [] ); my $part = Courriel::Part::Multipart->new( headers => $headers, parts => [], ); my $ct = $part->content_type; my $boundary = $part->boundary; is_deeply( _attributes_as_hashref( $part->headers->get('Content-Type') ), { boundary => $boundary }, 'when a content type is built lazily, it gets the boundary when that is built' ); } done_testing(); sub _attributes_as_hashref { my $header = shift; my %attrs = $header->attributes; return { map { $_ => $attrs{$_}->value } keys %attrs }; } Courriel-0.40/t/data/0000775000175000017500000000000012653205401014235 5ustar autarchautarchCourriel-0.40/t/data/office.jpg0000644000175000017500000020217212653205401016174 0ustar autarchautarchJFIFHH#CExifII* z(2iFCanonCanon PowerShot S452006:01:18 04:25:222:0220BVj rz  Y |^0100< 2006:01:18 04:25:222006:01:18 04:25:22 _ _ .H"$ T \|  ! "\@ c `D_1c &fff)))HIMG:PowerShot S45 JPEGFirmware Version 1.02D ../100101@ I)O"@R980100(JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?%Xadu8켟[\=b?+D Ʀ]mxRj&զZDiSB(UhUBԶZ@<7ƹo㦲kWh#J/A53͌g%kc&>Vǖ\~1ʻXȰ+`,IZ1*m0"n 7۵Cr*ɿͼ5wKQR%,LKD͑0XD^7@HܥrLXí4VXA'=If)%ugӟ*37VZi")bQZΰHp2ܐ1; t7x܃sSu;5y .0)n~lך.at VDi~j>Y+!խ5vJ~#YdBչsϵih.j+/iYA`8JzvpyyNIhX]. 90q> ʌ՛]CUzh8&SzdNhm<,։o_`EP0O=բ7VC84޵x~ņ:r9B5wu*Fu%ofyJ}baFvWjeώV{{>I?PF4uQq^_opr0L|$CB":)"nF 槵{d]q}\"? tg ~ҹJZ"DĹuTu!6[Ɲ%ʂqOi&q*%g+u?5qiWhjI7P\[SS98??s^.ش]9b z'ɪH t{8ԾaJWȹ z\h$0CC^pcaUx[ywީU:0%)٘jkVTVxQ5״}OA(?vc/py c6N>av6i]N*j\6UjP|i|WG79֩"~57&8-^->kE9 v +qNw1n&TѦewVt I],P; Ɣ͎}ZqxՀLFL m?ưU̫{uc,A{i)=A;2!i6xF Au8zi ʻ'yǍE2ư$3=8f NgKy2 Nqݶgqg 9[d{RǦ= Td>p9U\eyI3jM>=% eOW4Jpe4)r ߾=WE'@{{̰X#@ŜoXo5rL}5zZm$*y'5S/fusl 4k]11Q\<{Smh|envI!VK$H{TU@yVWkm AAp@iԲ@% g#p2}N TO;²<09)*N3+67wV1v3ڥ\OGWu=½k%} »w&X"9~ְFϝNk0-F򞟅J(G P W DӜ]?pOzή/15n3EG<@R^9[m`]\u 1+A8y\=+D\uOhK$+Xe*iufua<^uKYTAƩ:(!?zLKB$PR:-n4\$- aПUk==C7+tsc1iC敇*󥵻yi {^vuZjG1ȆNI!?*kM#YͿ>>-hߢ[^/6_r( qRn#>aJsv;; [2ҧ| ޠ!Px- 4*R:qJsӧhqͩ :W)'5m9ku%'SV℺Kh m?zR?ԛvC88f%AmB);W S'ja4V8lB&>{xJnTɩ2eTiE]eA*ih O&ȕ|=w=h۪l¢t[IeGŰi 溟 UR8U]RN2 s]w<]/QŨb+R{7(|\]@0zW$(%f\ >PMZ˻ޣ*èj;'*$H:=}rx:)9|A۾w_Lּ9okvť6y My8]2A8tʫ'e]Waԍ?[MNAךnKGVrqCR;AFlrk[j28 e]G;V=KKe۩ 7?`ֶgμ8c26A$n(3LT,%G$$ء`dPH\nxa#jV{ -mfbxȾ~$9(wz{s+-k,y#?)Z4;Iԡe&yL^b'8=:\pLH^ʿtG.?Z5[(8"1ۓC'ge'榚gF#bmmn6}fnr895&1w}^цsn\c~a[K./|hw_^x$IuKIw4JёܐH֡tZY ~j@ʁ ( Ųe=iNGJHK"7_JbMw~BIVƈØr.ܴ HQScp2MBz֎g{"oV$vwdĥ^LXi߫zVѥ;_20M D=w?SșeQjDi## ;&)Wqilq|egrɥ74t%\ʿ3oosׂ -;۝vO,wC3!g櫨 XwGi7P*Gb{ք3]{)dn`nYj~^[m.0tQz $RT⣹iLP}~ڦ-KK3n_b`H=sz] ϡz"OX%6TU 9&M˼} AZ t"M,Q|g~Z+SSAVo㑛J*̬tܼ5 cEzqG{b94QYҟrq=ޭb(%IBU0V]16p(|C+dY.FRE@-qSQ[hS<+: g*2w1Eu⍗ @d^" CE5 ` *ԟ8ݱLEy"?<ڣ/uQ@(nwܹV~hna0QQSeGEvzndm,3\>[X? TkPzx+Қñ Ξ>mhG QѱF'- mG"(r ҠfEP)B(F$ˆE,ΊG4 ‹*U"#lQHPdxSa:-uIGhP Gp)FHQ Q P+Q2: )B)yu=.@S(vnѮbor楸Ox8T\_ѿU!]Еby[uHitkr$x s %ߑbtX eGNs9pw“L8^,F $2%9Jɏ3 =٣;aՔ]:84WԠ*G$s5-e#*TӮ>uvD.TMzOBBB <:\Ü~Sne:nkDRۼ8on{"Y5G=dCk'je?7ĉaz̷,Jfd>v\vER*N3u1'BܲקB3/6Y \o8Һ^Y #<雉xNҵ]2MJh\aF ٱ~v4c`l:+!'y>,@aqzzopzNl[n0{x-ףOGp"& ߶ bɉK;j>>ǁzKB(8ͮG 3R''cq^/u(9 y1K)^vaYP#2QH#(H=s1SCQ?glpw<}bn#1!{pOiqD$Ι*FG;$wS]T[Y#/ĠF 7cnHлn] vW#;j[ŊJIBA`$Sie5ɆIcyaA mIKi 2Nv5t 9' &6yqqڌ51+bPMSM Yޤ$(dXee,Kc'S)nx4)l続FEX`0$'N1duњ}24f1/1<)t,%OQwv挲Y jd?Hqݵ6fjZ25F Aݹ#Z5Mrne˿_q#qQQ͌`1o\Oy 5$ov`[\sxzMOB71ʝ˵s:g7RImndHs*.fl$JO4t*yٞeK*A ewzo4FP >;$^&}ˌߢoT=*=kXE)rxo2؝}|j`.-f-Z'3&: -XYdU]}մ𖅥݄d!Vvyp[X;̪#䎀fсGEzpXQ[=1>™Qz|h _ +iP8 @SZƜ. C}j?ݤ3%#jzRUd)zW̩9aGlʒ: :9ƃyǑKrHI UeǘB2vT5<+ᄌ`FӫK`|sI˜a0AJP ۼя E4p6~VV}iwkYjq?h}K r g@<0.֤Z~)?5,|3c˟Z?1?}\3҇ Pr:ǧ_^H:u#FN@=|7$0O^r;Hɟȣ$ep 5p Qc ﲁe@3$Xdu{R2ɝ8u[GjcBldVxDѵ$k:[XZU-ہt8?tଁϨ'2{-u[r a.776A;]_՜ݹ{y1'JtRK-Yey wدqj?Mzhrr6={JpgBv-.EO#R mY>~&qw,e11yJmVs͓mD%$sg7'YXnMNMZ1Lj+0.ycH}LB2<1˱piƫeȳM"?=,l9˃Gݵj7ӴԸMBZo"ڳ/XqKM"-Q%M^rn""7^ao>hD6֯]?kg AnP\3u_ַG)˾NwǁkWKmp 9h\a{y$hglo|mx2mmC '~{K ԍė-<\r)@P![N{Կ &.*:-ŢvUrُG\P%;\]KHI$sRCĊrnU|wOL|UkY\MױdrB $uPG*}F9Թ* [p3z*yʅ'(A ˿LdY9vzëP#@ے%NjCY״`hj7dfnՅ!O(þЍAH-? ;yVtb9FވdYt B6f'X q[g#>څŸzd` כ}Z8!-[7 BBlv剫.k+dV Bs`dLXq+mW=mZ^H1n2☭uMB2%b`bTcnߊ?!hgI8Wx jK.P%)ngey;񫴟VJS|k8٦L1MN_3CKj}7h4}?dI..I}WvPv]$S.ў7Jmߑ:m+oj_MuKt*i:;V8a % wc{z֥yu"!ySnvٱp=Q~U;92e%Sve 9!(Wg=S*D^l?&K Lrc6 *8_Ԝ.8~igoOmSP7g[-t P Q.+ldQJL.6HڸEre@0 EԩVH"ˆE,Š˚ cfmJDZ>6ڸE+OMT1]QB&рЧŒuHmG+oBp 0PǕG+F P 6<(FBwQFQP&^ԟƔ.kTW }*OR7}?L2Mv#/K(uૌS[mb e])23rI@VpOX 0pJ*ղ0 ӝE$cxZo~΅~ԕbFQ~ꏔ0UäpA'0d'~4@V]{zBl킀$Ni&g>&m0$u61#F"|@;HۏNžF$R-y? en/+Y]~Af+&M݄R"M4|\R2n޿qD8 YEIS e3{5VĖK=A'uS֫U!%i]ccX#,bl~gC:؝mU`cg 9Vo|ܮڟz_wD,JoGWK,y` gZŃ;֗П5VXwJddI:LʥB|K?apE "BV#[XI-Oy01ϞM`^\jUEXBsp^f,T8a~;huk;+]!R]h"+|hI,IRlZM9Tgov隌ir~ pP#W0D"# h6>QGiqj5̼ѣm^yF&׻BKR[rmI (?00j) (xR6ZIoqE,lUц4P+U(;Qޔc(r6F(XR єQ,&Aқ/jSOeoqj#[<9AB*bdZGGEW:6yͷhQѠaT@~14A Eџ4eۄ]t͏=K:lqQ<"yj`w](h|h(* ^g#mv).ƒ XrN&F9ޜÞM"2!h1c e.??Y~ZפA|_R wsߕ`MO?uA7~q b!*,r-]iB7+>!h?G={  po6zb;DK9|jMZ=ir }\RGR3kRs5\+Q,v$ҽCdca{NERd!8J.XmJx'5WZ\'zJIUQV+6@@{).ϜA>5~,QĔb R05fPc)SЀ0hjj2le· IxӔUu0p*duwP u6[ ;\mQE.3(^rjbu* MQ1*25úXͥߝē'}aJ'6IฌBԚrKpM +8=|qB6dʷOC򁖵)ZU}.~Re6|%*<’>]YA-rl 8uylJۯj=²rOV02H}N 374ڽۑ,$2IhK*íi8Qp?j9OZ}=9JUY+F&n2$()\H@ON3x֗-Dcqm“; 5fIšP=B8I=I~ddf-edQF=ܣSA{"B^Xѝ$ s7ARRRTV9>*HcK²?:d{7_oւ#rTI#)^7刟zJJBIQ۸j}a1eqp&>|l)spu>`VK7N3K>2T?*_q]Ii|sXUEm{Tt/ k8Y6:NvJPE!}%Yiw( "|6ɦWjVFqK ܹ"c$ǹEfj~tK-?C&E3L.X5 dgo }Eff:Q8 ]Z:ѐx!pg4D#TJsExՐu'Mvy|%4 nU?Eu+R(;M6skPG:cr୔Nq7Bpke |?Ҧ. WhP@R,ZEB %/ҋҡ ΁ WVC<='Nv*JA7~u)H:M_^;d#7׌̱=+݂rSc,{ad >%N69*!hqMΆ](n;IZ=̒jR3 w;TN< ʯ=@~U%s"C?:)}V/evyS9Zi7v%cSQ2 p&b\S`094oЌSI܏h.h2Ƞe.wS;䳝6GyN{閲42`}hEDI4F>$~Ȧx¯dgS6rJOBpcJFfc4*tz7ZCQntwYbd#1KЧ*g0{w<:A V4IIe˅8s?X HXAh"FCd8`igXP)U.;$qU8OiOt/OfDQPá\щۇ+ d=d~t5S5c;P/ *j|z c<W'YɇPAAlo]| m:3*˿]6%ir{Wx"p7/n`|749r傎\`?۟% (p6LPGګ/1#5Z{}HsrpDav(uoB7Wd\E"ô>b-ӓyXOk/KW6mk6x%p@YhugW3Q5);όt :WJ0ރ`+(Pz`6z5E盅meaV==檇 ظo򚸏%s/kh: a09qV[m~.G Ǜ-7cՆr }~sT8 Wn2/f cVB$($DPvC6+*pLJ΄eΟxk|`zOe2? a7 vG#.esUbj͡ҥZQW.vV^gq- Z'E;,V192J>}yYr9I#8e`wR{D[x>?Ɛt1<H|듌cF2/2OFcF>"h$Q+l.*ṳӠrґ:9U yDMRDϐ3;뀼nĨ nMy|4%XzF?•HId1@~44O&Nȡ;qDuӤ1`$~QN,|.G1A|)<=sXG 2I\|S KrϔŒ|<6$R#}e،`H:.@.RlˇRpzU8ТN }Dh\)ٟ ziAѮ20H߸|#=14QQMnLHpr~~g4)Ƒ4dLJ>)(:FB a+ =j^&X a{-DGo'ygm GTWc~#`8* cFZ]u(ri4uF{឴Lt{AzZ4/ol!R]WFL`7Y5re!f?V$Ru9TVM28)oE9-\noXֵE\aONQRP(&|k4M/ 9&JO9H%59>W@'8JTt"m˔X.4Օ*x 6Ě1#GT9k_x?ƚ'7,mA,_& !^bGc2iH-dvkv)HO('m0y9Щ$Nzݨ9cPߍB~Ft}☿>Tk&7@1m(gSAߍ=k ̥sk{~Om?lej!f?^PU]\` .Te~W(|i )E8>YYrPQ)>+7 3P#*$`󥤙2BoH(0{Hn%zpn`I hIwwSN=p6? L;y br%gl h̋, TyyavNT o*>6∭N$ tjyW{0Ḗ-*4`}i 0791\;&s皤Ҙsy74w;ȽMSm> ǥ#͞_F=oe)dzL6/ ~ai眨|}j.[DT yc@ (nu 6+TWo8e ֽ,ߠjE^fh@H^crw$l]܉ @(($Ssjä:4Eg8@9&fܞs)bzRkTbl6OƤiVCs=V(t""xr$dTx=\ źLeȣZE.4H躴v:uӃDg: 9^B|AڤTfؓv7m,H_Jy.X\]CԯD6l Óa 75 DhD㌋->4 H}\/pm@W<4t)PL;5#qw@qqU;괖y9)0>Ca?U *+Jb?]:iI쏮qL1[ڏ\diYbC|!FyuUЏDgóc ,c5X>Uk i3=`A/!hsoU/Eϝ(i4)DiF^jTw)U}CqӜ~j ¡Nqs~bWPKv_IJ:ҲJ-hJEU:!!lj)~` gއ7Awh&dlqGcN,#3=@^ Jlshc=;6Hp?\jfeuЍW:z>ajQ}v} $0<;_}?##*EB'yPfI;ZB?I J.?O~5v\~H{'[p*R?uQϸ~-HWGP{;y?&bfF;F,pX[c-!ڃV<%hm FIm?ՊMQatH|J>G Sj4*Geyɴf25%wN&`}d.FB {+,ԱL7+q4OPHX٥l9$v##jsGɘ ۙn!> UR2~^zme_9.5vȑ2p@8] 2JK8mV`_t dgZjz 'Ff=r8𪽇S]x8݈V_d !mQԡW\G%bV g<1$>\~_v/v|se։,lyHI o״.mHVc$b7=٬A"jo{u,yG.H>I:ޔloQ^fDyI%)8H44tq}y kw7TK,1l嶖{t@$uyAxQbx3ZBFy[eAP8hkVwDRX,qW4e9EALHr}i/mR]+4 ;٬* 3:t&-VN<@'ou3LwP<*3)';y 4f7`67A{+~VLg=\RӭBd3d\p//;N![CsV*ݒߥmJˍmZ+t۸)%,Hvyօ9S e{]V?^Gͅ=S<<Y/*|FءO@4*".T(P)[ oi%rntGr}q_4{ꌨ$C|_F cA|B:AÏ}Z-bR%[,O49򬙑%R7 RgY4Z~'.#rlI?gGNa*njr?<2yàC&}hF`WjH(gv|k}GT?6m#>T6je6lȟT"F:Q> EQWwNVN0ѸfO%C{\/IgsumUuMZ]ZQ);Ҫwe)ޕAI*oAh֠"?V7Zͽ5;ZV1<욋}㏭HpWh~gEǓ(^#h0OG)__-XN<U (PPBB R$}EQ~ ~ p*f[B~5l?!J/ XjxZ_mT s-WA'F"%(PD ?'2<<[j:]q.eSٶ;m<*},nut,}%jitD`$f0|~Ǎf7vG1 }=$w<Ǖ Xz{c]ORslpUN N<}Ai򞯛wDbGR=q\|iK_~8Umv~yU>CK`LDIucinWg@;w&;wWM`d)'.o-/:巷W8})#j̈́H;#ʮo,*'_Fͩ5ΰn.%{n"G0 $Z~3jV- 7p1vItOOwkkj"2NO"UKx]]Z6OUD9&F\v8?´*O8&CA'^Ч7$مߵ犺.6RFא8rs8jƺh\D6uV8 [S754[xr pp:dh叩XmW튚 =*_~CM9-/,'1q:OHwiX ۫vԷp֡dEͮ.TLd`w7ڬ-뽲])/=޷͒Klӿ}xuS>'?[29WAqI q!c_2#D-օp).t(P@WKa^"{^$[:wz_.LL((l&l1uTa8: {>e$Ջ~[2g** 9axցwXEoj3/)aNrjF!J;>UQ`hQWMɸnE9†X›md4[G/*Hm읺To>P 0)ν-a#z"NC-;/ί}<{IUܤ1N(ixT[LI+m;/>WwҌX8CH>^9UM3slPuEQT /A"9F7^Z&; TLFޮ#|^2(tmWn* Aن@+njqe˪)R2 S(ߜ8FH`bkI9Ċ46VH&BqNGʨ=]jD{F#Cufy;|+jqvK*Ck4 U3:ѸoTi#bkY$oêLJ0[OetRD8e4EL֤]j|me5X5z(lqѿƕUtG^9hANK Sm}3 5LsZQp3fo,}V:.BݧzTD ((P@PB o G7>Yo¨D h? #:olQ|ygG,waa6=©͑cBIWahzz̯,1¼WF\Oq!2mT RE2NFǥy;yd8$Oqe˽ZUdr>GkdϚ^l^Zkunoy#[Z ;;sbͽ.}kͤz6pUQ`kىl&c-]i].B}8չ>_w } mv\P3F纠x5~fʘK`@\q~S"[$z2~~]^za4 X1#/Q+rj?ԯYծ{ѩto!4k}Iҡ*lի'@H?᪬drjJF/Ph04G}*@74 PnXoksfS*h!dF?jާٙ?Y4YmJuxY+^&Z_hӍbyQA#= 2ɫݦwxվLC> _jfqyq fnX@Mt:MRlb짮{TG.B7Y'޵V1V |&/GO0Os*aKy#1&Sn{UuN%sr>ji&x% JI®N ="ȲS}1DK9fb0YN`xɤhơDݛ+2)Gy?_pcy'jDUR2KlڬF׌^8x{h`iAZpQӯ7ZAfe 0@dpNz-QX'o*"cGit_yCol-mlˢJG\0^9}Ltd]o<иh:Η#jkHb;.2pxfm"e2d>1ASoGzG#[}Nl`t=se & xk*ͭf3>yvgҙ_yQ>Xg񩨷O}n)kp՝a}{Ayq.-nIP1Mu{%+dE9o \ޝq>aIR9pk1MӸg5XEٯ"]+VL+>*;˦٭71NGWӲVTmEE[{ g>[OF2=ԢjwVVqNA*b]ǚoh@ 781hc9m[R7ɔeO'݌I~c6h_"쇏h?m[xre4a[(?dzOKNtgW4 E*GVg4vs1#C/ Ir>P*Ɖy/C60IQ,en|!%y${yYV0 єuuOЯK˄#f;yVi{d'SOx4ȭtVyGU&Y]ˊh F);BP=4zM}h# 63 >aAJҬX0P'qXwqT˷5ێ]=H8u&59$BC16|29v?Lr'BQGq+\\vӪÕ} 5(S#B\sr3fWs,gZ0-w$?ŚA'^'ឌxitNre+ш&>8E-7UxlF17C DwhEu\$n$''ʴ8WK'J!W1 ےçJïj0ګ]pMxtEFyL= sH$ };sqtk};'O9` Fr6 V!?VxQEA*vXHgV-#U+lEq"JHXO1ۨ^ieǩzOoOQmyp͍iZcr'ۯwU5Km]jCscz`y\H9d$uR Lbu QWpcߎx V xbeDJB*B.`n F\yOyS}eVӎx }^FD6xyw^?6sn"U݋789J7k -{Tv9NS8?U.nd=Vo?cI,ͧD8dۘu=u/D=~É:[$N wlR"֓e47[[ɐFƋQX-`}VMNy`9[=3-&Ĥ !'~Q>^}FZM"kNYUN =w=M5D}OpFc©85I]v<ח:'j1X5vٳLc ʏGMmFӇ*\KKLf9z:{K4]KbƅxktX,[U̱K69vQo qn7xB&;epq209%|C$b{AyQxn#Ϋnv|o5v(☞,w]xώ͖1Ӹ۟ߟ4Ҫ/Q/4Hoh q;կ˔zt |*\L5nPEq"*ne%IT! ;V⤼/mP*Gq_5)&>%Pp@A@?J:>/ V 4D%Uux-Kh׆;X5"5[] 8ô\P%Xolm=B .t(PBtäF=;aԧ 1KB*cZ?'jդ ?T5YVŌ-_d0Pdz5;ZʀyX GN $\J>kq{i`EbeIbjrEIgwicLNiHvRcvUJEncսϨVO5-ςgZ8z(?uQY""`̑LTWx`xgQ"F,vFٷT ɥڟP9s;EXU˺ RM%.wI .}.g[~|9lUZN|. Qys垴N1i֩guljzCIclg?ZgyX r@-HţV=Q_u4w\s $~kd(AiUsBʻa\/A&+!f@&o4'+(;6#;m3G$0LFY~lb.i7;K5W:|騖TxPn"RAc ln>OcSV\XϓٰVOtݎtb~0*dдDqVg?S?lW%u7.>c9vHu=*PRub8?eM"z5k\MdPb#C243_N3W/IH ֩jjGjm<|> ;Gݽ+N%Npl?j>KXm[@70ǗSlG-; G緷m$*FPLנdR?f졸XAH՚1Jc {F}\xmoW,#o֥0Q^I6(P+ 4 +5,z7&~_˞0mCZ۳B»">d׳;ͣz&QdՓ})qb~Kwo:ulV41MOFU_u5[jZ{ @ C'))ھIÖ:LeN{v:ғ+ݽ.'oD1 rRqѰyHR\`pfT.vJ__CY˩TaNk@Y׾@;ߘU62w>_gIBeOp,(`0\8=2*د~䗺笨EL2OsdwB0Rwe>`C;=qxQ5(#,J5\y]HW+Yok#|vվqJ-Km}]ҏlsMNkڙS^V,HSqI\ʀF 4Y#7KqS򼖎/!8W*Gs'w5-`߷hm&[SFmH;yՏ4HWGYêYwv,X&׿iiqg "VpH./@ҧby;:P^2[W6i6 v犯CĐ[V7:%Ojݧ-goq*\s{G 7ej$!ο1u}^hCF̡.QE&ZK2%a۠9G ?g1 3HJ~$w3ԆBVC>dodR!$b<7M}rJ qe*|_jZK릔HsʋmQbrm?u{T ,caFrO@>1i.RO\eoy5'-}f[}GGǮϏr m#AE>Q18hPK62]3N[Is(Gn$'o򪯪ޣf mT|QizEō);*N+/fb7M/; K9N*g񫦍soeĊe7C:Z) !2w}6<++˨sӗwmשY!*!j3kֽ:dQNvq!nPOLdž* 5׌L4&vEh?}Tt)W[c&28+Ji=r-Khn %RHypG 0c-LmW.3H쪒@;$ BWH`s .F?ΫTV"u3bu99nNs[* 0"/ @~4"q͌Ie(09T8w7LUC-luu67{Ј3$^'J2LHt!YawΫl{hr'<3Ȍ ° cV}5ִ^5!`+Xs#ge9&5 .mN HQ|KHp=9/($^j'k<1r75Eҵ-)]Jى([CV`p'iasK1=3:HccM.ưb.TRp8/ ͚ K͚\ތEXKLO!ڦ}a8A]1mϗf!}*;7aTxۗ';V\oIFط659.?{{8~j)F8 #{[B =cK2Bqސy^䍺SsI 1sHiI,r 61?q>=[fߒBJ+ZN듋E~Y(]ZW& "R6. f Ms N mn'#ဏrxRq4e"'ƨ,Kcr2~FKWEt" $#2D-wLf|H;<3&NRob凹+!>{y//SH^N- :A1Na~5*;WѭL;w6?bо%*i^-u^ $Hl?2$=6әdR;I f9[S@‘piXFaA‰**@4 V>Nw.2s(=|WKSY+`PA>-FY^ FL?[?d@EExKWԴgl°ɾ+= AIX!%{8VÈ4?S\XZae7 ʲ C5M^Ү]ZQfjd6GPQ )o s%agHOjMrQeO[N$/<6; >t+Iy]* dgTĀT~dR_ca;($PHN*ދ% 2/ msD3F3? hgc-R,w򒯕<:ψZI*+ʈw~SVuQ=X?˜ZA5S\;źV=W-fuZΦt5b}OV&b62~ gη^+mt탮e?4!_2s3u+-gHdW =:P(VbPB QiQ%kuyrH~ׁjWM敌  p;W#%?٫'ai/:[d̹:#a?B>b2~+|>TO8Q> GTx-]605Yx87 LW%8(g 7{WS=}6⢽BS5]J-xddw}!j;y>5tYBTgmJ_вt~bHk|՞qs3k W7Cq vgڸKV0[}j:. |6Xw'f|'ZIzDp#Pۤj zwmnHoaeڢ_t㵳IL;ǎ\ChYh{:5CG,6x5Ht'rCZhz{y۱|AYU1åMxmrHEY^<ǗJ^NI85|V^z7 ݇:ޭq:ObKr;:c 'nAPgXer6I鲎SۥZ9l8'By.YU=>3sWY^[BF\k1i^fj֤. Hz5)om j>6F<{TZwũM(p=] }c=L06axT}ˎU껬C3331ě 䝶QS\9Zt\t*葾zQFLbIgF:c㞔8{i{>aqנo@[M:huRIq/^Z AwMzmG95u8y]0]wwm'>#gA p>uBQ/g(yLo!&Hgv[D8S"DWd\%L1H˲G̓5/̪淹q `t'q#nږZ Zc?!?Xž"__^["D2ᙏpӜR\mH]?K'$G}pE(-U[|'l>_qWf;8#$v;SZ/j={-`F&f\gcf\}[xa4:viec@)H(OYͧq#2, 78r~av]$7cZŞR}SqE8@F`r7>-G{ϐ^U+mSRNnњ럠@P@5lӽ.G*kfnnO\mOM{~N?#BY%*y\,H>bAqyrȞc f?YYk0ƈ0B=n4ћ$>klsBZ\&o0B{?WP Rz|هF\fTՊQ}2qxSQkiGqƓ_-ReoطR)e|} vj9?~'z6j.o"Nn=Kkf&{SFdZ1܋?9OHltߚmLN89PᇽM$ᔞe%,17G<\x78A9PW(7$uSRܷ+ʊ9W[> M'"O٦m9yG?0PLcBl:c5qK/c0L"H*sAVF.};øն-&Ky1V.'VNlw:3Yqץ&Hm8xS˝>ҜOvʃFTm # x+Q,!_X I\ݜ:jr;-gt-4볳4eTy_>UF,I,NIޏh$]=34Q@$x\9.5e[~GʣEVzȗ>fɞR9|N1m"|*.9 @<[Eux&r׼ʝgp{UP=µB6jΕjppEtyەZpqz7Ў6{wW^9Ç w$Icqy6jJO ǥX"է+νr3шꐸuȵ6adsZbzHXbYuD]݀dJ2X5q8RM#bT,z9ۻ%.#r3N{I.sbL TK;*K(a٣)O4߂c sUQhGA!9G^54j):׬bIVnȫx<2/KԶAXHQ·X?y+2ryhގd v"dϓEʬ(frs4)΅[.؉\=Ev q2=^qiP5$ٌV|݁DSk-?Vc ӅE7kQYf<+ZΒ8#v~RFz㺓OL09OAJJ_ ;:[{c aG.zJq1N¥!a[`)+Y+t,lJMyr;EAk[k`-{sǿGiʪ((MkWnpA;#4~ NRRr<̤ ՋG llpD9@9#l_W ;Y sJA24-Zh}aU0|ҵj1ۛvʗZ[f\6[d>LiOʸ`AYHXPZ2hpȭЂGKƽrس6~: Ay$X,5oQ}:݂7ܓҞkRZeEYTIu oSԤ2{s1UN1w~ܖ,L4uI댐H8pk"]סIq}ܬIC|7.{6ۋ$OkrG+DY*6߰дm>OʏIN 7uӨK f}69tڬʖ޻2˘:67P$:Wci0:d@j-h.!&Ϡ?k3+}dsٳF<:Җh貞Ybek! g>L23+4nTtj]2-ջn>5/g c,E+VQ4 3ܟ c?:|?,}Fppyql7M6,=@$OZeY Q}+E;<7C.T!~Y< dFFϻzՏ>9*R1OD;>\O1B> wwB+0Ҽ?2E \[7"+boXE mg\ ò`ŏǮ ~)yJ0M8m.VEl&1~U*0*S#q}2" vr p|jâYiw7>n$DK@:\pǖ'F7?+44cckA_Ge-ow8>)E1}Dc"2ƪ4;~6n|Tëɨ]#)#R^b_ܔusϦ\;9mzˆ~Su8d_Rq֯GnZЏݿck,TYr'V i{QMkԵ>!bqQu4kc#u\j]<@w|JQ>(ыoP˞s"ۧIp?*rs\$x\'=*p{wѼf ! Q/vOjHo梢y!I'/$KE:Xk ^eO5۲ѽyg9`<ҍR!Xy- HU:{Eh\s3gb/Ǿ.6+Jh_ȷiv$[LvXܠ_S;{χ$4Fm'NQ$=6ÖR4Ei_m}BEĐoEV:ǦٽҎ^(L߀jNȗqٲ| QuxٮFʯ*ȬWlӠ.67_B:wYڳOidcApO9|lYu.-ӌk/o4s`=v* լ7?awZ# -R.CK'P%o'bJYhIH뷺Ǥ׷k dˀr% =-zŴvkn#?!pX (xa?զo#/?k7z]5%N>T[_"gWN{RpFJտ?,ќqT2N.̊#rn|" WkE-`yYёq#fkXף7SDɲ;x#/h03ƑYGk1ꬶD=@r x_$u%G҈zS{V qSYR?0,z}C*FYg{2L;IඥvO1ʓSyk^5ؓp>Cƒrq֯cZ.T2՞eIJ^ic@#BF@$䞣ց/-ա}6a2q܈x;2:߮U=Gc|ϏQ+t\'y\d|5?kż%R )6[-~^%QGcϪ ԠgK pgmrڍ$>B1˗nyik{-//6Ď\dʲ,+:x_P'VmBsA;wTyWx{bumab 3Q ~PS:)VQA_ޕ^?GڽXDHu_:3Q~7|d.w>jnk1|-ě #+ + %G)@3E0?l>jbasuppFF~tbI;.@! 3ݏp`OwǨj1=:Q=)d@v(2s5&ohdI70[E=wr)A@Έ]T3ZO KdꚄ=ڮ{"M;o2̤yP0ϜoWE'V S+D2?U554Ss=vVy[jxwp?T([/I?QAYe`|O^hթNqCM ȧjoD1S na:9U8\-b SLWH>9`߽-=Y{A$[= g -Dz.dS7UѵB!$ceP|7-DfY r|EXZGEMzkqceQ_ ?*z4_XXo$S$_\^EOBİBĈ!:vy&r}re{S~ $&R}t8'{KV+V/}cd"1 )V|_knFsJ[?a/#ZyCO`Xj ʞ*]{Uq*d7lxŷ+ɟV7MڵKմݹ8(+N&$ъi*2dK2G ~4)WD7 {cO1ROlpwk/;B g?N[! a??kC$SGNs%լ ~4@}2&OI|czc  ˇ8 d[|eH$to <2Pv\+%ȿic^ѹg\ȲĎ0/GuTׁU֠wk#ee?!"0݀;îz.΁zd c+H3? M/mRfʺelC;ym]=?0MQT4g-:˔RpBy8.\~e֖k|5isq (mz|0n@TV7bE;]^'4Ԗnb0Dh?Hdng|QwsiR.ZE$2pm[-ķW`(=C19V7ًM;0T'MeJ1+MF#jLA$i?HZI@?n%JYrr Q-BEӹrU}SFI5?1%<(tQ39-+BJBMtr(U%gvF-t1G'Ut7]kT+w*OĈCsVK~΢+W;< 5tԬKv+Wxr{g}wR;v^|ZkE-֌-FᮚiGcfbI>fV|kycyH#P>H.9 >S9P^]{L?S7$RI)D\kwi搟54xG=s$춒p1Mc|笮~4C|㤏ae!Vh̄G9:m`RDw`T,ewn[-r$},lne;n+95+pIe x}kk}AWlPwN <˯Y_魷\<;b3#i&9{dqAeqTƹ5N)S~{Ÿl`miX\cph|#y)([4s4lul@% |P ;l>(=7FeX{O֡;,| kz-`c#ƭ^5ɳmd=ݬMJ'hɨD>oj1Rע1ɉ-@)h􁈭@[Ǝd~Qa\}.a?!i[cmia9/VH ;Αa)=nR&yFgimbB)9A"pN3`G犰 \d%#')~o=m=ÝX}F~*$2xRuaZKHD I;K)" N3z=ɂm5o,}A?uUuJX^72K~T|:YmG]]A0XRZk(ĐFm=$jJ%Gn?}PKҴyMFR~Q4[;XvuX/M}\Ei446ۺi&t6Qi7X6We>Tr=r;^o5A M+Td)e 1K8;C:ePe8d.ΦZ9Z(XpKR;I^f+bZՋ+r yuPsڗ%KVZA'篾פ;8ѭa'M!9jٜdc<(KF;U9_%N&;Z}NX"bߖ |873ERO_ 5'6m(Z@#rONxzk]`.18VcZni{ucȇR3֬OwcglM0sː󪬺mj]\I Ɍ;}%_/'KI}^?JL&$K6*sa5b$oIEox럑<|$t1IdFC{4{ YQy 1P`eu#e #U6S#U YJdCç1=f>SޗBvn#nz ָY z)MDj ?8iur Habw,|I ;:/'ar/5 Mv~~iLd;7`Jw5dUR{8Жkm^b9[<|g"6VymDf^X^YTr#~ڒHe`i۷ w䥮 l}wtĊHy`>}j>R2u'+pyy$VGu McSNfK\ [1gǁXm>@ʹ`;Ip2.פ]Jv+۟U=C\/iåG~ʖ4U}=vZ9EbA,ӄ-Y e&,˶dr<(z$KkjF)n 9G2Ƒ8.IucE& mM !<>uva>ά8n-RmK@m1mx$eyלY:<㓏N)SӔMX[gSdԇ/EY3Ky Ek^eWlT`d mVˠo7xkMzV.I?Z\Ld;:-I gddSL 1sB֓cBybNl#-.pX;y7[K[e:~_߅zC"83IU  yU?JgzD-!8~J)!(A++d}kȫʁ~'SQ$-j8XX~& NV={_k:aB;Ɯq䝿j/vQ8)סxbzGlʏPޱ]מf?3VC#4oAbU?J>% {m<=ݝ7'PP1ѥWuvdc@n3BB <7* ֮`Q.Ġ׸?n 3M^m|svD鏰55"m}0OՇ:=v I)gWk?aN~3FO_^`: sseaV Hc>7̣D:%c*CJ?|>)2m1c2M F{t™:6@xJ4k=$\6Qjߕp^ya*gyp13ޯ]h]Je1\d8Nrm"PI1Y\-!\1S<:G{df?L/n҇*4_E$OiJ~iǢVţh,d94M{I 5p~ ? ea e`r BFfB/i\|,pY࿘3?#B{K'n\ @R0T*uiZļ0ګe!GW{sNrTb?)&s"S[*H*S;}++Ķ@ t?CL_*+qȾ(&A./\I}S> m֟jd{ cb=-q;Yh(Ip Y; x_BBV(ܞ<fZr:;bfv2wgm?#od|w6}|FU]M=oKcZ2mjqwfbʬ?:{dTfG; cq~.~& OwVBkqzou۱,< 4ݚiOSMRIb9$j# /\*#Ɇ5Iu=iĆ A; 82#΍aVԜw,ܬ7WK̒s`GCP#|6Ȥ9۾߀ԍL8[hcEgmhoVvy6P{;V%#6ƞ/U\:_$䴶 2?h جYM$&!_F\Vr2y7vߔۡYGۅW p7(0$!>YxS_ $2ZMRRq@y!%! 0zor5gU)q .(r}-!gpG%42a䋖]{E7D` ꦎ] d˧(D16V64Gt+j/\v26n։6> 9dxgGU]lwTΑA=[Y\hBfapkI@(f^?(}vđH`㻖uMywB !ƺ\7y4QQAU`9>#T՝? #RLICicsIO'j6t+Ko)x[B-nԭp1@j9JUf\r\9-U]y&OW^ً?ūyUԪǪ0e38УBMKa$!ſO[[`h(V"<6Qґ3G@PB 'ߢ$ӕ9M>V~کe_8f GC}HfWx_#u=(=Nk9_ƒ Lmv&*6|[eRz}6/:ve?ZPS;4Fp+㕝楴j÷&=PzKjä3ʩav&a(n|yҊz(f8Vx;fB#H8 |Vl>F0L8>TH1JaI-|ax{?Joivy"wS6eϼRCNRSBqh}pz➴#t:5 IA xmj:IRy|:(UEgw%-sSqjcܾMVOqC=`9iJf+ki 7lN(}fmph&`Ou2},ǍB nl7S[80fpBeGOPy7P3H0OL!!mehHLjZV+{kF`qoJ6:: M{yL'p'vHLC<FGIoqQAw(0#r,`}m6.1>RHMCn21+ )ڡh由%Mޤ,<E j#J2yYo]~hDvk76Q~N1Uc$;*6@$yEp e{DGaHIg?ҤknLV1nK{ 丂9W RF̑#ۮ3Y9'aR-oVTv֪ςJǑ"t mM=I%-c>heXTRoOt(UҦdf* Oc8zZRt1M^`i̖һG Hw ykv\7`Oy*[cۓE+nmrs_j8¦.[uҊԤ/ݓOu9fHij'+gzeQmX;Of6>4 cx92$9=R߅m2=`<X|/4Cow{;>n_eL9qȫi ]G{zB2RBB`gRehDztݽX^A:]ʤ5X#arIGd{ y-lm׼mB#4(VbUs z z j(T +$zh(ӭ@I5} xvh~6mFɢsQ>~A<6%0jnܲ}O>cU͜${╊E%u9 mrsk B>ۇ2Y?بv[Df>%Godnx{c@4̣MyS0}M _RMOE.zfq)d~ 7x,m$ (55؀/qWiܬU$Djx7nda?*IO0<(& VVbqflBI5 HlSF^m AH9V5&2|j:f^q`wS06Rm Lx~#C L/Fnr zNk8_9ƕ6U5ŕFCBǴIGr 0ڜ,`lv?T <595I%BQrQ"M ]}x$ \1uާ,LqFu<)pr:&Q1jG09ǏƖ)ݖ$2:ݺy<9ʧVgJW 0:"܁Ѓy4j!U $g*f'r{6]w9QD^r^Za=US&P1x,Znwe?K:p"=f4TPX94A^$L\~7ֈOe䛿 3G] ڑC~١aq94zR;j[ [DmT`s֜Xr2e̺㾈QqDZLI6(o@&WFEHx 3v7qdԾWmi෻ƤiTlbXʑV:I/~4(r74b@i~/9Vc*U%Ζ*Y GZeh}ī45=Z\{W,2YvԠY%!S-_h71mD\liM@%3Y.`S <+19y”д-vW%1ħ|GҧpmvڞLMI#5VLt镝sPHX>I8.YvY%i>{iŅ$GЭt]f((V1ΠR6UnŌ)|wSkݼ֋, >,yc`j;S%d˜צ IK+iFҽ=G(rAWۏ8(jNԥ`Hmz<<~乌u)!(b3GZ{orϨ5[+ 'gWR m<GuՠM$$QW\I 4,[2$/Bp{Rqg-ٱcF|Xݧ:4J͹^`= 8?LML1<v#94,-,X. @w @9HC b|c'-IUצ-0Dܿx^Qn?ub\sxn5a>+M-r=H%c(*h-#5ioc X.B>f5bv~`dxVbWS(=xr0V^3>aG4RC]^qn2Ij?Fn~*xdƥ} qDڷ̲VU/_YN9N? N__h»K"~߈$B>[PZ^QsNOօ<s4A޲M Et䃙OxB4F+kCT?ip~[I">R?J[wCєQ7gEFƝ鯌oSӣzQ]?G<۝GɅUfU|3b]EnJݿ\_Qbp mO*Z} uskVՀ5W&k>c6 z#{vӷ AMVy>wl2O]ÍҴw^}Z\vMQy a:%xW.}o!ZLIE B[]E IoeZeʥ?!3--umL%J6U=Si7H j7iA]{j6utEX.LJ;PT"\~$Tp֣8L{G&<Y 6B'K֣+l19NRal7' ?\]L1'l^Nώx,]<źLZp hۅ&`0=4Fܯ)iy{.]1ߟ? a&Sx2"-,s zkAd0nRp1$)A'2lJc7==ؔif^=*l:UHhQ8)o mhdp|;}+-DNJ1sAm8ʕ?CR\oρykql߬::|q%EUؓ{C;|E0_v0E^mu^T$WziclOn-!joHwPy5ZL6BNq9lc$ѻtde S"϶E ͲE~2J]=0_rWጚ3Q] |(A4Eb]# y;}Ƶk{yi<=+%r ~zӕ8v[RVϼT({N.F=">yQaVixb$CqlD폍J#<׽s?宾,qI49y%&d?o]O3|iދpFvzGk!2sL=?D&NnП<h|̩T3$&7,2hQ|OODQAJF(沚]=) h!sRGAވ ~Q]' |_ lJIC{cT!?嗦?uym|N V'CD!Hy;KY\wAy`OS%"w`>IQOPH/i@"}Wu?h#"%ר 괄 =4tXT3DPY~Fy )s?J<[ǖ#eۤ;qJk`٦v ~^mtk۩n`UGAMH ˳>K滰Ҵ͑ҊFzQ 8~!=TR_yd`Ȣ~a}Gi]=IoR93~ 9\vR#L3ԅAx+R2G점~ɢ)|M bVӟ?xu$A\Eɘw ~ja {`:O&tAa!=Fs[찢!jxML[>Ѯ$n='5Ĭs12'8SA=aHy ϕׂ 9T HそA>Gԟp4U.=bk a׹kFt-%;_I%ITd݁zPa0jcU}F}y[\$1m WP[?/w1ќK6O;!Vm걓r)=1Qqd+it?"+N7iG$ȥ3#Na($6[T n2W }*XϴK}e--޻dƇ-$QQc0jn2>}j/x~Ok+vgI•T~ؗácd6rBv9wO-3D@ 'PL<ܾ? 9wZecstDH1gne=G|Җ6\tKw2J*q; NyQX-?y"xI%>5%c)GiN ;RQ$4o,X>?ªLdǻ\n.&ldEm3wUR"STȏHjC$l>"|wQzށu[E5Đ9#lև.g2I yQ8vuI:]_Z"Ki icg+vVi}OI2~uFʲ*K{`^aOV=2VÅmRχ`QˈA$oQd9;jW^׬tXP2̀*Z,br{<1:;.jNp_~IB R8kX~݇ Lez󯣔kZi ʎc½7" o N99**8XoQW2C}?}bIrն(-M6N6ኾ<&$u]҇oY@FDq`(T)gl>)ÝL4䜥Pѱ3hᷥPhnYo21ސlB_=J lC҈Np@D"WJj>=iwQɂ;?F5]-%XgJM;ǣ=j/3=2#^D]ZHI!FK7񬹭t_df]+ًxDv\rA_%3U#5ɿ)8W>c#7#bi6Ҩ Pѡ1>$P^Lfq5e{K\~5ٰ^)6C|{FNmR~kȩobD'`xJ0EuUja|!=-Uq]) ^\+Zfw,{褖$M+~,K̹G$rp:n )sJ­(:@`6i[KynGP qcO@*ۦGk%aoMIjڟe)CuAo\~Uc$Y˱vV^@7(v18KTwMq.N>Ͼ g/4K WfL7ۙpz})){Pd6w :ACsQўal\)áiBwK'UArC;ZpؕոshՐ%J^ݿ2ṱ499[xWY _9`~u[J- <#KQPxZrr *U3N[y"xݎ^Ldk:]Ž|9s5`)ڦG4I WfPVrN$mm.##~1U ѻIrBo[}:pȪ꼼 [i*9n8SU ̌3ekv ".jyƳ;A$VcFYD/t--i>w(($xX4NTUC&[iVl@]Ƞ2e'Ge|ԼẔIBfT1C涕b =,0h9 IO,|$$ 1IW99[|ͣtWvp3,[?k89=+屷KUr=GP˩7rs/)9f.sS-~Eu w-YsCsSqd]O}T ţjcXKH2"Ox~lmcKGP|}Vo ֡; L=8qAWJUrsj: x.q)RK")ܮ:7pS)9;e&K{*Dk.-} y{_~Z;z [ߤ2mot$|~n.ʟd /]DXfLԭ-"=A_񶖸YYP T8E=!p<~Ś|x …;KmŨE 6|hP*j x)Md<»i&W>EёPl]e*FA؛dP9~[~9\FDԢ68'j]iW@',q4o4[~Y{'f{ c.} af+jV^p-H[j0R| Jd*ai#a2 8~0W]J~ɗ3 k2! T>1SG8*ndC102AccS^'mrFBPԚЭk ́o~7:uAf'Rf0F:i~9߯~H=z)Qr\NA5~5Naz?}B :,sc9ܚ\H}!WqQBJkɢMIL2k 8˟k/Z4_Fl ?/lYۏV''ѭ'Z-4K4|Uyq}d %*MCl%Ghqq%|>&$D'|jP[P)K+$Mͻb4h®=nѢclGV^]zGz?Ց27X+yZY 7 35#}ӱbEW'9\a\Z䌊<{R9o45Y34vOA- Bէ=sIƦ>GZ^e` ^#K{Ps߾BJ2c c=~{Lk;߲ZJ׌.@"mO/hVCXN!PѾB/Br;((쌮ZeuEmXk&e,i1RlwSbĜ-.>yv>>T̀5Hiv1H(S]nZڰV!`/ /M{#Σ078 sէѶH0=|V.(&*88‘H gttүj|=y{^y=Fwރ4IZjw'3wKN$}ՁQV5N49oX\`"I`dE7VmY0^nB{S1*A5$ ɫ@PKOigljzbTճ[i T: ]\љpvjc6Je}=EH**ü(Z4/=&>]X&S~O}BPj.!'UFЮut`y&4Ag9ոt<6×8jZVXҲ;ŭEuEHϵqҤɒWHԲK9u 9J C݀4[y#;!P>tMq8f377h{Wl׽ڻY ˌdr/7K}.r5=fЯ5cg>.]rMi)Y"iش?LJ9W>oRG$ }¨ )nV(}/pjvs? PxYm3OqFe߯»u BT={>(Qh:*R_ƻB$ 5+Ж ddtСI"K<1"L3Sъ+bmٽ謁 8WC+*M(P/x|Dg$F4(UM/?7}~H| _F@aJ*ZF^4l |`6ޅ ٧SFOB^f kSUSF (P2HH;+b KےhPF\5KTYRsA=}SG4(Up .gp{7_yBўq']Hc>?n Rɠ4IOO `9If}(T ; <=)͗j*2!&7hP]YxQyС@;⫼JI6BEҽ.€L VDP="}_ N(Ta5LN@&AY )3_VB(^*'d)aС@D[(T"!k(Pdnђt+qS5-F'sJ?Z+á_@t23(rA#k0$ha@BFy#_88sJ`5Qu-+f&vMf>**_jp#o̊(Ul? Courriel-0.40/t/data/stress-test/0000775000175000017500000000000012653205401016535 5ustar autarchautarchCourriel-0.40/t/data/stress-test/mbox_mime_missing-abuse.txt0000644000175000017500000001430312653205401024077 0ustar autarchautarchFrom tomcat-user-return-131938-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Thu Aug 25 21:22:13 2005 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 85219 invoked from network); 25 Aug 2005 21:22:13 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 25 Aug 2005 21:22:13 -0000 Received: (qmail 42982 invoked by uid 500); 25 Aug 2005 21:21:53 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 42962 invoked by uid 500); 25 Aug 2005 21:21:53 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 42949 invoked by uid 99); 25 Aug 2005 21:21:53 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Aug 2005 14:21:53 -0700 X-ASF-Spam-Status: No, hits=4.2 required=10.0 tests=DNS_FROM_RFC_ABUSE,FORGED_YAHOO_RCVD,MIME_MISSING_BOUNDARY,MISSING_DATE,MISSING_MIMEOLE,NO_REAL_NAME,PRIORITY_NO_NAME X-Spam-Check-By: apache.org Received-SPF: neutral (asf.osuosl.org: local policy) Received: from [209.194.72.195] (HELO localhost) (209.194.72.195) by apache.org (qpsmtpd/0.29) with SMTP; Thu, 25 Aug 2005 14:22:07 -0700 FROM: support@yahoo.com TO: tomcat-user@jakarta.apache.org SUBJECT:Re: Yahoo! MIME-Version: 1.0 X-Priotity: 3 X-MSMail-Priority: Normal Content-Type: multipart/mixed; boundary="--------looool--" X-Virus-Checked: Checked by ClamAV on apache.org Message-Id: <20050825212210.5B4C310FB2B5@asf.osuosl.org> Date: Thu, 25 Aug 2005 14:22:10 -0700 (PDT) X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N ----------looool-- Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Try this. From tomcat-user-return-131939-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Thu Aug 25 21:29:53 2005 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 87613 invoked from network); 25 Aug 2005 21:29:53 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 25 Aug 2005 21:29:53 -0000 Received: (qmail 54508 invoked by uid 500); 25 Aug 2005 21:29:39 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 54495 invoked by uid 500); 25 Aug 2005 21:29:38 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 54482 invoked by uid 99); 25 Aug 2005 21:29:38 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Aug 2005 14:29:38 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: neutral (asf.osuosl.org: local policy) Received: from [195.92.195.173] (HELO cmailg3.svr.pol.co.uk) (195.92.195.173) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Aug 2005 14:29:55 -0700 Received: from user-6291.l3.c4.dsl.pol.co.uk ([81.79.216.147] helo=[127.0.0.1]) by cmailg3.svr.pol.co.uk with esmtp (Exim 4.41) id 1E8PHz-0000W9-Qz for tomcat-user@jakarta.apache.org; Thu, 25 Aug 2005 22:29:35 +0100 Message-ID: <430E383E.1070107@apache.org> Date: Thu, 25 Aug 2005 22:29:34 +0100 From: Mark Thomas User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tomcat Users List Subject: Re: Single copy of Tomcat shared amongst multiple users References: <430E1B40.4010100@mindspring.com> In-Reply-To: <430E1B40.4010100@mindspring.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Franklin Phan wrote: > In RUNNING.txt, a paragraph says: > > "In many circumstances, it is desirable to have a single copy of a Tomcat 4 > binary distribution shared among multiple users on the same server. To > make > this possible, you must configure a CATALINA_BASE environment variable (in > addition to CATALINA_HOME as described above) that points to a directory > that is unique to your instance." > > I'm not understanding this. I've been thinking about having multiple > installs of Tomcat 4 on the same server. I'm now wondering whether what > RUNNING.txt suggests can take the place of having multiple installs. > But I'm not understanding how just setting a CATALINA_BASE env var can > achieve this. I can only set one CATALINA_BASE env var, right? What if > there are four ...um...not instances, but...users who each want their > own Tomcat to work with? How is it possible to have four CATALINA_BASE > environment variables? You need to read the rest of the text below the paragraph you quoted. In summary, There is one CATALINA_HOME which all users use for the the following directories: /bin /common /server Each user sets their own CATALINA_BASE that points to their own copy of the following directories: /conf /logs /shared /webapps /work /temp Mark --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_msgid_missing_1.txt0000644000175000017500000000334312653205401023400 0ustar autarchautarchFrom tomcat-user-return-33287-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Tue May 01 22:12:10 2001 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 21816 invoked by uid 500); 1 May 2001 22:11:52 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk Reply-To: tomcat-user@jakarta.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 21510 invoked from network); 1 May 2001 22:11:33 -0000 Received: from qmail5.vsto.net (HELO qmail5.visto.com) (209.185.20.135) by h31.sny.collab.net with SMTP; 1 May 2001 22:11:33 -0000 Received: (qmail 11444 invoked by alias); Received: from unknown (HELO mps2) (206.79.140.180) by 0 with SMTP; 1 May 2001 15:02:04 -0700 Sender: dmitryr@visto.com Reply-To: DMITRYR@VISTO.COM From: "Dmitry Rogatkin" Subject: RE: Displaying images in wml Date: Tue, 01 May 2001 15:00:18 -0700 X-Mailer: Visto To: tomcat-user@jakarta.apache.org MIME-Version: 1.0 X-Mailer: Visto Server Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N Maybe you also know why using Nokia WAP device simulator I can see images= when directly access Tomcat server, but when use WAP gateway, I always s= ee images as icons - "image not available". Dmitry R., dmitryr@visto.com Chief Architect, MetricStream.COM Santa Clara, CA Courriel-0.40/t/data/stress-test/mbox_nntp_references_split.txt0000644000175000017500000000561612653205401024724 0ustar autarchautarchX-JNN-NNTPD-Xref: nntp.perl.org perl.perl6.language:12609/28009 Newsgroups: perl.perl6.language Path: nntp.perl.org Xref: nntp.perl.org perl.perl6.language:12609 Return-Path: Mailing-List: contact perl6-language-help@perl.org; run by ezmlm Delivered-To: mailing list perl6-language@perl.org Delivered-To: moderator for perl6-language@perl.org Received: (qmail 81971 invoked by uid 76); 21 Nov 2002 02:23:12 -0000 Received: from mailhost2.auckland.ac.nz (HELO mailhost2.auckland.ac.nz) (130.216.191.4) by onion.perl.org (qpsmtpd/0.12) with SMTP; 2002-11-21 02:23:12Z Received: from mailhost.auckland.ac.nz (IDENT:mirapoint@mailhost [130.216.191.61]) by mailhost2.auckland.ac.nz (8.9.2/8.9.2/8.9.2-ua) with ESMTP id PAA19035; Thu, 21 Nov 2002 15:22:53 +1300 (NZDT) Received: from tanya.sig.net.nz (ben-vm.itss.auckland.ac.nz [130.216.4.76]) by mailhost.auckland.ac.nz (Mirapoint Messaging Server MOS 3.2.1.6-EA) with ESMTP id AKB02599; Thu, 21 Nov 2002 15:22:52 +1300 (NZDT) Received: from localhost (localhost [127.0.0.1]) by tanya.sig.net.nz (8.12.5/8.12.2/Debian -5) with ESMTP id gAL2Mvfw001341; Thu, 21 Nov 2002 15:22:57 +1300 Subject: Re: String concatentation operator To: Mark Biggar Cc: perl6-language@perl.org In-Reply-To: <3DDBCD19.9030608@attbi.com> References: <20021114202930.GT547@ool-18b93024.dyn.optonline.net> <20021114214715.GX547@ool-18b93024.dyn.optonl ine.net> <3DD42A6F.4060603@vulpes.com> <3DD6F50A.2000504@conway.org> <3DD7FE9B.8070301@conway.org> <20021118020031.GC3579@ouroboros.anu .edu.au> <20021118051040.36543.qmail@onion.perl.org> <1037673259.29506.14.camel@tanya.sig.net.nz> <3DDBCD19.9030608@attbi.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) Date: 21 Nov 2002 15:22:57 +1300 Message-ID: <1037845377.1222.23.camel@tanya.sig.net.nz> Mime-Version: 1.0 From: martin@sig.net.nz (Martin D Kealey) On Thu, 2002-11-21 at 06:57, Mark Biggar wrote: > Martin D Kealey wrote: > > I want Perl to run 128 times faster on a 128 CPU machine... now I know > > that's not entirely realistic, but it should be able to run at least say > > 60 times faster. > > Amdahl's law applies here: "no amount of paralellism will speed up > an inheirently sequential algorithm" True in the abstract, but in practice in most languages an awful lot of algorithms that I inherently sequential get serialized by the compiler because it can't tell it's safe to do otherwise. This is where pure-functional or applicative languages can have a big performance win - because the compile almost alway I see that things are safe to parallelize. -Martin Courriel-0.40/t/data/stress-test/mbox_excessive-bounces.txt0000644000175000017500000000230712653205401023755 0ustar autarchautarchDate: Wed, 25 Apr 2007 09:41:05 +0000 From: dojo-interest-request@dojotoolkit.org To: archive_dojo-interest_dojotoolkit.org@grokbase.com Subject: confirm 1cdd89380e8211bacdd93cad6715f55137e3264e Your membership in the mailing list Dojo-interest has been disabled due to excessive bounces The last bounce received from you was dated 25-Apr-2007. You will not get any more messages from this list until you re-enable your membership. You will receive 3 more reminders like this before your membership in the list is deleted. To re-enable your membership, you can simply respond to this message (leaving the Subject: line intact), or visit the confirmation page at http://dojotoolkit.org/mailman/confirm/dojo-interest/1cdd89380e8211bacdd93cad6715f55137e3264e You can also visit your membership page at http://dojotoolkit.org/mailman/options/dojo-interest/archive_dojo-interest_dojotoolkit.org%40grokbase.com On your membership page, you can change various delivery options such as your email address and whether you get digests or not. As a reminder, your membership password is sp1nc1ty If you have any questions or problems, you can contact the list owner at dojo-interest-owner@dojotoolkit.orgCourriel-0.40/t/data/stress-test/mbox_local_from.txt0000644000175000017500000000500612653205401022437 0ustar autarchautarchFrom ubuntuser@nburmandesign Wed Jan 19 00:48:13 2005 Received: from shawidc-mo1.cg.shawcable.net ([24.71.223.10] helo=pd2mo2so.prod.shaw.ca) by rince.africaninspace.com with esmtp (Exim 4.34) id 1Cr9dV-00017L-Ba for ubuntu-users@lists.ubuntu.com; Wed, 19 Jan 2005 00:48:13 -0600 Received: from pd5mr1so.prod.shaw.ca (pd5mr1so-qfe3.prod.shaw.ca [10.0.141.232]) by l-daemon (Sun ONE Messaging Server 6.0 HotFix 1.01 (built Mar 15 2004)) with ESMTP id <0IAJ00FW3XKCSF10@l-daemon> for ubuntu-users@lists.ubuntu.com; Tue, 18 Jan 2005 23:48:12 -0700 (MST) Received: from pn2ml6so.prod.shaw.ca ([10.0.121.150]) by pd5mr1so.prod.shaw.ca (Sun ONE Messaging Server 6.0 HotFix 1.01 (built Mar 15 2004)) with ESMTP id <0IAJ00FSBXKC7F90@pd5mr1so.prod.shaw.ca> for ubuntu-users@lists.ubuntu.com; Tue, 18 Jan 2005 23:48:12 -0700 (MST) Received: from 192.168.0.102 (S01060011952d0eb5.cg.shawcable.net [68.146.15.111]) by l-daemon (iPlanet Messaging Server 5.2 HotFix 1.18 (built Jul 28 2003)) with ESMTP id <0IAJ00M8HXKCQB@l-daemon> for ubuntu-users@lists.ubuntu.com; Tue, 18 Jan 2005 23:48:12 -0700 (MST) Date: Tue, 18 Jan 2005 23:48:07 -0700 From: nicholas To: Ubuntu Users mailing list Message-id: <1106117287.10627.3.camel@localhost.localdomain> MIME-version: 1.0 X-Mailer: Evolution 2.0.2 Content-type: text/plain Content-transfer-encoding: 7bit X-Mailman-Approved-At: Wed, 02 Feb 2005 12:15:14 -0600 Subject: after apt-get, how to run libgmp3? X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ubuntu Help and User Discussions List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Jan 2005 06:48:13 -0000 According to Synaptic I have a n encoder called libgmp3 on my system. I ran 'sudo apt-get install libgmp3' - now what? how do i use it? Apparently its an mp3 encoder. Nicholas Courriel-0.40/t/data/stress-test/mbox_delivered_to.txt0000644000175000017500000000223212653205401022765 0ustar autarchautarchFrom duncan@x180.com Wed Mar 15 07:41:35 2000 Return-Path: Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 50438 invoked from network); 15 Mar 2000 07:41:35 -0000 Received: from uhura.concentric.net (206.173.118.93) by locus.apache.org with SMTP; 15 Mar 2000 07:41:35 -0000 Received: from marconi.concentric.net (marconi.concentric.net [206.173.118.71]) by uhura.concentric.net (8.9.1a/(98/12/15 5.12)) id CAA05530; Wed, 15 Mar 2000 02:41:34 -0500 (EST) [1-800-745-2747 The Concentric Network] Errors-To: Received: from rome (w002.z208176150.sjc-ca.dsl.cnc.net [208.176.150.2]) by marconi.concentric.net (8.9.1a) id CAA29821; Wed, 15 Mar 2000 02:41:33 -0500 (EST) Date: Tue, 14 Mar 2000 23:41:51 -0800 (PST) From: James Duncan Davidson X-Sender: duncan@rome To: tomcat-user@jakarta.apache.org Subject: test Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam-Rating: locus.apache.org 1.6.2 0/1000/N test Courriel-0.40/t/data/stress-test/mbox_perl_nntp_orig.txt0000644000175000017500000000316212653205401023344 0ustar autarchautarchFrom perl5-porters@perl.org Wed Jan 31 11:52:41 2001 Received: (qmail 12022 invoked by uid 511); 31 Jan 2001 19:49:54 -0000 To: perl5-porters@perl.org Delivered-To: perlmail-perlbug@perl.org Cc: richard@perl.org Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: [ID 20010131.021] OK: perl v5.6.1 +v5.6.1-TRIAL2 on VMS_AXP V7.1 (UNINSTALLED) MIME-Version: 1.0 Date: Wed, 31 Jan 2001 11:52:41 -0800 (PST) Message-ID: From: pvhp@forte.com X-Authentication-Warning: aspara.forte.com: pvhp owned process doing -bs X-Errors-To: richard@perl.org X-Original-CC: vmsperl@perl.org X-Original-From: Peter Prymmer X-Original-Message-Id: X-Original-Subject: OK: perl v5.6.1 +v5.6.1-TRIAL2 on VMS_AXP V7.1 (UNINSTALLED) X-Original-To: perlbug@perl.org X-Perlbug-Admin-Url-Bug: http://bugs.perl.org/admin/perlbug.cgi?req=bidmid s&bidmids=20010131.021 X-Perlbug-Url-Bug: http://bugs.perl.org/perlbug.cgi?req=bid&bid=20010131.021 X-Perlbug: Perlbug(tron) v2.36 Delivered-To: mailing list perl5-porters@perl.org Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm Newsgroups: perl.perl5.porters,perl.vmsperl Path: nntp.perl.org Return-Path: Xref: nntp.perl.org perl.perl5.porters:29960 perl.vmsperl:8084 X-JNN-List-Post: X-JNN-NNTPD-Xref: nntp.perl.org perl.perl5.porters:29960 This is a success report for perl from pvhp@corie.forte.com, generated with the help of perlbug 1.33 running under perl v5.7.0. Perl reported to build OK on this system. Courriel-0.40/t/data/stress-test/mbox_msgid_embedded-quotes.txt0000644000175000017500000000751712653205401024565 0ustar autarchautarchFrom tomcat-user-return-131331-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Mon Aug 15 22:19:14 2005 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 2730 invoked from network); 15 Aug 2005 22:19:13 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 15 Aug 2005 22:19:13 -0000 Received: (qmail 17885 invoked by uid 500); 15 Aug 2005 22:18:58 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 17875 invoked by uid 500); 15 Aug 2005 22:18:58 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 17862 invoked by uid 99); 15 Aug 2005 22:18:58 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Aug 2005 15:18:58 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: neutral (asf.osuosl.org: local policy) Received: from [209.121.69.211] (HELO pbco-server2.pbco.ca) (209.121.69.211) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Aug 2005 15:19:18 -0700 Received: from pbco-server2.pbco.ca (localhost [127.0.0.1]) by pbco-server2.pbco.ca (8.13.1/8.13.1) with ESMTP id j7FMIcCN023140 for ; Mon, 15 Aug 2005 15:18:46 -0700 Received: from pbco-server2.pbco.ca (root@localhost) by pbco-server2.pbco.ca (8.13.1/8.13.1/Submit) with ESMTP id j7FMIcbX023138 for ; Mon, 15 Aug 2005 15:18:38 -0700 Date: Mon, 15 Aug 2005 15:18:37 -0700 From: "Tim Lam" Sender: "Tim Lam" To: tomcat-user@jakarta.apache.org Message-ID: <"H0000079000951e6.1124144316.pbco-server2.pbco.ca*"@MHS> Subject: tomcat 5.0.19 randomly stops taking http requests x-scalix-Hops: 1 MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Tomcat 5.0.19 is actually still running, but stops taking http request= s randomly. It will run just fine for one or two weeks, then in the midd= les of the night, or over the weekend when no one is using tomcat at all, i= t stops taking requests (I know when it happens because I have a standal= one application that tries retrieving a webpage from Tomcat every half hou= r to check if it's still up). The catalina.out log file doesn't show anything unusual, it's actually= still running, so is the Tomcat process. But trying to reach a web pag= e will show a timeout error on any browser. And sometimes trying to shut= down tomcat after it's hung doesn't work, I have to manually kill the tomca= t process. I am using JVM 1.4.2_02. Any help would be appreciated, Thanks. ps. I am new to using this mailing list, and have a question, is it required to subscribe to the tomcat-user list in order to ask question= s? or can I just send emails to the list and replies will get sent back directly to my email address? --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_unknown8bit.txt0000644000175000017500000001033512653205401022611 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Thu Apr 27 02:43:02 2006 Return-Path: X-Original-To: archive_catalyst_lists.rawmode.org@mazrmail.com Delivered-To: archive_catalyst_lists.rawmode.org@mazrmail.com Received: from rawmode.org (HELO rawmode.org) (213.239.209.201) by s69759.xenosight.com (qpsmtpd/0.32) with ESMTP; Thu, 27 Apr 2006 02:43:01 -0500 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.60) (envelope-from ) id 1FZ13j-0007dJ-Fk; Thu, 27 Apr 2006 09:37:07 +0200 Received: from [72.232.3.146] (helo=jack.jumba.net.au) by rawmode.org with esmtp (Exim 4.60) (envelope-from ) id 1FZ13g-00027K-Us for catalyst@lists.rawmode.org; Thu, 27 Apr 2006 09:37:05 +0200 Received: from bjdean by jack.jumba.net.au with local (Exim 4.52) id 1FZ10j-0000Sx-Ii for catalyst@lists.rawmode.org; Thu, 27 Apr 2006 17:34:01 +1000 Date: Thu, 27 Apr 2006 17:34:01 +1000 From: Bradley Dean To: Catalyst Message-ID: <20060427073401.GA757@unimelb.edu.au> Mime-Version: 1.0 User-Agent: Mutt/1.4.1i X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - jack.jumba.net.au X-AntiAbuse: Original Domain - lists.rawmode.org X-AntiAbuse: Originator/Caller UID/GID - [32077 579] / [47 12] X-AntiAbuse: Sender Address Domain - jack.jumba.net.au X-Source: X-Source-Args: X-Source-Dir: Subject: [Catalyst] Has anybody seen PluginTestApp.pm? X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.7 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0331247181==" Mime-version: 1.0 Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Status: O X-Status: X-Keywords: X-UID: 1484 --===============0331247181== Content-Type: text/plain; charset=unknown-8bit Content-Disposition: inline Content-Transfer-Encoding: 8bit Greetings folks, just beginning to dip my toe into Catalyst - incidentally, despite the trolling, the recent "What a waste of time" thread had some useful information... :) > At 07:21 PM 4/26/2006, Scott Karns wrote: > >I am just now trying to install Catalyst-5.68 as downloaded from CPAN, > >but I'm getting a test failed on: > >t/unit_core_plugin................................Can't locate > >PluginTestApp.pm > > > >I see that there is a PluginTestApp.pm in the Catalyst-Plugin-Scheduler > >distribution package, but I can't find one in Catalyst-5.68. > > > >-- > >Scott Karns > > Me, too! (I hadn't gone back to see if anybody'd reported this yet) > I had only investigated to the point of seeing that 5.66 had a > package PluginTestApp; > in the unit_core_plugin.t source, but that that had disappeared by > 5.68. I'm seeing the same thing in Catalyst 5.68, in another install I've done recently I have Catalyst 5.678 which has a very different t/unit_core_plugin.t which includes a package declaration for PluginTestApp. Cheerio, Brad -- Bradley Dean ... å¹³é<9d><99> Software Engineer - http://bjdean.id.au/ Email: bjdean@bjdean.id.au Mobile: +61-413014395 AICSA - webmaster@aicsa.org.au - http://www.aicsa.org.au/ ICICLES Ski Club - webmaster@icicles.com.au - http://www.icicles.com.au/ --===============0331247181== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst --===============0331247181==--Courriel-0.40/t/data/stress-test/mbox_mime_auto-error-msg.txt0000644000175000017500000001731512653205401024222 0ustar autarchautarchFrom tomcat-user-return-90809-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Thu Jan 29 06:32:38 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 6895 invoked from network); 29 Jan 2004 06:32:38 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 29 Jan 2004 06:32:38 -0000 Received: (qmail 15604 invoked by uid 500); 29 Jan 2004 06:31:03 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 15537 invoked by uid 500); 29 Jan 2004 06:31:02 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 15397 invoked from network); 29 Jan 2004 06:31:01 -0000 Received: from unknown (HELO smtp2.mail.be.easynet.net) (212.100.160.76) by daedalus.apache.org with SMTP; 29 Jan 2004 06:31:01 -0000 Received: from 213-193-188-11.adsl.easynet.be ([213.193.188.11] helo=mycomeurope.com) by smtp2.mail.be.easynet.net with esmtp (Exim 4.22) id 1Am5hn-0000YS-SK for tomcat-user@jakarta.apache.org; Thu, 29 Jan 2004 07:31:11 +0100 Date: Thu, 29 Jan 2004 07:31:08 +0100 Message-Id: from: "Mailer-Daemon@mycomeurope.com" to: subject: Mycom Europe: Mail Delivery Error - tomcat-user@jakarta.apache.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_f0401290731080009" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N ------=_NextPart_f0401290731080009 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit ----- THIS IS AN AUTOMATED ERROR REPLY --- PLEASE CHECK THE SPELLING OF THE EMAIL-ADDRESS Dear Mailer-Daemon@mycomeurope.com (mailerror@mycomeurope.com), Your message "Mycom Europe: Mail Delivery Error - tomcat-user@jakarta.apache.org", sent to cannot be delivered due to the following error: tomcat-user@jakarta.apache.org - no such mailbox at MYCOMEUROPE.COM. Generally this means that a) There _really_ isn't such an address here at Mycom b) You have misspelled the address (and due to misspelling, refer to a)) Below is the header from the original message: Received: from pop3.easynet.be by FTGate SmartPop; Thu, 29 Jan 2004 07:31:07 +0100 Return-path: Envelope-to: mailerror@mycomeurope.com Delivery-date: Thu, 29 Jan 2004 07:24:23 +0100 Received: from mx3.mail.be.easynet.net ([2001:6f8:200:1::1:80]) by pop3.mail.be.easynet.net with esmtp (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.12) id 1Am5bA-0006hQ-00 for mailerror@mycomeurope.com; Thu, 29 Jan 2004 07:24:20 +0100 Received: from daedalus.apache.org ([208.185.179.12] helo=mail.apache.org) by mx3.mail.be.easynet.net with smtp (Exim 4.24) id 1Am5b9-0003Jh-HL for mailerror@mycomeurope.com; Thu, 29 Jan 2004 07:24:19 +0100 Received: (qmail 88525 invoked by uid 500); 29 Jan 2004 06:23:41 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 88495 invoked from network); 29 Jan 2004 06:23:41 -0000 Received: from unknown (HELO smtp2.mail.be.easynet.net) (212.100.160.76) by daedalus.apache.org with SMTP; 29 Jan 2004 06:23:41 -0000 Received: from 213-193-188-11.adsl.easynet.be ([213.193.188.11] helo=mycomeurope.com) by smtp2.mail.be.easynet.net with esmtp (Exim 4.22) id 1Am5ah-0000K7-JO for tomcat-user@jakarta.apache.org; Thu, 29 Jan 2004 07:23:51 +0100 Date: Thu, 29 Jan 2004 07:23:48 +0100 Dear Mailer-Daemon@mycomeurope.com (mailerror@mycomeurope.com), Your message "Mycom Europe: Mail Delivery Error - tomcat-user@jakarta.apache.org", sent to cannot be delivered due to the following error: tomcat-user@jakarta.apache.org - no such mailbox at MYCOMEUROPE.COM. Generally this means that a) There _really_ isn't such an address here at Mycom b) You have misspelled the address (and due to misspelling, refer to a)) Below is the header from the original message: Received: from pop3.easynet.be by FTGate SmartPop; Thu, 29 Jan 2004 07:31:07 +0100 Return-path: Envelope-to: mailerror@mycomeurope.com Delivery-date: Thu, 29 Jan 2004 07:24:23 +0100 Received: from mx3.mail.be.easynet.net ([2001:6f8:200:1::1:80]) by pop3.mail.be.easynet.net with esmtp (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.12) id 1Am5bA-0006hQ-00 for mailerror@mycomeurope.com; Thu, 29 Jan 2004 07:24:20 +0100 Received: from daedalus.apache.org ([208.185.179.12] helo=mail.apache.org) by mx3.mail.be.easynet.net with smtp (Exim 4.24) id 1Am5b9-0003Jh-HL for mailerror@mycomeurope.com; Thu, 29 Jan 2004 07:24:19 +0100 Received: (qmail 88525 invoked by uid 500); 29 Jan 2004 06:23:41 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 88495 invoked from network); 29 Jan 2004 06:23:41 -0000 Received: from unknown (HELO smtp2.mail.be.easynet.net) (212.100.160.76) by daedalus.apache.org with SMTP; 29 Jan 2004 06:23:41 -0000 Received: from 213-193-188-11.adsl.easynet.be ([213.193.188.11] helo=mycomeurope.com) by smtp2.mail.be.easynet.net with esmtp (Exim 4.22) id 1Am5ah-0000K7-JO for tomcat-user@jakarta.apache.org; Thu, 29 Jan 2004 07:23:51 +0100 Date: Thu, 29 Jan 2004 07:23:48 +0100 Message-Id: from: "Mailer-Daemon@mycomeurope.com" to: subject: Mycom Europe: Mail Delivery Error - tomcat-user@jakarta.apache.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_f04012907234801DF" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-DCC-x-mailer.co.uk-Metrics: nusku 1192; Body=2 Fuz1=5 Fuz2=6 x-recipient: ----- THIS IS AN AUTOMATED ERROR REPLY --- ------=_NextPart_f0401290731080009 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org ------=_NextPart_f0401290731080009-- Courriel-0.40/t/data/stress-test/mbox_mutt_2.txt0000644000175000017500000001564312653205401021544 0ustar autarchautarchFrom maney@two14.net Wed Oct 06 12:43:34 2004 Received: from gateway.two14.net ([69.17.22.215]) by rince.africaninspace.com with esmtp (Exim 4.34) id 1CFFp8-0005eB-3y for ubuntu-users@lists.ubuntu.com; Wed, 06 Oct 2004 12:43:34 -0500 Received: from wheel2.two14.net (wheel2.two14.net [172.31.1.10]) by gateway.two14.net (Postfix) with ESMTP id 6B104AD43 for ; Wed, 6 Oct 2004 12:43:03 -0500 (CDT) Received: from furrr.two14.net (furrr.two14.net [172.31.1.5]) by wheel2.two14.net (Postfix) with ESMTP id 4C8C3180C7 for ; Wed, 6 Oct 2004 12:43:03 -0500 (CDT) Received: by furrr.two14.net (Postfix, from userid 1000) id 208282FF; Wed, 6 Oct 2004 12:43:03 -0500 (CDT) Date: Wed, 6 Oct 2004 12:43:03 -0500 From: Martin Maney To: Ubuntu Linux users Message-ID: <20041006174303.GB7196@furrr.two14.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Subject: Wiki problem X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ubuntu-users@lists.ubuntu.com List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2004 17:43:34 -0000 Every time I do a text search ont he wiki, it crashes after displaying some results - looks like maybe it's trying to process one more matching file than actually exists? Dies with Type Error: iteration over non-sequence in quoteFilename, passed a None as the filename. It appears to be consistent - any search of the full text I've tried gets this. -- The most effective way to get information from usenet is not to ask a question; it is to post incorrect information. -- Aahz's Law From ofiol@ikirux.com.ve Wed Oct 06 12:41:34 2004 Received: from [201.249.53.93] (helo=ikirux.com.ve ident=root) by rince.africaninspace.com with esmtp (Exim 4.34) id 1CFFnB-0005bP-O1 for ubuntu-users@lists.ubuntu.com; Wed, 06 Oct 2004 12:41:34 -0500 Received: from [201.243.242.193] (account ofiol HELO localhost) by ikirux.com.ve (CommuniGate Pro SMTP 4.1.8) with ESMTP-TLS id 481165 for ubuntu-users@lists.ubuntu.com; Wed, 06 Oct 2004 14:03:47 -0400 Date: Wed, 6 Oct 2004 13:40:09 -0400 To: ubuntu-users@lists.ubuntu.com Message-ID: <20041006174009.GB2445@(none)> References: <1097083715.3294.7.camel@localhost.local.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1097083715.3294.7.camel@localhost.local.net> User-Agent: Mutt/1.5.6+20040722i Subject: Re: Boot speed X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2004 17:41:34 -0000 On Wed, Oct 06, 2004 at 06:28:34PM +0100, Benjamin Roe wrote: [...] > Does anyone have any tips for reducing the boot time? I've already > stopped all the non-essential services (syslog,pcmcia etc), prelinked > everything etc. A lot of time seems to be spent in running the various > pci.rc, usb.rc scripts - is there a way to skip these? I see that the hardware recognition process take too much time, but Im new with Ubuntu and I haven't check this process internally. Taking my experience with others distros that uses hardware recognitions and activations routines, this try to load all possible kernel modules for each device but, Why don't use lspci output and use some kind of hardware DB to see which kernel modules to load? maybe that will be fastern > > Thanks, > Ben From c.casimir@laposte.net Wed Oct 06 12:47:54 2004 Received: from mx.laposte.net ([81.255.54.11]) by rince.africaninspace.com with esmtp (Exim 4.34) id 1CFFtK-0005og-HP for ubuntu-users@lists.ubuntu.com; Wed, 06 Oct 2004 12:47:54 -0500 Received: from [192.168.0.2] (195.154.39.24) by mx.laposte.net (7.0.028) (authenticated as c.casimir@laposte.net) id 416173CE00212873 for ubuntu-users@lists.ubuntu.com; Wed, 6 Oct 2004 19:47:22 +0200 Message-ID: <41643049.5020403@laposte.net> Date: Wed, 06 Oct 2004 19:50:01 +0200 From: Christian Casimir User-Agent: Mozilla Thunderbird 0.8 (Windows/20040913) X-Accept-Language: fr, en MIME-Version: 1.0 To: ubuntu-users@lists.ubuntu.com References: <415D3810.4090901@laposte.net> <20041002000938.GE23790@alcor.net> <4163A5AA.9030508@laposte.net> <200410060917.47319.ubuntu@petethetree.co.uk> <20041006171229.GK16935@alcor.net> In-Reply-To: <20041006171229.GK16935@alcor.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: Quoted-Printable Subject: Re: Ethernet and sound problem on IBM X20 X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2004 17:47:54 -0000 Matt Zimmerman a =E9crit : >=20 > That bug seems to be about a compilation error. >=20 > The Ubuntu bug for this issue is > https://bugzilla.ubuntu.com/show_bug.cgi?id=3D1994 >=20 > If you are experiencing it as well, please test the workaround in comme= nt > #14. Unfortunately, I won't be able to test anything before the end of the=20 week. I definitely will as soon as Monday. Thanks anyway and I'll be=20 back soon with some test results. Christian C.Courriel-0.40/t/data/stress-test/mbox_mmqp_1.txt0000644000175000017500000000356212653205401021521 0ustar autarchautarchReceived: from localhost (HELO [127.0.0.1]) (127.0.0.1) by montreal (qpsmtpd/0.32) with ESMTP; Sat, 29 Apr 2006 06:13:14 -0700 Return-Path: X-Original-To: grokbase-test1@lists.grokbase.com Delivered-To: grokbase-test1@lists.grokbase.com Received: from Unknown (HELO www.mazrmail.com) (192.168.1.6) by montreal (qpsmtpd/0.32) with ESMTP; Sat, 29 Apr 2006 06:13:09 -0700 Received: by www.mazrmail.com (Postfix, from userid 500) id EA28E5B8277; Mon, 10 Apr 2006 16:36:12 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by www.mazrmail.com (Postfix) with ESMTP id E722C5B80AB for ; Mon, 10 Apr 2006 16:36:12 -0700 (PDT) Date: Mon, 10 Apr 2006 16:36:12 -0700 (PDT) From: John To: grokbase-test1@lists.grokbase.com Message-ID: MIME-Version: 1.0 Subject: [Grokbase-test1] a6 X-BeenThere: grokbase-test1@lists.grokbase.com X-Mailman-Version: 2.1.7 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: grokbase-test1-bounces@lists.grokbase.com Errors-To: grokbase-test1-bounces@lists.grokbase.com z _______________________________________________ Grokbase-test1 mailing list Grokbase-test1@lists.grokbase.com http://lists.grokbase.com/mailman/listinfo/grokbase-test1 Courriel-0.40/t/data/stress-test/mbox_antivirus.txt0000644000175000017500000000727412653205401022357 0ustar autarchautarchFrom sjoeboo@sjoeboo.com Mon Mar 14 13:26:03 2005 Received: from h000f66a433cb.ne.client2.attbi.com ([24.131.189.6] helo=skywalker.sjoeboo.com) by rince.africaninspace.com with esmtp (Exim 4.34) id 1DAvCV-0007YK-OO for ubuntu-users@lists.ubuntu.com; Mon, 14 Mar 2005 13:26:03 -0600 Received: (qmail 20416 invoked by uid 1010); 14 Mar 2005 14:13:00 -0500 Received: from 127.0.0.1 by skywalker (envelope-from , uid 1008) with qmail-scanner-1.24-st-qms (clamdscan: 0.80/533. spamassassin: 3.0.1. perlscan: 1.24-st-qms. Clear:RC:1(127.0.0.1):. Processed in 0.110415 secs); 14 Mar 2005 19:13:00 -0000 X-Antivirus-sjoeboo.com-Mail-From: sjoeboo@sjoeboo.com via skywalker X-Antivirus-sjoeboo.com: 1.24-st-qms (Clear:RC:1(127.0.0.1):. Processed in 0.110415 secs Process 20409) Received: from localhost (sjoeboo@sjoeboo.com@127.0.0.1) by skywalker.sjoeboo.com with AES256-SHA encrypted SMTP; 14 Mar 2005 14:12:59 -0500 Date: Mon, 14 Mar 2005 14:12:59 -0500 To: Ubuntu Help and User Discussions Message-ID: <20050314191259.GA20344@skywalker.sjoeboo.com> References: <4235E1AA.2060906@themauvezone.fsnet.co.uk> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="qMm9M+Fa2AknHoGS" Content-Disposition: inline In-Reply-To: <4235E1AA.2060906@themauvezone.fsnet.co.uk> User-Agent: Mutt/1.5.6+20040907i Subject: Re: dependency fun X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ubuntu Help and User Discussions List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Mar 2005 19:26:04 -0000 --qMm9M+Fa2AknHoGS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable try apt-get install libstdc++6 libstdc++6-dev is in universe i do belive. those should resolve those dependancies for you.=20 another hint is to try doing searchs via teh command line. synaptic by default searches package names, where as an 'apt-cache search' in teh command line does much much more. hope that helped On Mon, Mar 14, 2005 at 07:10:34PM +0000, baza wrote: > I'm trying to get the Targetware flight sim working, but am having=20 > dependency fun and keep getting this error >=20 >=20 >=20 >=20 > baza@barbelith:~/Desktop/targetware$ ./targetware > ./targetware: error while loading shared libraries:=20 > libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file=20 > or directory > baza@barbelith:~/Desktop/targetware$ >=20 > I can't find the above libs in synaptic, any help?? >=20 > Baza >=20 >=20 > --=20 > ubuntu-users mailing list > ubuntu-users@lists.ubuntu.com > http://lists.ubuntu.com/mailman/listinfo/ubuntu-users --=20 Mat Nicholson --qMm9M+Fa2AknHoGS Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) iD8DBQFCNeI7pXZHtNxjH8MRAvs5AKCNoss3KWrtqFSFmfH/6WDR667SBgCfQUy6 kwkc2Yru32mcyHIPYL9knj0= =lozH -----END PGP SIGNATURE----- --qMm9M+Fa2AknHoGS-- Courriel-0.40/t/data/stress-test/mbox_msgid_novell-groupwise-7.txt0000644000175000017500000000632612653205401025200 0ustar autarchautarchFrom users-return-150786-apmail-tomcat-users-archive=tomcat.apache.org@tomcat.apache.org Wed Sep 06 18:08:49 2006 Return-Path: Delivered-To: apmail-tomcat-users-archive@www.apache.org Received: (qmail 19670 invoked from network); 6 Sep 2006 18:08:48 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 6 Sep 2006 18:08:48 -0000 Received: (qmail 57748 invoked by uid 500); 6 Sep 2006 18:08:36 -0000 Delivered-To: apmail-tomcat-users-archive@tomcat.apache.org Received: (qmail 57731 invoked by uid 500); 6 Sep 2006 18:08:36 -0000 Mailing-List: contact users-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Users List" Delivered-To: mailing list users@tomcat.apache.org Received: (qmail 57720 invoked by uid 99); 6 Sep 2006 18:08:36 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Sep 2006 11:08:36 -0700 X-ASF-Spam-Status: No, hits=3.6 required=10.0 tests=INVALID_MSGID,UNPARSEABLE_RELAY,X_IP X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [161.149.240.177] (HELO cwmsmtpbs2.lacity.org) (161.149.240.177) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Sep 2006 11:08:35 -0700 Received: from unknown (HELO cwmsmtpd.ci.la.ca.us) ([161.149.50.21]) by cwmsmtpbs2.lacity.org with ESMTP; 06 Sep 2006 11:07:53 -0700 X-IP: 161.149.50.21 X-SBRS: None X-IP: $remote-ip X-IronPort-AV: i="4.08,221,1154934000"; d="scan'208"; a="141552384:sNHT22120364" X-EnvFrom: Jimmy.Lindsey@lacity.org Received: from cwgwia.lacity.org ([161.149.252.210]) by cwmsmtpd.ci.la.ca.us (8.11.7p1+Sun/8.11.7) with ESMTP id k86I7jp08957 for ; Wed, 6 Sep 2006 11:07:45 -0700 (PDT) Received: from GATEWAYS-MTA by cwgwia.lacity.org 161.149.252.210 with Novell_GroupWise; Wed, 06 Sep 2006 11:07:41 -0700 Message-Id: <44FEABE9020000180005662A@cwgwia.lacity.org 161.149.252.210> X-Mailer: Novell GroupWise Internet Agent 7.0 Date: Wed, 06 Sep 2006 11:07:21 -0700 From: "Jimmy Lindsey" To: Subject: Re: Tomcat Administration & SQL Server 2005 Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N I need help with the following Tomcat issues: 1. I have Tomcat 5.5 running on a windows PC, but I am unable to get Tomcat Administration to work. 2. I need help on getting SQL Server 2005 to work with Tomcat 5.5. 3. How to setup Tomcat to work with Apache Web Server. Thanks --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org For additional commands, e-mail: users-help@tomcat.apache.org Courriel-0.40/t/data/stress-test/mbox_mime_applemail_3x.txt0000644000175000017500000005067312653205401023721 0ustar autarchautarchFrom catalyst-dev-bounces@lists.scsys.co.uk Tue Oct 30 00:15:44 2007 Return-Path: X-Original-To: archive@grokbase.com Delivered-To: archive@grokbase.com Received: from de007061.idaq.com (HELO jules.scsys.co.uk) (217.168.146.69) by s69759.xenosight.com (qpsmtpd/0.32) with ESMTP; Tue, 30 Oct 2007 00:15:43 -0500 Received: from localhost ([127.0.0.1] helo=jules.scsys.co.uk) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjMh-0003dX-9E; Tue, 30 Oct 2007 05:10:11 +0000 Received: from dopple.ion0.com ([69.65.110.16] helo=dave.ion0.com) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjMe-0003dP-Nq for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 05:10:09 +0000 Received: from dave.ion0.com (localhost [127.0.0.1]) by dave.ion0.com (8.13.8/8.12.9) with ESMTP id l9U4pdfW051676 for ; Tue, 30 Oct 2007 00:51:44 -0400 (EDT) (envelope-from jayk@ion0.com) Received: (from root@localhost) by dave.ion0.com (8.13.8/8.12.9/Submit) id l9U4pdo0051673 for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 00:51:39 -0400 (EDT) Message-ID: <4C53584B-E166-4D4C-B9F9-F8A3F5A0A529@ion0.com> From: Jay K To: Development of the elegant MVC web framework In-Reply-To: <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> MIME-Version: 1.0 (Apple Message framework v912) Subject: Re: [Catalyst-dev] Advent 2007 Date: Mon, 29 Oct 2007 23:10:02 -0600 References: <756703690710261112s35c77e57n88a96caa88854fd1@mail.gmail.com> <472248D4.8030302@jrock.us> <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> X-Mailer: Apple Mail (2.912) X-Mesmtpd-Mailerfrom: Jay K X-BeenThere: catalyst-dev@lists.scsys.co.uk X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Development of the elegant MVC web framework List-Id: Development of the elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0845696419==" Mime-version: 1.0 Errors-To: catalyst-dev-bounces@lists.scsys.co.uk --===============0845696419== Content-Type: multipart/alternative; boundary=Apple-Mail-8-665438218 --Apple-Mail-8-665438218 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit I'll do one or two. ideas: intro to auth using auth realms anyone interested in a simple 'interacting with external caches' thing - like making your app cache friendly? Jay On Oct 29, 2007, at 4:13 PM, J. Shirley wrote: > Here's a list, we can shuffle days around as necessary. > > > Day 1 - Catalyst Application Design, jrockway > Day 2 - Catalyst Base Classes - ??? > Day 3 - REST Redux, Using RESTful services and YUI; jshirley > Day 4 - Catalyst Configuration > Day 5 - $c->uri_for fun and profit - purge > Day 6 - > Day 7 > Day 8 > Day 9 > Day 10 > Day 11 > Day 12 > Day 13 > Day 14 > Day 15 > Day 16 > Day 17 > Day 18 > Day 19 > Day 20 > Day 21 > Day 22 > Day 23 > Day 24 - This Year in Catalyst - kd > > _______________________________________________ > Catalyst-dev mailing list > Catalyst-dev@lists.scsys.co.uk > http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --- "Those who can make you believe absurdities can make you commit atrocities." --Voltaire --Apple-Mail-8-665438218 Content-Type: text/html; charset=US-ASCII Content-Transfer-Encoding: quoted-printable I'll do one or two. =  

ideas: =  

intro = to auth

using = class=3D"webkit-block-placeholder">
anyone interested in a = simple 'interacting with external caches' thing - like making your app = cache friendly?

Jay

On Oct 29, 2007, at 4:13 = PM, J. Shirley wrote:

Here's a = list, we can shuffle days around as necessary.


Day 1 - = Catalyst Application Design, jrockway
Day 2 - Catalyst Base Classes - = ???
Day 3 - REST Redux, Using RESTful services and YUI; jshirley
= Day 4 - Catalyst Configuration
Day 5 - $c->uri_for fun and profit = - purge
Day 6 -
Day 7
Day 8
Day 9
Day 10
Day 11
= Day 12
Day 13
Day 14
Day 15
Day 16
Day 17
Day = 18
Day 19
Day 20
Day 21
Day 22
Day 23
Day 24 - This = Year in Catalyst - kd

= _______________________________________________
Catalyst-dev mailing = list
Catalyst-dev@lists.scsys.co= ..uk
ht= tp://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev

---
"Those who = can make you believe absurdities can make you commit atrocities." = --Voltaire

=

= --Apple-Mail-8-665438218-- --===============0845696419== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst-dev mailing list Catalyst-dev@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --===============0845696419==-- From catalyst-dev-bounces@lists.scsys.co.uk Tue Oct 30 00:16:02 2007 Return-Path: X-Original-To: archive@grokbase.com Delivered-To: archive@grokbase.com Received: from de007061.idaq.com (HELO jules.scsys.co.uk) (217.168.146.69) by s69759.xenosight.com (qpsmtpd/0.32) with ESMTP; Tue, 30 Oct 2007 00:16:02 -0500 Received: from localhost ([127.0.0.1] helo=jules.scsys.co.uk) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjLh-0003bG-Dv; Tue, 30 Oct 2007 05:09:09 +0000 Received: from dopple.ion0.com ([69.65.110.16] helo=dave.ion0.com) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjLf-0003b5-4t for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 05:09:07 +0000 Received: from dave.ion0.com (localhost [127.0.0.1]) by dave.ion0.com (8.13.8/8.12.9) with ESMTP id l9U4oWvR051641 for ; Tue, 30 Oct 2007 00:50:36 -0400 (EDT) (envelope-from jayk@ion0.com) Received: (from root@localhost) by dave.ion0.com (8.13.8/8.12.9/Submit) id l9U4oWUK051638 for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 00:50:32 -0400 (EDT) Message-ID: From: Jay K To: Development of the elegant MVC web framework In-Reply-To: <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> MIME-Version: 1.0 (Apple Message framework v912) Subject: Re: [Catalyst-dev] Advent 2007 Date: Mon, 29 Oct 2007 23:08:59 -0600 References: <756703690710261112s35c77e57n88a96caa88854fd1@mail.gmail.com> <472248D4.8030302@jrock.us> <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> X-Mailer: Apple Mail (2.912) X-Mesmtpd-Mailerfrom: Jay K X-BeenThere: catalyst-dev@lists.scsys.co.uk X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Development of the elegant MVC web framework List-Id: Development of the elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1577647042==" Mime-version: 1.0 Errors-To: catalyst-dev-bounces@lists.scsys.co.uk --===============1577647042== Content-Type: multipart/alternative; boundary=Apple-Mail-6-665375226 --Apple-Mail-6-665375226 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit I'll do one or two. ideas: intro to auth using auth realms anyone interested in a simple 'interacting with external caches' thing - like making your app cache friendly? Jay On Oct 29, 2007, at 4:13 PM, J. Shirley wrote: > Here's a list, we can shuffle days around as necessary. > > > Day 1 - Catalyst Application Design, jrockway > Day 2 - Catalyst Base Classes - ??? > Day 3 - REST Redux, Using RESTful services and YUI; jshirley > Day 4 - Catalyst Configuration > Day 5 - $c->uri_for fun and profit - purge > Day 6 - > Day 7 > Day 8 > Day 9 > Day 10 > Day 11 > Day 12 > Day 13 > Day 14 > Day 15 > Day 16 > Day 17 > Day 18 > Day 19 > Day 20 > Day 21 > Day 22 > Day 23 > Day 24 - This Year in Catalyst - kd > > _______________________________________________ > Catalyst-dev mailing list > Catalyst-dev@lists.scsys.co.uk > http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --- "Those who can make you believe absurdities can make you commit atrocities." --Voltaire --Apple-Mail-6-665375226 Content-Type: text/html; charset=US-ASCII Content-Transfer-Encoding: quoted-printable I'll do one or two. =  

ideas: =  

intro = to auth

using = class=3D"webkit-block-placeholder">
anyone interested in a = simple 'interacting with external caches' thing - like making your app = cache friendly?

Jay

On Oct 29, 2007, at 4:13 = PM, J. Shirley wrote:

Here's a = list, we can shuffle days around as necessary.


Day 1 - = Catalyst Application Design, jrockway
Day 2 - Catalyst Base Classes - = ???
Day 3 - REST Redux, Using RESTful services and YUI; jshirley
= Day 4 - Catalyst Configuration
Day 5 - $c->uri_for fun and profit = - purge
Day 6 -
Day 7
Day 8
Day 9
Day 10
Day 11
= Day 12
Day 13
Day 14
Day 15
Day 16
Day 17
Day = 18
Day 19
Day 20
Day 21
Day 22
Day 23
Day 24 - This = Year in Catalyst - kd

= _______________________________________________
Catalyst-dev mailing = list
Catalyst-dev@lists.scsys.co= ..uk
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev<= br>

---
"Those who = can make you believe absurdities can make you commit atrocities." = --Voltaire

=

= --Apple-Mail-6-665375226-- --===============1577647042== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst-dev mailing list Catalyst-dev@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --===============1577647042==-- From catalyst-dev-bounces@lists.scsys.co.uk Tue Oct 30 00:16:32 2007 Return-Path: X-Original-To: archive@grokbase.com Delivered-To: archive@grokbase.com Received: from de007061.idaq.com (HELO jules.scsys.co.uk) (217.168.146.69) by s69759.xenosight.com (qpsmtpd/0.32) with ESMTP; Tue, 30 Oct 2007 00:16:32 -0500 Received: from localhost ([127.0.0.1] helo=jules.scsys.co.uk) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjLi-0003bL-3d; Tue, 30 Oct 2007 05:09:10 +0000 Received: from dopple.ion0.com ([69.65.110.16] helo=dave.ion0.com) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjLf-0003b7-4u for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 05:09:07 +0000 Received: from dave.ion0.com (localhost [127.0.0.1]) by dave.ion0.com (8.13.8/8.12.9) with ESMTP id l9U4od29051649 for ; Tue, 30 Oct 2007 00:50:39 -0400 (EDT) (envelope-from jayk@ion0.com) Received: (from root@localhost) by dave.ion0.com (8.13.8/8.12.9/Submit) id l9U4od1R051646 for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 00:50:39 -0400 (EDT) Message-ID: <4D07DC23-621A-4C33-8F22-38747B8C0B70@ion0.com> From: Jay K To: Development of the elegant MVC web framework In-Reply-To: <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> MIME-Version: 1.0 (Apple Message framework v912) Subject: Re: [Catalyst-dev] Advent 2007 Date: Mon, 29 Oct 2007 23:09:06 -0600 References: <756703690710261112s35c77e57n88a96caa88854fd1@mail.gmail.com> <472248D4.8030302@jrock.us> <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> X-Mailer: Apple Mail (2.912) X-Mesmtpd-Mailerfrom: Jay K X-BeenThere: catalyst-dev@lists.scsys.co.uk X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Development of the elegant MVC web framework List-Id: Development of the elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0785108530==" Mime-version: 1.0 Errors-To: catalyst-dev-bounces@lists.scsys.co.uk --===============0785108530== Content-Type: multipart/alternative; boundary=Apple-Mail-7-665382243 --Apple-Mail-7-665382243 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit I'll do one or two. ideas: intro to auth using auth realms anyone interested in a simple 'interacting with external caches' thing - like making your app cache friendly? Jay On Oct 29, 2007, at 4:13 PM, J. Shirley wrote: > Here's a list, we can shuffle days around as necessary. > > > Day 1 - Catalyst Application Design, jrockway > Day 2 - Catalyst Base Classes - ??? > Day 3 - REST Redux, Using RESTful services and YUI; jshirley > Day 4 - Catalyst Configuration > Day 5 - $c->uri_for fun and profit - purge > Day 6 - > Day 7 > Day 8 > Day 9 > Day 10 > Day 11 > Day 12 > Day 13 > Day 14 > Day 15 > Day 16 > Day 17 > Day 18 > Day 19 > Day 20 > Day 21 > Day 22 > Day 23 > Day 24 - This Year in Catalyst - kd > > _______________________________________________ > Catalyst-dev mailing list > Catalyst-dev@lists.scsys.co.uk > http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --- "Those who can make you believe absurdities can make you commit atrocities." --Voltaire --Apple-Mail-7-665382243 Content-Type: text/html; charset=US-ASCII Content-Transfer-Encoding: quoted-printable I'll do one or two. =  

ideas: =  

intro = to auth

using = class=3D"webkit-block-placeholder">
anyone interested in a = simple 'interacting with external caches' thing - like making your app = cache friendly?

Jay

On Oct 29, 2007, at 4:13 = PM, J. Shirley wrote:

Here's a = list, we can shuffle days around as necessary.


Day 1 - = Catalyst Application Design, jrockway
Day 2 - Catalyst Base Classes - = ???
Day 3 - REST Redux, Using RESTful services and YUI; jshirley
= Day 4 - Catalyst Configuration
Day 5 - $c->uri_for fun and profit = - purge
Day 6 -
Day 7
Day 8
Day 9
Day 10
Day 11
= Day 12
Day 13
Day 14
Day 15
Day 16
Day 17
Day = 18
Day 19
Day 20
Day 21
Day 22
Day 23
Day 24 - This = Year in Catalyst - kd

= _______________________________________________
Catalyst-dev mailing = list
Catalyst-dev@lists.scsys.co= ..uk
ht= tp://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev

---
"Those who = can make you believe absurdities can make you commit atrocities." = --Voltaire

=

= --Apple-Mail-7-665382243-- --===============0785108530== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst-dev mailing list Catalyst-dev@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --===============0785108530==-- Courriel-0.40/t/data/stress-test/mbox_texthtmlcomment.txt0000644000175000017500000003124312653205401023560 0ustar autarchautarchFrom mason-users-admin@lists.sourceforge.net Thu Jan 5 17:58:15 2006 Return-Path: Received: from lists-outbound.sourceforge.net (lists-outbound.sourceforge.net [66.35.250.225]) by smtp.mazrmail.com (8.12.11/8.12.11) with ESMTP id k05NwEYm004022 for ; Thu, 5 Jan 2006 17:58:15 -0600 Received: from sc8-sf-list1-b.sourceforge.net (sc8-sf-list1-b.sourceforge.net [10.3.1.7]) by sc8-sf-spam1.sourceforge.net (Postfix) with ESMTP id 5278E8C3F2; Thu, 5 Jan 2006 15:58:12 -0800 (PST) Received: from sc8-sf-mx2-b.sourceforge.net ([10.3.1.92] helo=mail.sourceforge.net) by sc8-sf-list1.sourceforge.net with esmtp (Exim 4.30) id 1Euez5-0004Yl-EE for mason-users@lists.sourceforge.net; Thu, 05 Jan 2006 15:57:31 -0800 Received: from mail2.l-3com.com ([128.170.207.35]) by mail.sourceforge.net with esmtp (Exim 4.44) id 1Euez5-00017D-4i for mason-users@lists.sourceforge.net; Thu, 05 Jan 2006 15:57:31 -0800 Received: from isDNS2.is.l-3com.com (isdns2.is.l-3com.com [148.104.4.19]) by mail2.L-3com.com (8.12.10+Sun/8.12.10) with ESMTP id k05NvMXZ005047; Thu, 5 Jan 2006 18:57:22 -0500 (EST) Received: from gvlmailhub.gvl.l-3com.com (gvlmailhub.gvl.is.l-3com.com [138.254.134.153]) by isDNS2.is.l-3com.com (8.12.8/8.12.8) with ESMTP id k05NtnCE008570; Thu, 5 Jan 2006 17:55:51 -0600 Received: from gvlexch04.gvl.is.l-3com.com (gvlexch04.gvl.is.l-3com.com [138.254.134.124]) by gvlmailhub.gvl.l-3com.com (8.11.6/8.11.6) with ESMTP id k05NvFe13313; Thu, 5 Jan 2006 17:57:15 -0600 Received: by gvlexch04.gvl.is.l-3com.com with Internet Mail Service (5.5.2657.72) id ; Thu, 5 Jan 2006 17:57:15 -0600 Message-ID: <49D1A43C2994F140A1CE90170420F2840A1EF8C7@gvlexch04.gvl.is.l-3com.com> From: "Sproul, SA Stacey @ IS" To: "'mason-users@lists.sourceforge.net'" Cc: "Stone, T Teresa (7454) @ IS" , "Gibson, WB William @ IS" , "Shelton, SA Steve @ IS" , "'Paul Robertson'" , "Harwell, DK Dennis @ IS" MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2657.72) Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C61253.BCB38AFA" X-Spam-Score: 0.9 (/) X-Spam-Report: Spam Filtering performed by sourceforge.net. See http://spamassassin.org/tag/ for more details. Report problems to http://sf.net/tracker/?func=add&group_id=1&atid=200001 0.6 HOT_NASTY BODY: Possible porn - Hot, Nasty, Wild, Young 0.0 HTML_MESSAGE BODY: HTML included in message 0.3 HTML_10_20 BODY: Message is 10% to 20% HTML Subject: [Mason] Mason compile results in a zero size file Sender: mason-users-admin@lists.sourceforge.net Errors-To: mason-users-admin@lists.sourceforge.net X-BeenThere: mason-users@lists.sourceforge.net X-Mailman-Version: 2.0.9-sf.net Precedence: bulk List-Unsubscribe: , List-Id: Main user's list for Mason List-Post: List-Help: List-Subscribe: , List-Archive: X-Original-Date: Thu, 5 Jan 2006 17:57:08 -0600 Date: Thu, 5 Jan 2006 17:57:08 -0600 This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_001_01C61253.BCB38AFA Content-Type: text/plain Thanks in advance for any input!! We inherited a website that uses Mason from another company. Included in it are template header and footer components. What we have found is that, if we modify a header or footer component (say we edit a component to change the email contact name from Joe Smith to Jane Doe) Mason attempts to recompile the component file, since it has been updated, and we end up with a zero size file that, when it interacts with the web server, displays the following HTTP Error: OK, The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. The server error log displays the following: [Thu Jan 5 17:31:34 2006] check_part.cgi: Variable "%labels" will not stay shared at /xxx/xxxx/cgi-bin/check_part.cgi line 182. [Thu Jan 5 17:31:34 2006] check_part.cgi: Variable "@values" will not stay shared at /xxx/xxx/cgi-bin/check_part.cgi line 199. [Thu Jan 5 17:31:34 2006] check_part.cgi: Subroutine initialize redefined at /xxx/xxx/cgi-bin/check_part.cgi line 181. [Thu Jan 05 17:31:34 2006] [error] 25722: ModPerl::PerlRun: Can't coerce GLOB to string in entersub at /usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler.pm line 187.!!Stack:! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler.pm:187]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler/ToObject.pm:75]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler/ToObject.pm:115]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Interp.pm:318]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Request.pm:198]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Request.pm:166]! [/usr/lib/perl5/site_perl/5.8.0/Class/Container.pm:275]! [/usr/lib/perl5/site_perl/5.8.0/Class/Container.pm:353]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Interp.pm:222]! [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Interp.pm:216]! [/usr/lib/perl5/site_perl/RayStandardSubs.pm:65]! [/var/www/cgi-bin/check_part.cgi:175]! [/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/RegistryCo oker.pm:184]! [/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/RegistryCo oker.pm:154]! [/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/PerlRun.pm :16]! [-e:0]! We are running: Red Hat Enterprise Linux 3ES Apache 2.0.46 Mod Perl 1.99_09 Mason 1.28 Here is the entire list of perl modules we have installed on the server that were not included with the Red Hat Enterprise Linux 3 ES distribution, but most of which we needed to install in order to run Mason: Algorithm-Diff-1.1901 Apache-AuthNetLDAP-0.29 Apache-Test-1.26 Archive-Tar-1.26 Authen-SASL-2.09 Bit-Vector-6.4 Cache-Cache-1.04 Carp-Clan-5.3 CGI.pm-3.07 Class-Container-0.12 Class-Data-Inheritable-0.02 Compress-Zlib-1.38 Convert-ASN1-0.19 Cwd-2.21 Date-Calc-5.4 Devel-StackTrace-1.11 Digest-1.11 Digest-SHA1-2.10 Digest-SHA-5.31 Error-0.15 Exception-Class-1.21 ExtUtils-AutoInstall-0.63 ExtUtils-CBuilder-0.13 ExtUtils-ParseXS-2.12 ExtUtils-XSBuilder-0.27 File-Spec-0.90 IO-Socket-SSL-0.97 IO-Zlib-1.04 IPC-ShareLite-0.09 Module-Build-0.2611 Module-Signature-0.50 Net_SSLeay.pm-1.25 OLE-Storage_Lite-0.14 Params-Validate-0.78 PAR-Dist-0.07 Parse-RecDescent-1.94 perl-ldap-0.33 Pod-Escapes-1.04 Pod-Simple-3.02 Scalar-List-Utils-1.17 Sort-Versions-1.5 Spreadsheet-ParseExcel-0.2603 Test-Builder-Tester-1.01 Test-Pod-1.20 Text-Diff-0.35 Tie-IxHash-1.21 XML-NamespaceSupport-1.09 XML-SAX-0.12 And of course, HTML-Mason-1.28 Thanks again for any input/help Stacey Sproul ------_=_NextPart_001_01C61253.BCB38AFA Content-Type: text/html Content-Transfer-Encoding: quoted-printable Message

Thanks in advance for any input!!

We inherited = a website=20 that uses Mason from another company.
Included in it are template = header and=20 footer components.

What we have found is that, if we modify a = header or=20 footer component (say we edit a component to change the email contact = name from=20 Joe Smith to Jane Doe) Mason attempts to recompile the component file, = since it=20 has been updated, and we end up with a zero size file that, when it = interacts=20 with the web server, displays the following HTTP Error:

OK, = The=20 server encountered an internal error or misconfiguration and was unable = to=20 complete your request. Please contact the server administrator, = root@localhost=20 and inform them of the time the error occurred, and anything you might = have done=20 that may have caused the error. More information about this error may = be=20 available in the server error log.

The server error = log=20 displays the following:

[Thu Jan 5 17:31:34 2006]=20 check_part.cgi: Variable "%labels" will not stay shared at=20 /xxx/xxxx/cgi-bin/check_part.cgi line 182.
[Thu Jan 5 17:31:34 2006] = check_part.cgi: Variable "@values" will not stay shared at=20 /xxx/xxx/cgi-bin/check_part.cgi line 199.
[Thu Jan 5 17:31:34 2006]=20 check_part.cgi: Subroutine initialize redefined at=20 /xxx/xxx/cgi-bin/check_part.cgi line 181.
[Thu Jan 05 17:31:34 2006] = [error]=20 25722: ModPerl::PerlRun: Can't coerce GLOB to string in entersub at=20 /usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler.pm line = 187.!!Stack:!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler.pm:187]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler/ToObject.pm:75]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Compiler/ToObject.pm:115]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Interp.pm:318]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Request.pm:198]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Request.pm:166]!=20 [/usr/lib/perl5/site_perl/5.8.0/Class/Container.pm:275]!=20 [/usr/lib/perl5/site_perl/5.8.0/Class/Container.pm:353]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Interp.pm:222]!=20 [/usr/lib/perl5/site_perl/5.8.0/HTML/Mason/Interp.pm:216]!=20 [/usr/lib/perl5/site_perl/RayStandardSubs.pm:65]!=20 [/var/www/cgi-bin/check_part.cgi:175]!=20 [/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/Regist= ryCooker.pm:184]!=20 [/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/Regist= ryCooker.pm:154]!=20 [/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/PerlRu= n.pm:16]!=20 [-e:0]!

We are running:
Red Hat Enterprise = Linux=20 3ES
Apache 2.0.46
Mod Perl 1.99_09
Mason 1.28

Here is = the=20 entire list of perl modules we have installed on the server = that were=20 not included with the Red Hat Enterprise Linux 3 ES = distribution, but=20 most of which we needed to install in order to run=20 Mason:

Algorithm-Diff-1.1901
Apache-AuthNetLDAP-0.29
Apache= -Test-1.26
Archive-Tar-1.26
Authen-SASL-2.09
Bit-Vector-6.4
= Cache-Cache-1.04
Carp-Clan-5.3
CGI.pm-3.07
Class-Container-0.12=
Class-Data-Inheritable-0.02
Compress-Zlib-1.38
Convert-ASN1-0.= 19
Cwd-2.21
Date-Calc-5.4
Devel-StackTrace-1.11
Digest-1.11<= BR>Digest-SHA1-2.10
Digest-SHA-5.31
Error-0.15
Exception-Class-= 1.21
ExtUtils-AutoInstall-0.63
ExtUtils-CBuilder-0.13
ExtUtils-= ParseXS-2.12
ExtUtils-XSBuilder-0.27
File-Spec-0.90
IO-Socket-S= SL-0.97
IO-Zlib-1.04
IPC-ShareLite-0.09
Module-Build-0.2611
= Module-Signature-0.50
Net_SSLeay.pm-1.25
OLE-Storage_Lite-0.14
= Params-Validate-0.78
PAR-Dist-0.07
Parse-RecDescent-1.94
perl-l= dap-0.33
Pod-Escapes-1.04
Pod-Simple-3.02
Scalar-List-Utils-1.1= 7
Sort-Versions-1.5
Spreadsheet-ParseExcel-0.2603
Test-Builder-= Tester-1.01
Test-Pod-1.20
Text-Diff-0.35
Tie-IxHash-1.21
XML= -NamespaceSupport-1.09
XML-SAX-0.12
And of = course,
HTML-Mason-1.28

Thanks again=20 for any input/help

Stacey Sproul

------_=_NextPart_001_01C61253.BCB38AFA-- ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ Mason-users mailing list Mason-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mason-users Courriel-0.40/t/data/stress-test/mbox_headers_many.txt0000644000175000017500000001147212653205401022765 0ustar autarchautarchFrom tomcat-user-return-59522-qmlist-jakarta-archive-tomcat-user=nagoya.apache.org@jakarta.apache.org Fri Apr 04 17:02:50 2003 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@apache.org Received: (qmail 51412 invoked from network); 4 Apr 2003 17:02:49 -0000 Received: from exchange.sun.com (192.18.33.10) by daedalus.apache.org with SMTP; 4 Apr 2003 17:02:49 -0000 Received: (qmail 781 invoked by uid 97); 4 Apr 2003 17:04:42 -0000 Delivered-To: qmlist-jakarta-archive-tomcat-user@nagoya.betaversion.org Received: (qmail 774 invoked from network); 4 Apr 2003 17:04:42 -0000 Received: from daedalus.apache.org (HELO apache.org) (208.185.179.12) by nagoya.betaversion.org with SMTP; 4 Apr 2003 17:04:42 -0000 Received: (qmail 46538 invoked by uid 500); 4 Apr 2003 17:01:19 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 46473 invoked from network); 4 Apr 2003 17:01:18 -0000 Received: from oldtfw04.pearsontc.com (HELO oldtms704.pearsontc.com) (12.29.228.5) by daedalus.apache.org with SMTP; 4 Apr 2003 17:01:18 -0000 Received: from oldtms031.prenhall.com (localhost [127.0.0.1]) by oldtms704.pearsontc.com (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id <0HCT00BC5WARD8@oldtms704.pearsontc.com> for tomcat-user@jakarta.apache.org; Fri, 04 Apr 2003 11:54:27 -0500 (EST) Received: by OLDTMS031 with Internet Mail Service (5.5.2654.89) id ; Fri, 04 Apr 2003 12:03:01 -0500 Content-return: allowed Date: Fri, 04 Apr 2003 12:02:47 -0500 From: "O'Neill, John" Subject: RE: Tomcat Heap creep To: 'Tomcat Users List' Message-id: <691974AB8807D21196F200600842F7570A7E7C2B@oldtms009.schuster.com> MIME-version: 1.0 X-Mailer: Internet Mail Service (5.5.2654.89) Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 7BIT X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N I am on Solaris 8 and have scripted a netstat -an | grep 8009 | grep -c ESTABLISHED. Weighing total grep -c 8009 vs grep 8009 | grep -c ESTABLISHED I'm getting numbers like 847 vs 542. I'm assuming that ESTABLISHED should not rise above maxConnections + acceptCount. Most of the other connections are in the SYN_SENT state. Any other tools outside of third party profilers? - John Howdy, >When I netstat on the Tomcat connections, after a heavy load on the server >and the server is crawling, I get very large number of established >connections, well above the number on my connector's maxProcessors and >acceptCount. How and why does this happen? First of all, don't mistake dead sockets for established connections. What is the socket state as reported by netstat? What's your OS by the way? >If I suspect that my application has a memory leak (I've turned up -Xms - >Xms up to 1024), how can I narrow down where it is at? Is there a way to >get stats on the servlets and jsps? With a profiler, e.g. OptimizeIt or JProbe, good logging, and code inspections. OptimizeIt will attach to tomcat 4.x out of the box. Yoav Shapira Millennium ChemInformatics This e-mail, including any attachments, is a confidential business communication, and may contain information that is confidential, proprietary and/or privileged. This e-mail is intended only for the individual(s) to whom it is addressed, and may not be saved, copied, printed, disclosed or used by anyone else. If you are not the(an) intended recipient, please immediately delete this e-mail from your computer system and notify the sender. Thank you. --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org **************************************************************************** This email may contain confidential material. If you were not an intended recipient, please notify the sender and delete all copies. We may monitor email to and from our network. **************************************************************************** --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_received_date.txt0000644000175000017500000000655412653205401023116 0ustar autarchautarchFrom sat-guru@home.com Sun Jan 28 20:15:59 2001 Return-Path: Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 92741 invoked from network); 28 Jan 2001 20:15:59 -0000 Received: from ha1.rdc1.il.home.com (HELO mail.rdc1.il.home.com) (imail@24.2.1.66) by h31.sny.collab.net with SMTP; 28 Jan 2001 20:15:59 -0000 Received: from javadev ([65.10.144.44]) by mail.rdc1.il.home.com (InterMail vM.4.01.03.00 201-229-121) with SMTP id <20010128201602.EBIH24206.mail.rdc1.il.home.com@javadev> for ; Sun, 28 Jan 2001 12:16:02 -0800 Message-IDX: <001c01dc9092$933dd440$0200a8c0@javadev> Reply-To: "Dave Smith" From: "Dave Smith" To: References: Subject: Re: more problems with mod_jk Date: Wed, 28 Jan 2026 14:13:32 -0600 JW-Date: Sat, 09 Jan 1904 02:19:28 -0800 Organization: VYMAC Corp MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4522.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N You don't have the DSO compiled correctly yet. Are you using the directions in the mod_jk.so how-to? Don't use the makefile, just follow those directions exactly and you'll be OK. Dave ----- Original Message ----- From: "Ryan Cuprak" To: "tomcat" Sent: Sunday, January 28, 2001 12:16 PM Subject: more problems with mod_jk > Hello, > I have no idea what changed between last night and this morning, but I am > now getting a different error message. To compile mod_jk I edited the > makefile in ...src/native/apache1.3 so that apxs pointed to correct > location. I then did a make clean and a make all. Copied the mod_jk.so > over to my libexec and tried starting apache. I did not make any changes > to mod_jk.conf-auto. > (note on building, I did not get an error message and have to use: > gcc -shared -o mod_jk.so *.o) > Believing that perhaps I messed up a file in my multiple attempts, I > redownloaded jakarta-tomcat-3.2.1-src.tar.gz and did the above steps- > getting the same error as below. > > Ryan > Error message: > reality:/usr/local/apache/bin# ./httpd start > Syntax error on line 8 of /usr/local/tomcat/conf/mod_jk.conf-auto: > API module structure `jk_module' in file > /usr/local/apache/libexec/mod_jk.so is garbled - perhaps this is not an > Apache module DSO? > > ========================================================================== > | Ryan Cuprak | > | rcuprak@acm.org | > | Home Ph: (860)-742-5561 46 Prospect St. Coventry CT 06238 | > | College Ph: (773)-973-9661 1400 W. Devon Ave. PMB 271 Chicago, IL 60660| > ========================================================================== > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org > For additional commands, email: tomcat-user-help@jakarta.apache.org > >Courriel-0.40/t/data/stress-test/mbox_date_encoded.txt0000644000175000017500000000512312653205401022720 0ustar autarchautarchFrom struts-user-return-23518-qmlist-jakarta-archive-struts-user=jakarta.apache.org@jakarta.apache.org Mon Dec 24 08:52:33 2 001 Return-Path: Delivered-To: apmail-jakarta-struts-user-archive@apache.org Received: (qmail 69979 invoked from network); 24 Dec 2001 08:52:33 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 24 Dec 2001 08:52:33 -0000 Received: (qmail 2256 invoked by uid 97); 24 Dec 2001 08:52:34 -0000 Delivered-To: qmlist-jakarta-archive-struts-user@jakarta.apache.org Received: (qmail 2240 invoked by uid 97); 24 Dec 2001 08:52:33 -0000 Mailing-List: contact struts-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Struts Users Mailing List" Reply-To: "Struts Users Mailing List" Delivered-To: mailing list struts-user@jakarta.apache.org Received: (qmail 2229 invoked from network); 24 Dec 2001 08:52:33 -0000 Message-ID: <6593348.1009183951152.JavaMail.Administrator@liusm> From: Shengmeng Liu To: struts-user@jakarta.apache.org Subject: [Announcement] Struts XSLT code generator 0.85 Released! Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: ÐÇÆÚÒ», 24 Ê®¶þÔÂ 2001 16:52:31 +0800 X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N Greetings, Struts XSLT Code Generator, an XSLT based code generator for Struts just released the version 0.85. Although it's still in beta stage in terms of functionality, it's quite stable. Basically, it provides similar functions with Struts SourceCode Generator made by Ravi Ramaiah. But because it's completely based on the XSLT transformation and a set of stylesheet files, users do not have to access the source code and recompile the program to customize the templates for each type of struts fil es. If you're really into xml/xsl, you may like to give it a try. I hope you would enjoy it and look forward to your feedbac k. http://xsltgenerator.sourceforge.net Best Wishes, Shengmeng Liu -- To unsubscribe, e-mail: For additional commands, e-mail: Courriel-0.40/t/data/stress-test/mbox_mime_virus-kwf-scanner.txt0000644000175000017500000000465712653205401024730 0ustar autarchautarchFrom tomcat-user-return-106130-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Sat Jul 24 05:56:04 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 4473 invoked from network); 24 Jul 2004 05:56:04 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 24 Jul 2004 05:56:04 -0000 Received: (qmail 83489 invoked by uid 500); 24 Jul 2004 05:55:42 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 83466 invoked by uid 500); 24 Jul 2004 05:55:41 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 83453 invoked by uid 99); 24 Jul 2004 05:55:41 -0000 X-ASF-Spam-Status: No, hits=7.9 required=10.0 tests=MIME_MISSING_BOUNDARY,MISSING_MIMEOLE,NO_REAL_NAME,PRIORITY_NO_NAME,SUB_HELLO,X_MSMAIL_PRIORITY_HIGH,X_PRIORITY_HIGH X-Spam-Check-By: apache.org Received: from [202.141.137.170] (HELO jakarta.apache.org) (202.141.137.170) by apache.org (qpsmtpd/0.27.1) with ESMTP; Fri, 23 Jul 2004 22:55:39 -0700 From: jfrederic.clere@fujitsu-siemens.com To: tomcat-user@jakarta.apache.org Subject: Hello Date: Sat, 24 Jul 2004 11:20:10 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0006_0000519C.00003BBE" X-Priority: 1 X-MSMail-Priority: High X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N ------=_NextPart_000_0006_0000519C.00003BBE Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit Important notice! ------=_NextPart_000_0006_0000519C.00003BBE Content-Type: TEXT/PLAIN KWF Email scanner found a virus in following attachment: Notice.zip Content type: application/octet-stream Additional information from antivirus: W95/Spaces.gen Attachement has been removed by firewall. Courriel-0.40/t/data/stress-test/mbox_nonmime_html.txt0000644000175000017500000006500612653205401023016 0ustar autarchautarchX-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id C289052A57 for ; Sat, 5 Mar 2005 18:38:59 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 15845-02 for ; Sat, 5 Mar 2005 18:38:39 +0000 (GMT) Received: from smtpout02-03.prod.mesa1.secureserver.net (smtpout02-03.prod.mesa1.secureserver.net [64.202.165.193]) by svr1.postgresql.org (Postfix) with SMTP id 3924C52A6F for ; Sat, 5 Mar 2005 18:38:35 +0000 (GMT) Received: (qmail 8138 invoked from network); 5 Mar 2005 18:38:35 -0000 Received: from unknown (HELO webmail02.mesa1.secureserver.net) (64.202.166.81) by smtpout02-03.prod.mesa1.secureserver.net with SMTP; 5 Mar 2005 18:38:35 -0000 Received: (qmail 17458 invoked by uid 99); 5 Mar 2005 18:38:35 -0000 Message-ID: <20050305183835.17457.qmail@webmail02.mesa1.secureserver.net> Date: Sat, 5 Mar 2005 11:38:35 -0700 From: mark.lubratt@indeq.com Subject: Query Optimization - Hash Join estimate off? To: pgsql-performance@postgresql.org MIME-Version: 1.0 Content-Type: TEXT/html; CHARSET=US-ASCII X-Virus-Scanned: by amavisd-new at hub.org X-Archive-Number: 200503/87 X-Sequence-Number: 10792
Hello!
 
First off, I'm a real newbie at trying to read the output of explain analyze.
 
I have several similar queries in my application that I've got incorporated into views.  When they run sub 300ms, the users don't seem to mind.  However, one of them (query is below along with some relevant table information) is running about 800ms and my users are starting to grumble.
 
I ran explain analyze on it (explain analyze results are below).  I noticed that the biggest chunk of time is being taken by a Hash Join near the top of the output (I'm still not sure what the indentation means and what the order means).  If I look at the estimate, it is comparable to several other hash join estimates in the query; however, the actual cost in time is significantly higher than those other hash joins.  Is this significant?
 
I tried optimizing according to "SQL Tuning" by Tow, but this actually seemed to slow things down.  It also seemed that the query optimizer in PostgreSQL reordered things on its own according to its own plan anyway.  Is this correct?
 
I'd appreciate any help I can get to try to get this query below 300ms.
 
Thanks!
Mark
 
The platform is a dual 2.2GHz Xeon 1.2GB RAM with mirrored drives (raid 1) running Win2000 Pro.  I run "vacuum analyze" every night.  The postgresql.conf is basically standard except that I've opened it up to listen to the external network.  Other changes:
 
max_connections = 100
shared_buffers = 10000
 
query (the person_id = 1 in the where clause is changed on a case by case basis - depending upon who's running the query):
 
explain analyze
 SELECT DISTINCT c.job_id, g.person_id, c.job_no, b.deadline, c.name, bid_date(c.job_id) AS bid_date, c.miscq, c.city, c.st, j.name AS eng, c.s_team AS salesteam,
        CASE
            WHEN c.file_loc = 0 THEN 'No Bid'::character varying
            WHEN c.file_loc = -1 THEN 'Bid Board'::character varying
            WHEN c.file_loc = -2 THEN 'Lost Job'::character varying
            WHEN c.file_loc = -3 THEN 'See Job Notes'::character varying
            WHEN c.file_loc < -3 OR c.file_loc IS NULL THEN ''::character varying
            WHEN h.initials IS NOT NULL THEN h.initials
            ELSE 'Unknown person'::character varying
        END AS file_loc, COALESCE(c.city::text || COALESCE(', '::text || c.st::text, ''::text), COALESCE(c.st, ''::character varying)::text) AS "location", c.file_loc AS file_loc_id
   FROM status a
   LEFT JOIN status_list b ON a.status_id = b.status_id AND b.active
   LEFT JOIN job c ON c.job_id = b.job_id
   LEFT JOIN builder_list d ON c.job_id = d.job_id AND (d.won_heat OR d.won_vent OR d.won_tc OR c.heat AND d.bid_heat AND d.won_heat IS NULL OR c.vent AND d.bid_vent AND d.won_vent IS NULL OR c.tc AND d.bid_tc AND d.won_tc IS NULL) AND d.role = 'C'::bpchar
   LEFT JOIN company e ON d.company_id = e.company_id
   LEFT JOIN call_list f ON e.company_id = f.company_id
   LEFT JOIN person g ON f.person_id = g.person_id OR "position"(c.s_team::text, g.initials::text) > 0
   LEFT JOIN person h ON c.file_loc = h.person_id
   LEFT JOIN builder_list i ON c.job_id = i.job_id AND i.role = 'E'::bpchar
   LEFT JOIN company j ON i.company_id = j.company_id
  WHERE a.name::text = 'Awaiting Award'::character varying::text and g.person_id = 1
  ORDER BY c.job_id, g.person_id, c.job_no, b.deadline, c.name, bid_date(c.job_id), c.miscq, c.city, COALESCE(c.city::text || COALESCE(', '::text || c.st::text, ''::text), COALESCE(c.st, ''::character varying)::text), c.st,
CASE
    WHEN c.file_loc = 0 THEN 'No Bid'::character varying
    WHEN c.file_loc = -1 THEN 'Bid Board'::character varying
    WHEN c.file_loc = -2 THEN 'Lost Job'::character varying
    WHEN c.file_loc = -3 THEN 'See Job Notes'::character varying
    WHEN c.file_loc < -3 OR c.file_loc IS NULL THEN ''::character varying
    WHEN h.initials IS NOT NULL THEN h.initials
    ELSE 'Unknown person'::character varying
END, j.name, c.s_team, c.file_loc;
Tables:
status - 14 rows
status_list - 6566 rows
job - 2210 rows
builder_list - 9670 rows
company - 1249 rows
call_list - 4731 rows
person - 27 rows
 
Primary keys:
any field with a "_id" suffix is a primary key; and thus is implicitly indexed.
 
Other indexes:
status_list(job_id) btree
status_list(status_id) btree
job(file_loc) btree
builder_list(company_id) btree
call_list(company_id) btree
call_list(person_id) btree
call_list(company_id) btree
person(company_id) btree
 
explain analyze:
Unique  (cost=1798.47..1809.38 rows=291 width=114) (actual time=766.000..781.000 rows=566 loops=1)
  ->  Sort  (cost=1798.47..1799.19 rows=291 width=114) (actual time=766.000..766.000 rows=1473 loops=1)
        Sort Key: c.job_id, g.person_id, c.job_no, b.deadline, c.name, bid_date(c.job_id), c.miscq, c.city, COALESCE(((c.city)::text || COALESCE((', '::text || (c.st)::text), ''::text)), (COALESCE(c.st, ''::character varying))::text), c.st, CASE WHEN (c.fi (..)
        ->  Hash Left Join  (cost=1750.81..1786.56 rows=291 width=114) (actual time=453.000..750.000 rows=1473 loops=1)
              Hash Cond: ("outer".company_id = "inner".company_id)
              ->  Merge Left Join  (cost=1707.20..1722.53 rows=291 width=95) (actual time=437.000..484.000 rows=1473 loops=1)
                    Merge Cond: ("outer".job_id = "inner".job_id)
                    ->  Sort  (cost=1382.44..1383.17 rows=291 width=91) (actual time=406.000..406.000 rows=1473 loops=1)
                          Sort Key: c.job_id
                          ->  Hash Left Join  (cost=1137.28..1370.53 rows=291 width=91) (actual time=234.000..390.000 rows=1473 loops=1)
                                Hash Cond: ("outer".file_loc = "inner".person_id)
                                ->  Nested Loop  (cost=1135.94..1365.27 rows=291 width=84) (actual time=234.000..390.000 rows=1473 loops=1)
                                      Join Filter: (("inner".person_id = "outer".person_id) OR ("position"(("inner".s_team)::text, ("outer".initials)::text) > 0))
                                      ->  Seq Scan on person g  (cost=0.00..1.34 rows=1 width=11) (actual time=0.000..0.000 rows=1 loops=1)
                                            Filter: (person_id = 1)
                                      ->  Merge Right Join  (cost=1135.94..1349.74 rows=811 width=84) (actual time=234.000..297.000 rows=7490 loops=1)
                                            Merge Cond: ("outer".company_id = "inner".company_id)
                                            ->  Index Scan using idx_company_id_call_list on call_list f  (cost=0.00..189.80 rows=4731 width=8) (actual time=0.000..15.000 rows=4731 loops=1)
                                            ->  Sort  (cost=1135.94..1136.48 rows=214 width=84) (actual time=234.000..234.000 rows=7490 loops=1)
                                                  Sort Key: e.company_id
                                                  ->  Merge Right Join  (cost=1004.19..1127.66 rows=214 width=84) (actual time=203.000..219.000 rows=1569 loops=1)
                                                        Merge Cond: ("outer".company_id = "inner".company_id)
                                                        ->  Index Scan using company_pkey on company e  (cost=0.00..117.13 rows=1249 width=4) (actual time=0.000..0.000 rows=1249 loops=1)
                                                        ->  Sort  (cost=1004.19..1004.73 rows=214 width=84) (actual time=203.000..203.000 rows=1569 loops=1)
                                                              Sort Key: d.company_id
                                                              ->  Hash Left Join  (cost=633.74..995.91 rows=214 width=84) (actual time=156.000..187.000 rows=1569 loops=1)
                                                                    Hash Cond: ("outer".job_id = "inner".job_id)
                                                                    Join Filter: ("inner".won_heat OR "inner".won_vent OR "inner".won_tc OR ("outer".heat AND "inner".bid_heat AND ("inner".won_heat IS NULL)) OR ("outer".vent AND "inner".bid_vent AND ("inner (..)
                                                                    ->  Merge Left Join  (cost=368.17..381.60 rows=159 width=83) (actual time=78.000..93.000 rows=695 loops=1)
                                                                          Merge Cond: ("outer".job_id = "inner".job_id)
                                                                          ->  Sort  (cost=168.31..168.71 rows=159 width=8) (actual time=31.000..31.000 rows=695 loops=1)
                                                                                Sort Key: b.job_id
                                                                                ->  Nested Loop Left Join  (cost=0.00..162.50 rows=159 width=8) (actual time=0.000..31.000 rows=695 loops=1)
                                                                                      Join Filter: ("outer".status_id = "inner".status_id)
                                                                                      ->  Seq Scan on status a  (cost=0.00..1.18 rows=1 width=4) (actual time=0.000..0.000 rows=1 loops=1)
                                                                                            Filter: ((name)::text = 'Awaiting Award'::text)
                                                                                      ->  Seq Scan on status_list b  (cost=0.00..133.66 rows=2213 width=12) (actual time=0.000..15.000 rows=2210 loops=1)
                                                                                            Filter: active
                                                                          ->  Sort  (cost=199.86..205.39 rows=2210 width=79) (actual time=47.000..47.000 rows=2194 loops=1)
                                                                                Sort Key: c.job_id
                                                                                ->  Seq Scan on job c  (cost=0.00..77.10 rows=2210 width=79) (actual time=0.000..31.000 rows=2210 loops=1)
                                                                    ->  Hash  (cost=202.88..202.88 rows=7475 width=14) (actual time=78.000..78.000 rows=0 loops=1)
                                                                          ->  Seq Scan on builder_list d  (cost=0.00..202.88 rows=7475 width=14) (actual time=0.000..15.000 rows=7517 loops=1)
                                                                                Filter: (role = 'C'::bpchar)
                                ->  Hash  (cost=1.27..1.27 rows=27 width=11) (actual time=0.000..0.000 rows=0 loops=1)
                                      ->  Seq Scan on person h  (cost=0.00..1.27 rows=27 width=11) (actual time=0.000..0.000 rows=27 loops=1)
                    ->  Sort  (cost=324.76..330.25 rows=2196 width=8) (actual time=31.000..31.000 rows=3044 loops=1)
                          Sort Key: i.job_id
                          ->  Seq Scan on builder_list i  (cost=0.00..202.88 rows=2196 width=8) (actual time=0.000..31.000 rows=2153 loops=1)
                                Filter: (role = 'E'::bpchar)
              ->  Hash  (cost=40.49..40.49 rows=1249 width=27) (actual time=16.000..16.000 rows=0 loops=1)
                    ->  Seq Scan on company j  (cost=0.00..40.49 rows=1249 width=27) (actual time=0.000..0.000 rows=1249 loops=1)
Total runtime: 781.000 ms
Courriel-0.40/t/data/stress-test/mbox_mime_nested_2.txt0000644000175000017500000001501312653205401023033 0ustar autarchautarchFrom dojo-interest-bounces@dojotoolkit.org Thu Jun 7 18:59:45 2007 Return-Path: X-Original-To: archive_dojo-interest_dojotoolkit.org@grokbase.com X-Original-To: dojo-interest@dojotoolkit.org Delivered-To: archive_dojo-interest_dojotoolkit.org@grokbase.com Delivered-To: dojo-interest@dojotoolkit.org X-Spam-Status: No, hits=2.2 required=5.0 tests=FH_MSGID_01C67,HTML_MESSAGE,OUTLOOK_3416 X-Spam-Check-By: s69759.xenosight.com Received: from turtle.dojotoolkit.org (HELO turtle.dojotoolkit.org) (64.93.73.95) by s69759.xenosight.com (qpsmtpd/0.32) with ESMTP; Thu, 07 Jun 2007 18:59:44 -0500 Received: from turtle.dojotoolkit.org (localhost.localdomain [127.0.0.1]) by turtle.dojotoolkit.org (Postfix) with ESMTP id 100FD23F767; Thu, 7 Jun 2007 23:56:10 +0000 (UTC) Received: from ms-smtp-04.rdc-nyc.rr.com (ms-smtp-04.rdc-nyc.rr.com [24.29.109.8]) by turtle.dojotoolkit.org (Postfix) with ESMTP id ADBD423F758 for ; Thu, 7 Jun 2007 23:56:07 +0000 (UTC) Received: from SHUTTLE (cpe-66-108-140-226.nyc.res.rr.com [66.108.140.226]) by ms-smtp-04.rdc-nyc.rr.com (8.13.4/8.13.4) with ESMTP id l57NxKH1016677 for ; Thu, 7 Jun 2007 19:59:24 -0400 (EDT) From: "Yves Greatti" To: Date: Thu, 7 Jun 2007 19:59:20 -0400 Message-ID: <000001c7a95f$ddec59f0$8119fea9@SHUTTLE> MIME-Version: 1.0 X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.3416 Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028 X-Virus-Scanned: Symantec AntiVirus Scan Engine Subject: [Dojo-interest] generic question X-BeenThere: dojo-interest@dojotoolkit.org X-Mailman-Version: 2.1.9 Precedence: list Reply-To: dojo-interest@dojotoolkit.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============8256426902762623206==" Sender: dojo-interest-bounces@dojotoolkit.org Errors-To: dojo-interest-bounces@dojotoolkit.org This is a multi-part message in MIME format. --===============8256426902762623206== Content-Type: multipart/alternative; boundary="----=_NextPart_000_0001_01C7A93E.56DAB9F0" This is a multi-part message in MIME format. ------=_NextPart_000_0001_01C7A93E.56DAB9F0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, I have this situation, a huge table, which is currently rendered by a jsp code. In edit mode (another jsp), one has to select a specific row, and submit it to record the changes. For each submission the user is sent back to the top of the previous page. Ideally we would like the user to be able to switch to "edit mode", modify as many cells then submit the changes. So in one submission, one cell, few cells, one row, many rows could be modified. The user will stay at the same position within the page before the submission. Will Dojo be of any help? Thanks, ------=_NextPart_000_0001_01C7A93E.56DAB9F0 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,

 

I have this situation, a huge table, which is = currently rendered by a jsp code.

In edit mode (another jsp), one has to select a = specific row, and submit it to record the changes.

For each submission the user is sent back to the top = of the previous page.

Ideally we would like the user to be able to switch = to "edit mode", modify as many cells then submit =

the changes. So in one submission, one cell, few = cells, one row, many rows could be modified.

The user will stay at the same position within the = page before the submission.

Will Dojo be of any help?

Thanks,

------=_NextPart_000_0001_01C7A93E.56DAB9F0-- --===============8256426902762623206== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ FAQ: http://dojotoolkit.org/support/faq Book: http://dojotoolkit.org/docs/book Forums: http://dojotoolkit.org/forum Dojo-interest@dojotoolkit.org http://dojotoolkit.org/mailman/listinfo/dojo-interest --===============8256426902762623206==-- Courriel-0.40/t/data/stress-test/mbox_mime_video_tmobile_1.txt0000644000175000017500000030755012653205401024403 0ustar autarchautarchDelivered-To: johncwang@gmail.com Received: by 10.142.194.20 with SMTP id r20cs79709wff; Sun, 3 Feb 2008 16:46:32 -0800 (PST) Received: by 10.141.75.6 with SMTP id c6mr4303682rvl.43.1202085990827; Sun, 03 Feb 2008 16:46:30 -0800 (PST) Return-Path: <14084665421/TYPE=PLMN@tmomail.net> Received: from mailx07.tmomail.net (med095e42.tmodns.net [66.94.9.237]) by mx.google.com with ESMTP id f21si5390401rvb.15.2008.02.03.16.46.30; Sun, 03 Feb 2008 16:46:30 -0800 (PST) Received-SPF: neutral (google.com: 66.94.9.237 is neither permitted nor denied by best guess record for domain of 14084665421/TYPE=PLMN@tmomail.net) client-ip=66.94.9.237; Authentication-Results: mx.google.com; spf=neutral (google.com: 66.94.9.237 is neither permitted nor denied by best guess record for domain of 14084665421/TYPE=PLMN@tmomail.net) smtp.mail=14084665421/TYPE=PLMN@tmomail.net Received: from tmomail.net (121.72.184.10.in-addr.arpa [10.184.72.121]) by mailx07.tmomail.net (8.14.1/8.12.11) with ESMTP id m140kKkd018584 for ; Sun, 3 Feb 2008 16:46:28 -0800 Received: by tmomail.net (Multimedia IP message store 6.1.999.11) id 47A4C57000039031 for johncwang@gmail.com; Sun, 3 Feb 2008 19:45:54 -0500 Date: Sun, 3 Feb 2008 19:45:38 -0500 From: 14084665421@tmomail.net To: johncwang@gmail.com Message-ID: <108832.9995781202085954157.JavaMail.mms@rlyatl15.tmomail.net> MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_Part_918889_33453600.1202085954152" X-UA: nokia_6133 X-MMS-Message-Type: MM4_forward.REQ X-Proofpoint-Spam-Reason: safe ------=_Part_918889_33453600.1202085954152 Content-Type: text/html Content-Transfer-Encoding: quoted-printable Content-ID: <0000> Content-Disposition: inline T-Mobile=20
V= ideo001.mpeg
=20

<= /td>
------=_Part_918889_33453600.1202085954152 Content-Type: video/mpeg; name=Video001.mpeg Content-Transfer-Encoding: base64 Content-Location: Video001.mpeg Content-ID: <82> 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 ZAHhiIBgUA5kc7wFAwBzV2bBQUxtLKcoI6G6lD2V9LCOw7Oh1pjfFzkiwPRLJGE3LOAwckTAYAcc TdkAQsxEQkH+h8GIItXSdA9pYdlNTYSix0LpZZlNmWEJodftEskTHSCzLRNwJQBNaACbWQA2jBcV iLC4lEWrs8Bq0Op9FCC6veO8F3jbZRe89elFvRuXLmPuhONaH3Qax0gsyQGmWiTgkD2EaSB7CLIG mlEpF5sZALCDZhnAr0mc+mhE6fWwxF56UmNFix9tocl4bsx8gag7mQxMEe1fJEUXjRUhhVGXTrMw iyDRl3mBiAYAgCvBnJowD2AISDH2wgLpGEJR6LFI10KrY269aCMqqVW/k3+saPtm1NzcfdHDaP77 SkIlY0tADlj6Uco5SZlpPIN1Y6lxNk4lp2t2knwxXo/v1KUiLGaGNtExsWddozqR+1JRmXkZ55b6 fZL23yw208+HwAAAAcAH9v////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////IQAb18EAAAG5a0CIYzkgEcYtS0BucNcLZJBFc0BK6KKbZzGZU1iGgVTjX71Iu0AA//UoxFMy CIIKKgAAABVVVVNTRPTbZbZZjerIWXY+XWeRj3DQ1icaoQlOJZtgMZNRt03xCPa0gDVHYrEz4Bbt aMCocqcVeHOcnqGBDWCRui/a3MCQAZkckxxiKtm14AZTULRNIFYY16ACqyOLOMLbNVaQERXA3K8x ZC2sMCGhiDLh8G47WYA2RV0qIqTa7WEY//UoxFMxCIIKKgAAABVVBVNTTPXXbZhbhfZdhchlECbW RZUVXalkWJtxXlrGgs1LIJRULazmzKwKVZG2om11NbhjFIRJ2NKTOIWaoBYzZTVs/aR1rNC6ooa8 2s3UYQmEjjSFpqUgZZacAmpqazIjVMu14TYmmnGqmQS1pBk5Fw1BVOQQlmkVCNTrEQjCpFEA//Uo xFQxBIAKKgAAAAAgK880NUjlM8FD9lMNtD9tcF0d9OFuNzEA9JiCWqiZKWEhTjjph0poRoqDDG8i u7M0gEiWt2MzWqnBGiKtabJBrV2GE3JbEjZboOIximiyNM9mwMhKXCgwkwTn0RBwHoCrcklDBR2E dnWK5ka1rVkArsjdbIprWtCBmZbKq5rWtbkI//UoxFMyCIAKKgAAABKokUkcUj0cMcEU0E8kNUlF eFVh4QTMbmjYbXKaDo0gy/hjm1rEwittYpWrckXBLqjTqlo5azaNGyK06nWijfdrGI6NqMvX7rus 1iqsbbSpURrGEYslEYW9SzIxQCKquNyPnRIQa1TKCdiaRLpLrtZKk1QrmDpdFimw7zWPPVIYOCUY //UoxFMxCIBKKgAAABTXVFHJFPDM/NNNRPPVbaKzAY8S+5RExww3apqspFrWtW1pUShAMBrSNspo Ig2nJWjGqgRrQJYuxttvNa1FCBZzbcthJIZLyMZCq3G41nBxWuaOERyOFT9rWVa1VEtcdrK7GNUQ I2dUmQ2pSNUNrgszSJgwiNZALcqVVblcbcaxrWrA//UoxGQxCIAKKgAAAAR1U00c08lFkk9FNNdl uV6TINAsNNva5xQGYyX3JB3VrIZAJyICihX0GMOoKxseNtwSqadrQNUxgE1WZlsWtApjoILzqT7A c0CVrbJ22uKawSSQeODcmqu1rm5BVRQoBAnrGwqZMBLWy1NVQa5qRkIs0NnGE5rYBJIw4Xzo3SiM gRIA//UoxGMyCIAKKgAAAB7VUUktdFU89NVVl2Ol1qHuGgSJPVOU3TENExSibj2aqbRwkh3aKxDa 9V2KYljShdum6GWYCdZk45H0RrYtaBR2pKCQ3QWQakC3HbcjaSGtTnBFONGJBP6WgRUyMQsuJKtW E22mtYGScbjes5tWEYobUm00j5rWOapwUMsVN30dEJYI//UoxFQhBIAKKgAAAAAAAbzikbakjqc7 q1TbFUalDzMrrVELdk7dscqqSPX5aM7SkiUaxDhtrZgojRAYQ7WiujwjGbmA08iQRnBpPC2Pmta1 rWthWWx81rWta1sO62Pmta1rVNg+BXhOebHOeyrx78hAQas1GNLRFyzIEqI1rLKNvmxs1rWthnWx 81rmta1o ------=_Part_918889_33453600.1202085954152 Content-Type: image/gif; name=dottedline350.gif Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=dottedline350.gif Content-ID: R0lGODlhXgEBAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/ /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/ MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/ mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/ /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAABeAQEA AAg1AFP9+yeQ4MCCCA8qNMgwYcOFDiNCnPiwokSLFC9qzMgRo8eNHzuCHCmyZMiTJFGaTMlSYUAA Ow== ------=_Part_918889_33453600.1202085954152 Content-Type: image/gif; name=dottedline600.gif Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=dottedline600.gif Content-ID: R0lGODlhWAIBAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/ /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/ MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/ mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/ /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAABYAgEA AAhFAFP9+yeQ4MCCCA8qNMgwYcOFDiNCnPiwokSLFC9qzMgRo8eNHzuCHCmyZMiTJFGaTMlypUuV MFvGfCmzJs2bM3Pa9BgQADs= ------=_Part_918889_33453600.1202085954152 Content-Type: image/gif; name=tmobilelogo.gif Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=tmobilelogo.gif Content-ID: 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 d3Pf9lg/d3Vf94INCAA7 ------=_Part_918889_33453600.1202085954152 Content-Type: image/gif; name=tmobilespace.gif Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=tmobilespace.gif Content-ID: R0lGODlhAQABAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8AAAMzMAADMAMwAzMxYW FhwcHCIiIikpKVVVVU1NTUJCQjk5Of98gP9QUNYAk8zs/+/Wxufn1q2pkDP/AGYAAJkAAMwAAAAz ADMzAGYzAJkzAMwzAP8zAABmADNmAGZmAJlmAMxmAP9mAACZADOZAGaZAJmZAMyZAP+ZAADMADPM AGbMAJnMAMzMAP/MAGb/AJn/AMz/AAD/MzMA/2YAM5kAM8wAM/8AMwAz/zMzM2YzM5kzM8wzM/8z MwBmMzNmM2ZmM5lmM8xmM/9mMwCZMzOZM2aZM5mZM8yZM/+ZMwDMMzPMM2bMM5nMM8zMM//MMzP/ M2b/M5n/M8z/M///MwAAZjMAZmYAZpkAZswAZv8AZgAzZjMzZmYzZpkzZswzZv8zZgBmZjNmZmZm ZplmZsxmZgCZZjOZZmaZZpmZZsyZZv+ZZgDMZjPMZpnMZszMZv/MZgD/ZjP/Zpn/Zsz/Zv8AzMwA /wCZmZkzmZkAmcwAmQAAmTMzmWYAmcwzmf8AmQBmmTNmmWYzmZlmmcxmmf8zmTOZmWaZmZmZmcyZ mf+ZmQDMmTPMmWbMZpnMmczMmf/MmQD/mTP/mWbMmZn/mcz/mf//mQAAzDMAmWYAzJkAzMwAzAAz mTMzzGYzzJkzzMwzzP8zzABmzDNmzGZmmZlmzMxmzP9mmQCZzDOZzGaZzJmZzMyZzP+ZzADMzDPM zGbMzJnMzMzMzP/MzAD/zDP/zGb/mZn/zMz/zP//zDMAzGYA/5kA/wAzzDMz/2Yz/5kz/8wz//8z /wBm/zNm/2ZmzJlm/8xm//9mzACZ/zOZ/2aZ/5mZ/8yZ//+Z/wDM/zPM/2bM/5nM/8zM///M/zP/ /2b/zJn//8z///9mZmb/Zv//ZmZm//9m/2b//6UAIV9fX3d3d4aGhpaWlsvLy7KystfX193d3ePj 4+rq6vHx8fj4+P/78KCgpICAgP8AAAD/AP//AAAA//8A/wD//////ywAAAAAAQABAAAIBAD/BQQA Ow== ------=_Part_918889_33453600.1202085954152 Content-Type: image/gif; name=video.gif Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=video.gif Content-ID: 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 ------=_Part_918889_33453600.1202085954152-- Courriel-0.40/t/data/stress-test/mbox_ubuntu_image1.txt0000644000175000017500000011710712653205401023075 0ustar autarchautarchFrom volvoguy@gmail.com Mon Sep 27 22:50:56 2004 Received: from rproxy.gmail.com ([64.233.170.198] helo=mproxy.gmail.com) by rince.africaninspace.com with esmtp (Exim 4.34) id 1CC90y-0001Md-A1 for ubuntu-users@lists.ubuntu.com; Mon, 27 Sep 2004 22:50:56 -0500 Received: by mproxy.gmail.com with SMTP id 76so4326683rnl for ; Mon, 27 Sep 2004 20:50:55 -0700 (PDT) Received: by 10.38.171.30 with SMTP id t30mr735999rne; Mon, 27 Sep 2004 20:50:55 -0700 (PDT) Received: by 10.38.77.53 with HTTP; Mon, 27 Sep 2004 20:50:55 -0700 (PDT) Message-ID: Date: Mon, 27 Sep 2004 23:50:55 -0400 From: volvoguy To: ubuntu-users@lists.ubuntu.com In-Reply-To: <20040927222757.65a8b66c.kjkrum@comcast.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_397_16860560.1096343455137" References: <1096210310.4151.0.camel@localhost.localdomain> <87brfsj6jk.fsf@vawad.raw.no> <1096284772.20863.0.camel@descent.netsplit.com> <1096285466.4802.0.camel@skiffworks.ca.sprintbbd.net> <20040927205103.54a0457c.kjkrum@comcast.net> <20040927222757.65a8b66c.kjkrum@comcast.net> Subject: Re: Apparel X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: volvoguy List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Sep 2004 03:50:56 -0000 Status: O Content-Length: 38473 Lines: 527 ------=_Part_397_16860560.1096343455137 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Mon, 27 Sep 2004 22:27:57 -0500, Kevin Krumwiede wrote: > Worked. The first one is what I meant. (Oooh... it's even got colors!) Yep. It's full color. It's basically a heavy duty grade iron-on, but I have a few of their shirts and they hold up really well. They have a plethora of products you can print on as well. I've attached a few more pictures that I thought were interesting. I can put the logo on one of each of their products. I haven't gone through all the steps to make any of these official yet, so I don't recall the exact costs, but I think white tshirts were $13-14 USD. I would of course leave the prices at "cost" - and therefore I wouldn't make any money off the sales. The prices are more expensive than if you had a thousand tshirts silkscreened, but a really good deal considering you can do a one-off for the same price as something mass produced - and they make them on demand, so there's no upfront costs for materials. I'd also be happy to mark up the prices a little and give the profits back to Ubuntu. I'm sure that would be helpful for giving out those free pressed CD's. :) At this point I just need the OK from the powers that be. Once I have that, these can be available online in a matter of minutes (unless I fall asleep and don't check my email again tonight). :) Aaron ------=_Part_397_16860560.1096343455137 Content-Type: image/jpeg; name="logo_bag.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="logo_bag.jpg" /9j/4AAQSkZJRgABAAEASABIAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCE AAUDBAUEAwUFBAUGBgUGCA4JCAcHCBEMDQoOFBIVFRQSFBMXGSEcFxgfGBMUHCcdHyIjJSUlFhso KygkKyEkJSMBBgYGCAcIEAkJECMXFBcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjI//EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCwEAAwEBAQEB AQEBAQAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEU MoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2Rl ZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK 0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYS QVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/AABEIAPAA8AMBEQACEQEDEQH/ 2gAMAwEAAhEDEQA/APsugAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAC gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAMgUAVrnULS2BM9xEgHXLVLkkFjC1Hx74csAf P1S3BH8Ktk1Drwj1KUJPZHOXnxo8MW5IV55Mf3Y6yeLpo0WHn2LWk/F7wpfkL9ua3b0mQqPzqo4m m+pLpTj0Ox0vV7DU4RJp15BcJ6xODW0ZRlsyGmi8PaqEFABQAUAFABQAUAFABQAUAFABQAUAFAGf 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 AKAP/9kA ------=_Part_397_16860560.1096343455137 Content-Type: image/jpeg; name="logo_hat.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="logo_hat.jpg" /9j/4AAQSkZJRgABAAEASABIAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCE AAUDBAUEAwUFBAUGBgUGCA4JCAcHCBEMDQoOFBIVFRQSFBMXGSEcFxgfGBMUHCcdHyIjJSUlFhso KygkKyEkJSMBBgYGCAcIEAkJECMXFBcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjI//EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCwEAAwEBAQEB AQEBAQAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEU MoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2Rl ZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK 0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYS QVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/AABEIAPAA8AMBEQACEQEDEQH/ 2gAMAwEAAhEDEQA/APsugAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAC gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAK ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA KACgAoAKACgAoAKACgBGIUZPAFAETXCj7oLfSlcBpuH/AIYx+Lf/AFqLiKWtNqU2nSR6TJbWt2ww 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 ------=_Part_397_16860560.1096343455137 Content-Type: image/jpeg; name="logo_hoodie.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="logo_hoodie.jpg" /9j/4AAQSkZJRgABAAEAlgCWAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCE AAUDBAUEAwUFBAUGBgUGCA4JCAcHCBEMDQoOFBIVFRQSFBMXGSEcFxgfGBMUHCcdHyIjJSUlFhso KygkKyEkJSMBBgYGCAcIEAkJECMXFBcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjI//EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCwEAAwEBAQEB AQEBAQAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEU MoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2Rl ZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK 0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYS QVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/AABEIAPAA8AMBEQACEQEDEQH/ 2gAMAwEAAhEDEQA/APsugAoAKACgAoAKACgAoAKACgAoAbJLHEP3jqg/2jigCpNq1hD9+7h47K24 /kKAIf7f03OBc/8Ajjf4UAA17TscXH/jjf4UAL/bmnj/AJeMf8Ab/CgCeDUrOY4juI89gTj+dAFp HVvuEH6GgBaACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAOW8b61NaJ9j09gs 7Ll3zyg7Ae9AHC29+xfbes3nd3c53e+aALizpwS4APTJoAVbk7cRxu3XkDFADkM5C7Qsf+8eaAFM U4I/eqcHuKAHr5kZJeRNo5xigCjf6u+mzwSKXTe21WiyOfSgDufCfiCS9VIrxCrMMJIw27z9KAOl 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 2QA= ------=_Part_397_16860560.1096343455137-- Courriel-0.40/t/data/stress-test/mbox_mime_boundary.txt0000644000175000017500000001472512653205401023164 0ustar autarchautarchFrom mason-users-admin@lists.sourceforge.net Thu Nov 3 13:54:17 2005 Return-Path: Received: from lists-outbound.sourceforge.net (lists-outbound.sourceforge.net [66.35.250.225]) by s69759.xenosight.com (8.12.11/8.12.11) with ESMTP id jA3JsGDS014689 for ; Thu, 3 Nov 2005 13:54:16 -0600 Received: from sc8-sf-list1-b.sourceforge.net (sc8-sf-list1-b.sourceforge.net [10.3.1.7]) by sc8-sf-spam1.sourceforge.net (Postfix) with ESMTP id DB08089AAA; Thu, 3 Nov 2005 11:49:18 -0800 (PST) Received: from sc8-sf-mx2-b.sourceforge.net ([10.3.1.92] helo=mail.sourceforge.net) by sc8-sf-list1.sourceforge.net with esmtp (Exim 4.30) id 1EXl4N-0000L8-0g for mason-users@lists.sourceforge.net; Thu, 03 Nov 2005 11:48:19 -0800 Received: from xproxy.gmail.com ([66.249.82.196]) by mail.sourceforge.net with esmtp (Exim 4.44) id 1EXl4L-0005Hp-Rn for mason-users@lists.sourceforge.net; Thu, 03 Nov 2005 11:48:19 -0800 Received: by xproxy.gmail.com with SMTP id h29so600761wxd for ; Thu, 03 Nov 2005 11:48:15 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:references; b=lohminCmnPywDj4LOBR93LCRpYAjZQpCotbVEMp17pwihrAULjl+pElexOKcWh3fvhVyXnijnYe2AxBON5u0kYAMzefNCMWI2UvJfJi9/Dka/UmR jIR+A3lRjNUtz0WCyakuA+BupRSPlVvbDKvIXg9AaZTyQhPZVBtd5weOhW8= Received: by 10.70.65.17 with SMTP id n17mr1063197wxa; Thu, 03 Nov 2005 11:48:15 -0800 (PST) Received: by 10.70.60.2 with HTTP; Thu, 3 Nov 2005 11:48:15 -0800 (PST) Message-ID: <87f4e9820511031148q7e120c00p56e1d0ee826d9c15@mail.gmail.com> From: Jason Kohles To: nav navlan Subject: Re: [Mason] apache configuration Cc: mason-users@lists.sourceforge.net In-Reply-To: <20051103163704.95845.qmail@web60322.mail.yahoo.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_13569_27871202.1131047295900" References: <20051103163704.95845.qmail@web60322.mail.yahoo.com> X-Spam-Score: 0.2 (/) X-Spam-Report: Spam Filtering performed by sourceforge.net. See http://spamassassin.org/tag/ for more details. Report problems to http://sf.net/tracker/?func=add&group_id=1&atid=200001 0.0 RCVD_BY_IP Received by mail server with no name 0.0 SF_CHICKENPOX_PERIOD BODY: Text interparsed with . 0.0 SF_CHICKENPOX_SLASH BODY: Text interparsed with / 0.0 SF_CHICKENPOX_AT BODY: Text interparsed with @ 0.0 SF_CHICKENPOX_APOSTROPHE BODY: Text interparsed with ' 0.1 HTML_40_50 BODY: Message is 40% to 50% HTML 0.0 HTML_MESSAGE BODY: HTML included in message Sender: mason-users-admin@lists.sourceforge.net Errors-To: mason-users-admin@lists.sourceforge.net X-BeenThere: mason-users@lists.sourceforge.net X-Mailman-Version: 2.0.9-sf.net Precedence: bulk List-Unsubscribe: , List-Id: Main user's list for Mason List-Post: List-Help: List-Subscribe: , List-Archive: X-Original-Date: Thu, 3 Nov 2005 14:48:15 -0500 Date: Thu, 3 Nov 2005 14:48:15 -0500 ------=_Part_13569_27871202.1131047295900 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On 11/3/05, nav navlan wrote: > > Hi, > Is it necessary to have ServerRoot and DocumentRoot same in order to make > Mason work perfectly? I have seen that somewhere mason book. > I mean something like this: > ServerRoot "/home/www" > DocumentRoot "/home/www/htdocs" > My setting is like following right now, > ServerRoot "/etc/httpd" > DocumentRoot "/var/www/html" > No, it's not necessary, and it's probably not a good idea, the way you have it now is the way that most people do it, with the server configuration outside the document root. -- Jason Kohles email@jasonkohles.com - http://www.jasonkohles.com/ "A witty saying proves nothing." -- Voltaire ------=_Part_13569_27871202.1131047295900 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On 11/3/05, nav navlan <navidunreal@yahoo.com> wrote:
Hi,
Is it necessary to have ServerRoot and DocumentRoot same in order to make Mason work perfectly? I have seen that somewhere mason book.
 
I mean something like this:
ServerRoot "/home/www"
DocumentRoot "/home/www/htdoc= s"
 
 
My setting is like following right now,
ServerRoot "/etc/httpd"
DocumentRoot "/var/www/html&= quot;

No, it's not necessary, and it's probably not a good idea, the way  you have it now is the way that most people do it, with the server configur= ation outside the document root.

--
Jason Kohles
email@jasonkohles.com - ht= tp://www.jasonkohles.com/
"A witty saying proves nothing."=   -- Voltaire
------=_Part_13569_27871202.1131047295900-- ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ Mason-users mailing list Mason-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mason-users Courriel-0.40/t/data/stress-test/mbox_combox6709_error.txt0000644000175000017500000001735412653205401023361 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Mon Nov 21 14:01:28 2005 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by s69759.xenosight.com (8.12.11/8.12.11) with ESMTP id jALK1RER026667 for ; Mon, 21 Nov 2005 14:01:28 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EeHik-0000Bn-4k; Mon, 21 Nov 2005 20:52:58 +0100 Received: from sa9.bezeqint.net ([192.115.104.23]) by rawmode.org with esmtp (Exim 4.52) id 1EeHif-0002ti-91 for catalyst@lists.rawmode.org; Mon, 21 Nov 2005 20:52:54 +0100 Received: from localhost (unknown [127.0.0.1]) by sa9.bezeqint.net (Bezeq International SMTP out Mail Server) with ESMTP id C2AEE33FB4 for ; Mon, 21 Nov 2005 21:57:12 +0200 (IST) Received: from sa9.bezeqint.net ([127.0.0.1]) by localhost (sa9 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 24478-10 for ; Mon, 21 Nov 2005 21:57:10 +0200 (IST) Received: from pasta.woobling.org (unknown [82.81.247.180]) by sa9.bezeqint.net (Bezeq International SMTP out Mail Server) with ESMTP for ; Mon, 21 Nov 2005 21:57:02 +0200 (IST) Received: by pasta.woobling.org (Postfix, from userid 501) id BAAD76B89; Mon, 21 Nov 2005 21:57:54 +0200 (IST) Date: Mon, 21 Nov 2005 21:57:54 +0200 From: Yuval Kogman To: The elegant MVC web framework Subject: Re: [Catalyst] Beer Rewards Message-ID: <20051121195754.GZ8114@woobling.org> References: <20051121121554.GX8114@woobling.org> <22a4faec0511210744g19404204n976919c775a8f60e@mail.gmail.com> Mime-Version: 1.0 In-Reply-To: <22a4faec0511210744g19404204n976919c775a8f60e@mail.gmail.com> X-HelloFBI-1: Allah Chemicals Weapons Mass Destruction Terror Anthrax X-HelloFBI-2: Taliban Iraq Jihad America Terrorism Communist Bomb X-OpenPGP-Key: http://nothingmuch.woobling.org/gpg-key-0xEBD27418.asc X-OpenPGP-Key-Fingerprint: C56E 126B C277 6DB7 237C 4A7C 542C 11C0 EBD2 7418 X-Habeas-SWE-1: winter into spring X-Habeas-SWE-2: brightly anticipated X-Habeas-SWE-3: like Habeas SWE (tm) X-Habeas-SWE-4: Copyright 2002 Habeas (tm) X-Habeas-SWE-5: Sender Warranted Email (SWE) (tm). The sender of this X-Habeas-SWE-6: email in exchange for a license for this Habeas X-Habeas-SWE-7: warrant mark warrants that this is a Habeas Compliant X-Habeas-SWE-8: Message (HCM) and not spam. Please report use of this X-Habeas-SWE-9: mark in spam to . User-Agent: mutt-ng 1.5.9i (Linux) X-Virus-Scanned: amavisd-new at bezeqint.net X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0745418690==" Mime-version: 1.0 Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Status: O X-Status: X-Keywords: X-UID: 72 --===============0745418690== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="+1d8mk/W7pQzMfc7" Content-Disposition: inline --+1d8mk/W7pQzMfc7 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Nov 21, 2005 at 07:44:01 -0800, John Wang wrote: > When will the ACL plugin be available? It's in the subversion repository - if you want I can make a release, but I'm hesitant - there hasn't been enough use (i needed it, but don't anymore - my project was cancelled). --=20 () Yuval Kogman 0xEBD27418 perl hacker & /\ kung foo master: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: neeyah! --+1d8mk/W7pQzMfc7 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDgibCVCwRwOvSdBgRAjXiAKC36PlkfCRzpvksQRNdb9LK9B/WXACghdfw O/rX34OnZZEBrHXJQY6LIDU= =1lVq -----END PGP SIGNATURE----- --+1d8mk/W7pQzMfc7-- --===============0745418690== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst --===============0745418690==-- From catalyst-bounces@lists.rawmode.org Mon Nov 21 14:36:09 2005 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by s69759.xenosight.com (8.12.11/8.12.11) with ESMTP id jALKa8LT026794 for ; Mon, 21 Nov 2005 14:36:09 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EeIGI-0004S8-Hh; Mon, 21 Nov 2005 21:27:38 +0100 Received: from saturnus.mwdesign.se ([195.196.29.163]) by rawmode.org with smtp (Exim 4.52) id 1EeIGD-0001Iv-E3 for catalyst@lists.rawmode.org; Mon, 21 Nov 2005 21:27:34 +0100 Received: (qmail 23956 invoked from network); 21 Nov 2005 20:33:04 -0000 Received: from unknown (HELO linjoh1.DarSerMan.com) (johanl@darserman.com@81.226.97.152) by 0 with SMTP; 21 Nov 2005 20:33:04 -0000 Message-Id: <6.1.1.1.0.20051121213043.061b3c50@127.0.0.1> X-Sender: johanl@darserman.com@mail.melmac.se X-Mailer: QUALCOMM Windows Eudora Version 6.1.1.1 Date: Mon, 21 Nov 2005 21:32:33 +0100 To: The elegant MVC web framework From: Johan Lindström Subject: Re: [Catalyst] Context sensitive template locations In-Reply-To: <20051121184306.GD10477@central.redice.net> References: <6.1.1.1.0.20051121002017.02bee360@127.0.0.1> <33643.84.143.57.123.1132534017.squirrel@mail.dunkelheit.at> <6.1.1.1.0.20051121183126.06153598@127.0.0.1> <20051121184306.GD10477@central.redice.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Status: O X-Status: X-Keywords: X-UID: 73 At 19:43 2005-11-21, Matt S Trout wrote: >Yuck. Just pass an arrayref as the INCLUDE_PATH to the TT view config and >then have requests set that ... Aahh! Of course, now I remember reading something about that in the TT archives. Much better. /J _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalystCourriel-0.40/t/data/stress-test/test_date_realistic.eml0000644000175000017500000000224312653205401023246 0ustar autarchautarchX-Mbox-From: duncan@x180.com Wed Mar 15 07:41:35 2000 Return-Path: Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 50438 invoked from network); 15 Mar 2000 07:41:35 -0000 Received: from uhura.concentric.net (206.173.118.93) by locus.apache.org with SMTP; 15 Mar 2000 07:41:35 -0000 Received: from marconi.concentric.net (marconi.concentric.net [206.173.118.71]) by uhura.concentric.net (8.9.1a/(98/12/15 5.12)) id CAA05530; Wed, 15 Mar 2000 02:41:34 -0500 (EST) [1-800-745-2747 The Concentric Network] Errors-To: Received: from rome (w002.z208176150.sjc-ca.dsl.cnc.net [208.176.150.2]) by marconi.concentric.net (8.9.1a) id CAA29821; Wed, 15 Mar 2100 02:41:33 -0500 (EST) Date: Tue, 14 Mar 2000 23:41:51 -0800 (PST) From: James Duncan Davidson X-Sender: duncan@rome To: tomcat-user@jakarta.apache.org Subject: test Message-IDX: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam-Rating: locus.apache.org 1.6.2 0/1000/N test Courriel-0.40/t/data/stress-test/mbox_mime_boundary_angle_1x.txt0000644000175000017500000000722012653205401024732 0ustar autarchautarchFrom tomcat-user-return-86155-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Tue Dec 09 15:15:47 2003 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 95305 invoked from network); 9 Dec 2003 15:15:46 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 9 Dec 2003 15:15:46 -0000 Received: (qmail 34899 invoked by uid 500); 9 Dec 2003 15:15:21 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 34830 invoked by uid 500); 9 Dec 2003 15:15:20 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 34817 invoked from network); 9 Dec 2003 15:15:20 -0000 Received: from unknown (HELO mc.sc1.ummail.com) (66.187.250.16) by daedalus.apache.org with SMTP; 9 Dec 2003 15:15:20 -0000 Received: from MARCG-EVS.SC1.UMMAIL.COM (marcg-cn2.sc1.ummail.com [66.187.248.17:25]) by mc.sc1.ummail.com with ESMTP id A1209-1015-765300; Tue, 9 Dec 2003 15:15:13 GMT X-PROVIDER-INFO: Contact abuse@unitedmessaging.com for abuse/spam/UBE complaints X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0 Content-Class: urn:content-classes:message Subject: RE: How to get username Date: Tue, 9 Dec 2003 09:10:52 -0600 Message-ID: Thread-Topic: How to get username Thread-Index: AcO+ZIJqJ8YYARb4QjqCuhi4DDOVwgAApJ7g From: "Wilson, Allen" To: "Tomcat Users List" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="<<001-3fd5e707-6553>>" Content-Disposition: inline Content-Transfer-Encoding: 8bit X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N --<<001-3fd5e707-6553>> Content-type: text/plain Content-transfer-encoding: 8bit You can use rundata.getUser().getUserName(); This will return user's login name Allen -----Original Message----- From: Chaikin, Yaakov Y (US SSA) [mailto:yaakov.y.chaikin@baesystems.com] Sent: Tuesday, December 09, 2003 8:56 AM To: tomcat-user@jakarta.apache.org Subject: How to get username Hi, Does anyone know how to get back the username once the person logged in with declarative security? Thanks. Yaakov Chaikin Software Engineer BAE SYSTEMS 301-838-6899 (phone) 301-838-6802 (fax) yaakov.y.chaikin@baesystems.com --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org --<<001-3fd5e707-6553>> Content-type: text/plain Content-transfer-encoding: 8bit This message may contain proprietary or confidential company information. Any unauthorized use or disclosure is prohibited. --<<001-3fd5e707-6553>> Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org --<<001-3fd5e707-6553>>-- Courriel-0.40/t/data/stress-test/mbox_multiple_reply.txt0000644000175000017500000000561712653205401023400 0ustar autarchautarchFrom jaq@spacepants.org Tue Oct 05 21:11:28 2004 Received: from support.anchor.net.au ([202.4.236.33]) by rince.africaninspace.com with esmtp (Exim 4.34) id 1CF1H6-0006qX-7m for ubuntu-users@lists.ubuntu.com; Tue, 05 Oct 2004 21:11:28 -0500 Received: from willow.spacepants.org (willow.bridge.anchor.net.au [10.108.62.188]) by support.anchor.net.au (Postfix) with ESMTP id 5108B2BDB6 for ; Wed, 6 Oct 2004 12:10:56 +1000 (EST) Received: by willow.spacepants.org (Postfix, from userid 1000) id 9642C264E92; Wed, 6 Oct 2004 12:09:51 +1000 (EST) Date: Wed, 6 Oct 2004 12:09:51 +1000 From: Jamie Wilkinson To: ubuntu-users@lists.ubuntu.com Message-ID: <20041006020951.GP3878@spacepants.org> Mail-Followup-To: ubuntu-users@lists.ubuntu.com References: <20041006010904.GK3878@spacepants.org> <1097027233.17830.9.camel@localhost.localdomain> <41631E15.1060106@coco2.arach.net.au> <1097019070.27630.5.camel@tyrosine> <20041006010904.GK3878@spacepants.org> <20041006014416.GA20615@ben.net.au> <41631E15.1060106@coco2.arach.net.au> <1097019070.27630.5.camel@tyrosine> <20041006010904.GK3878@spacepants.org> <41634850.60201@iNode.co.nz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1097027233.17830.9.camel@localhost.localdomain> <20041006014416.GA20615@ben.net.au> <41634850.60201@iNode.co.nz> X-Message-Flag: Magic 8-Ball says Outlook Not Good. X-Mailer: beefmail v0.0 Reply-By: Sat, 04 Sep 2004 23:19:55 +1000 X-No-CC: Please respect the setting of my Mail-Followup-To header User-Agent: Mutt/1.5.6+20040523i Subject: Re: Disappointing Evolution X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2004 02:11:28 -0000 This one time, at band camp, Jim Cheetham wrote: >ubuntu-users mailing list This one time, at band camp, Ben Lisle wrote: >Tell me about it! If you really want an RSS reader you could try Blam, This one time, at band camp, janne wrote: >If you use firefox, get the "Sage" extension; it is a pretty decent feed All good suggestions, but I really liked that straw fit into the gnome2 look and feel. -- jaq@spacepants.org http://spacepants.org/jaq.gpg Courriel-0.40/t/data/stress-test/mbox_mime_nested_from.txt0000644000175000017500000007421212653205401023643 0ustar autarchautarchFrom perl5-porters@perl.org Thu Apr 25 13:56:41 2002 Received: (qmail 304 invoked by uid 76); 25 Apr 2002 13:57:08 -0000 Received: from smtpzilla2.xs4all.nl (HELO smtpzilla2.xs4all.nl) (194.109.127.138) by onion.perl.org (qpsmtpd/0.07) with SMTP; Thu Apr 25 13:57:08 2002 -0000 Received: from procura.nl (procura.xs4all.nl [213.84.163.145]) by smtpzilla2.xs4all.nl (8.12.0/8.12.0) with SMTP id g3PDuwfj033337; Thu, 25 Apr 2002 15:56:59 +0200 (CEST) Received: from PC09 ([192.0.1.19]) by procura.nl with SMTP (Mailtraq/2.0.0.1258) id PRCRAF9794C0; Thu, 25 Apr 2002 15:56:41 +0200 Date: Thu, 25 Apr 2002 15:56:41 +0200 To: Jarkko Hietaniemi Subject: Recent smokes for Solaris, irix and linux Cc: Perl 5 Porters Message-ID: <20020425155447.CC0D.H.M.BRAND@hccnet.nl> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_3CC80AA7CC47028B0158_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit From: h.m.brand@hccnet.nl ("H.Merijn Brand") X-Hops: 1 X-Mailer: Becky! ver. 2.05 (beta1) Delivered-To: mailing list perl5-porters@perl.org Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm Newsgroups: perl.perl5.porters Path: nntp.perl.org Return-Path: Xref: nntp.perl.org perl.perl5.porters:57783 X-JNN-List-Post: X-JNN-NNTPD-Xref: nntp.perl.org perl.perl5.porters:57783 --------_3CC80AA7CC47028B0158_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Here are three very recent smokes from the other Merijn, for those that do not follow the smoke list And one from a rater fresh smoker named krokodile :) -- H.Merijn Brand Amsterdam Perl Mongers (http://amsterdam.pm.org/) using perl-5.6.1, 5.7.3 & 631 on HP-UX 10.20 & 11.00, AIX 4.2, AIX 4.3, WinNT 4, Win2K pro & WinCE 2.11. Smoking perl CORE: smokers@perl.org http://archives.develooper.com/daily-build@perl.org/ perl-qa@perl.org send smoke reports to: smokers-reports@perl.org, QA: http://qa.perl.org --------_3CC80AA7CC47028B0158_MULTIPART_MIXED_ Content-Type: message/rfc822 Content-Description: Smoke 16126 solaris 2.5.1 From daily-build-reports-return-646-h.m.brand=hccnet.nl@perl.org Thu Apr 25 14: 38:53 2002 Return-Path: Received: from onion.perl.org by deliver.hccnet.nl via onion.valueclick.com [209.85.157.220] with SMTP for id OAA24060 (8.8.8/1.13); Thu, 25 A pr 2002 14:38:52 +0200 (MET DST) Received: (qmail 55222 invoked by uid 1005); 25 Apr 2002 12:38:51 -0000 Mailing-List: contact daily-build-reports-help@perl.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list daily-build-reports@perl.org Received: (qmail 55207 invoked by uid 1005); 25 Apr 2002 12:38:50 -0000 Delivered-To: perlmail-smokers-reports@perl.org Received: (qmail 55203 invoked by uid 76); 25 Apr 2002 12:38:50 -0000 Received: from hqvsbh2.ms.com (HELO hqvsbh2.ms.com) (205.228.12.104) by onion.perl.org (qpsmtpd/0.07) with SMTP; Thu Apr 25 12:38:50 2002 -0000 Received: from hqvsbh2.ms.com (localhost [127.0.0.1]) by localhost.ms.com (Postfix) with SMTP id A0C45DA1D for ; Thu, 25 Apr 2002 08:38:48 -0400 (EDT) Received: from cwsmh1.ms.com (unknown [138.20.13.27]) by hqvsbh2.ms.com (internal Postfix) with ESMTP id 402F4DA53 for ; Thu, 25 Apr 2002 08:38:48 -0400 (EDT) Received: from cwit315.morgan.com (cwit315.morgan.com [172.16.200.156]) by cwsmh1.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id NAA13454 for ; Thu, 25 Apr 2002 13:38:47 +0100 (BST) Received: (merijnb@localhost) by cwit315.morgan.com (8.8.5/sendmail.cf.client v1.05) id NAA11573 for smokers-reports@perl.org; Thu, 25 Apr 2002 13:38:47 +0100 (BST) Resent-Message-Id: <200204251238.NAA11573@cwit315.morgan.com> Received: from sasmh1.morgan.com (sasmh1.morgan.com [144.14.19.186]) by cwsmh1.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id NAA19239 for ; Thu, 25 Ap r 2002 13:06:21 +0100 (BST) Received: (from root@localhost) by sasmh1.morgan.com (8.8.5/hub+ldap v2.4) with X.500 id IAA08373 for merijnb@cwsmh1.ms.com; Thu, 25 Apr 2002 08:06:21 -0400 (EDT) Received: from sascs1.morgan.com (sascs1.morgan.com [144.14.154.174]) by sasmh1.morgan.com (8.8.5/hub+ldap v2.4) with ESMTP id IAA08369 for ; Thu, 25 Apr 2002 08:06:20 -0400 (EDT) Received: (merijnb@localhost) by sascs1.morgan.com (8.8.5/sendmail.cf.client v1.05) id IAA06170; Thu, 25 Apr 2002 08:06:20 -0400 (EDT) Date: Thu, 25 Apr 2002 08:06:20 -0400 (EDT) Message-Id: <200204251206.IAA06170@sascs1.morgan.com> To: merijn.broeren@morganstanley.com From: Merijn.Broeren@morganstanley.com Subject: Smoke 16126 solaris 2.5.1 Resent-From: merijnb@ms.com Resent-Date: Thu, 25 Apr 2002 13:38:47 +0100 Resent-To: Smoke Reports X-UIDL: ecd8aaf4b06682176507df25e76d02c9 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Automated smoke report for patch 16126 on solaris - 2.5.1 uname -a = [SunOS 5.5.1 Generic_103640-34 sun4u sparc SUNW,Ultra-Enterprise] v1.11 using cc version O = OK F = Failure(s), extended report at the bottom ? = still running or test results not (yet) available Build failures during: - = unknown c = Configure, m = make, t = make test-prep Configuration ------- -------------------------------------------------------------------- F F F F -Dafsroot="/ms" -Uuseperlio F F F F -Dafsroot="/ms" -Duseperlio F F F F -Dafsroot="/ms" -Duseperlio -Duse64bitint c c c c -Dafsroot="/ms" -Duseperlio -Duse64bitall F F F F -Dafsroot="/ms" -Duseperlio -Duselongdouble F F F F -Dafsroot="/ms" -Duseperlio -Dusemorebits c c c c -Dafsroot="/ms" -Duseperlio -Duse64bitall -Duselongdouble F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Uuseperlio F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint c c c c -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitall F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duselongdouble F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits c c c c -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitall -Duselongdouble | | | +- PERLIO = perlio -DDEBUGGING | | +--- PERLIO = stdio -DDEBUGGING | +----- PERLIO = perlio +------- PERLIO = stdio Failures: solaris stdio/perlio -Dafsroot="/ms" -Uuseperlio solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Uuseperlio solaris stdio/perlio -Dafsroot="/ms" -Duseperlio solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio lib/locale..........................FAILED at test 99 solaris stdio/perlio -Dafsroot="/ms" -Duseperlio -Duse64bitint solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Duse64bitint ext/Encode/t/fallback...............FAILED at test 14 lib/locale..........................FAILED at test 99 /ext/Encode/t/fallback....dubiousD. FAILED test 14 solaris stdio/perlio -Dafsroot="/ms" -Duseperlio -Duselongdouble solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Duselongdouble lib/locale..........................FAILED at test 99 solaris stdio/perlio -Dafsroot="/ms" -Duseperlio -Dusemorebits solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Dusemorebits ext/Encode/t/fallback...............FAILED at test 14 lib/locale..........................FAILED at test 99 /ext/Encode/t/fallback....dubiousD. FAILED test 14 solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Uuseperlio solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Uuseperlio solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio lib/locale..........................FAILED at test 99 solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint ext/Encode/t/fallback...............FAILED at test 14 lib/locale..........................FAILED at test 99 /ext/Encode/t/fallback....dubiousD. FAILED test 14 solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duselongdouble solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duselongdouble lib/locale..........................FAILED at test 99 solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits ext/Encode/t/fallback...............FAILED at test 14 lib/locale..........................FAILED at test 99 /ext/Encode/t/fallback....dubiousD. FAILED test 14 --------_3CC80AA7CC47028B0158_MULTIPART_MIXED_ Content-Type: message/rfc822 Content-Description: Smoke 16126 solaris 2.7 From daily-build-reports-return-647-h.m.brand=hccnet.nl@perl.org Thu Apr 25 14: 39:03 2002 Return-Path: Received: from onion.perl.org by deliver.hccnet.nl via onion.valueclick.com [209.85.157.220] with SMTP for id OAA24188 (8.8.8/1.13); Thu, 25 A pr 2002 14:39:02 +0200 (MET DST) Received: (qmail 55287 invoked by uid 1005); 25 Apr 2002 12:39:01 -0000 Mailing-List: contact daily-build-reports-help@perl.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list daily-build-reports@perl.org Received: (qmail 55261 invoked by uid 1005); 25 Apr 2002 12:39:01 -0000 Delivered-To: perlmail-smokers-reports@perl.org Received: (qmail 55241 invoked by uid 76); 25 Apr 2002 12:38:54 -0000 Received: from hqvsbh1-x0.ms.com (HELO hqvsbh1.ms.com) (205.228.12.101) by onion.perl.org (qpsmtpd/0.07) with SMTP; Thu Apr 25 12:38:54 2002 -0000 Received: from hqvsbh1.ms.com (localhost [127.0.0.1]) by localhost.ms.com (Postfix) with SMTP id 460BA2084E for ; Thu, 25 Apr 2002 08:38:5 2 -0400 (EDT) Received: from cwsmh1.ms.com (unknown [138.20.13.27]) by hqvsbh1.ms.com (internal Postfix) with ESMTP id DBAF02021E for ; Thu, 25 Apr 2002 08:38:51 -0400 (EDT) Received: from cwit315.morgan.com (cwit315.morgan.com [172.16.200.156]) by cwsmh1.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id NAA13500 for ; Thu, 25 Apr 2002 13:38:51 +0100 (BST) Received: (merijnb@localhost) by cwit315.morgan.com (8.8.5/sendmail.cf.client v1.05) id NAA11577 for smokers-reports@perl.org; Thu, 25 Apr 2002 13:38:51 +0100 (BST) Resent-Message-Id: <200204251238.NAA11577@cwit315.morgan.com> Received: from sasmh3.ms.com (sasmh3.morgan.com [144.14.193.98]) by cwsmh1.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id HAA02084 for ; Thu, 25 Apr 20 02 07:18:15 +0100 (BST) Received: (from root@localhost) by sasmh3.ms.com (8.8.5/imap+ldap v2.4) with X.500 id CAA21310 for merijnb@cwsmh1.ms.com; Thu, 25 Apr 2002 02:18:15 -0400 (EDT) Received: from sascs5.morgan.com (sascs5.morgan.com [144.14.193.96]) by sasmh3.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id CAA21304 for ; Thu, 25 Apr 2002 02:18:15 -0400 (EDT) Received: (merijnb@localhost) by sascs5.morgan.com (8.8.5/sendmail.cf.client v1.05) id CAA15649; Thu, 25 Apr 2002 02:18:15 -0400 (EDT) Date: Thu, 25 Apr 2002 02:18:15 -0400 (EDT) Message-Id: <200204250618.CAA15649@sascs5.morgan.com> To: merijn.broeren@morganstanley.com From: Merijn.Broeren@morganstanley.com Subject: Smoke 16126 solaris 2.7 Resent-From: merijnb@ms.com Resent-Date: Thu, 25 Apr 2002 13:38:51 +0100 Resent-To: Smoke Reports X-UIDL: 0a105644122baf8007296c91b9cb9c9b Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Automated smoke report for patch 16126 on solaris - 2.7 uname -a = [SunOS 5.7 Generic_106541-14 sun4u sparc SUNW,Ultra-Enterprise] v1.11 using cc version O = OK F = Failure(s), extended report at the bottom ? = still running or test results not (yet) available Build failures during: - = unknown c = Configure, m = make, t = make test-prep Configuration ------- -------------------------------------------------------------------- O O O O -Dafsroot="/ms" -Uuseperlio O O O O -Dafsroot="/ms" -Duseperlio F F F F -Dafsroot="/ms" -Duseperlio -Duse64bitint c c c c -Dafsroot="/ms" -Duseperlio -Duse64bitall O O O O -Dafsroot="/ms" -Duseperlio -Duselongdouble F F F F -Dafsroot="/ms" -Duseperlio -Dusemorebits c c c c -Dafsroot="/ms" -Duseperlio -Duse64bitall -Duselongdouble O O O F -Dafsroot="/ms" -Dusethreads -Duseithreads -Uuseperlio O O O O -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint c c c c -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitall O O O O -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duselongdouble F F F F -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits c c c c -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitall -Duselongdouble | | | +- PERLIO = perlio -DDEBUGGING | | +--- PERLIO = stdio -DDEBUGGING | +----- PERLIO = perlio +------- PERLIO = stdio Failures: solaris stdio/perlio -Dafsroot="/ms" -Duseperlio -Duse64bitint solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Duse64bitint solaris stdio/perlio -Dafsroot="/ms" -Duseperlio -Dusemorebits solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Dusemorebits ext/Encode/t/fallback...............FAILED at test 14 /ext/Encode/t/fallback....dubiousD. FAILED test 14 solaris perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Uuseperlio ext/threads/t/thread................FAILED at test 14 /ext/threads/t/thread....Test output counter mismatch [test 15]LED test 14 solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint solaris stdio/perlio -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits solaris stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits ext/Encode/t/fallback...............FAILED at test 14 /ext/Encode/t/fallback....dubiousD. FAILED test 14 --------_3CC80AA7CC47028B0158_MULTIPART_MIXED_ Content-Type: message/rfc822 Content-Description: Smoke 16126 irix 6.5 From daily-build-reports-return-648-h.m.brand=hccnet.nl@perl.org Thu Apr 25 14: 39:03 2002 Return-Path: Received: from onion.perl.org by deliver.hccnet.nl via onion.valueclick.com [209.85.157.220] with SMTP for id OAA24189 (8.8.8/1.13); Thu, 25 A pr 2002 14:39:02 +0200 (MET DST) Received: (qmail 55309 invoked by uid 1005); 25 Apr 2002 12:39:01 -0000 Mailing-List: contact daily-build-reports-help@perl.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list daily-build-reports@perl.org Received: (qmail 55264 invoked by uid 1005); 25 Apr 2002 12:39:01 -0000 Delivered-To: perlmail-smokers-reports@perl.org Received: (qmail 55248 invoked by uid 76); 25 Apr 2002 12:38:57 -0000 Received: from hqvsbh1-x0.ms.com (HELO hqvsbh1.ms.com) (205.228.12.101) by onion.perl.org (qpsmtpd/0.07) with SMTP; Thu Apr 25 12:38:57 2002 -0000 Received: from hqvsbh1.ms.com (localhost [127.0.0.1]) by localhost.ms.com (Postfix) with SMTP id 0718E215AF for ; Thu, 25 Apr 2002 08:38:5 6 -0400 (EDT) Received: from cwsmh1.ms.com (unknown [138.20.13.27]) by hqvsbh1.ms.com (internal Postfix) with ESMTP id 9A39821638 for ; Thu, 25 Apr 2002 08:38:55 -0400 (EDT) Received: from cwit315.morgan.com (cwit315.morgan.com [172.16.200.156]) by cwsmh1.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id NAA13556 for ; Thu, 25 Apr 2002 13:38:55 +0100 (BST) Received: (merijnb@localhost) by cwit315.morgan.com (8.8.5/sendmail.cf.client v1.05) id NAA11581 for smokers-reports@perl.org; Thu, 25 Apr 2002 13:38:55 +0100 (BST) Resent-Message-Id: <200204251238.NAA11581@cwit315.morgan.com> Received: from hqfid1.morgan.com (hqfid1.morgan.com [144.14.36.134]) by cwsmh1.ms.com (8.8.5/imap+ldap v2.4) with ESMTP id EAA21137 for ; Thu, 25 Ap r 2002 04:57:18 +0100 (BST) Received: (from root@localhost) by hqfid1.morgan.com (8.8.5/hub+ldap v2.4) with X.500 id XAA02728 for merijnb@cwsmh1.ms.com; Wed, 24 Apr 2002 23:57:17 -0400 (EDT) Received: from sgytje.morgan.com (sgytje.morgan.com [144.14.166.199]) by hqfid1.morgan.com (8.8.5/hub+ldap v2.4) with ESMTP id XAA02724 for ; Wed, 24 Apr 2002 23:57:17 -0400 (EDT) Received: (merijnb@localhost) by sgytje.morgan.com (8.8.5/sendmail.cf.client v1.05) id DAA327978; Thu, 25 Apr 2002 03:57:16 GMT Date: Thu, 25 Apr 2002 03:57:16 GMT Message-Id: <200204250357.DAA327978@sgytje.morgan.com> To: merijn.broeren@morganstanley.com From: Merijn.Broeren@morganstanley.com Subject: Smoke 16126 irix 6.5 Resent-From: merijnb@ms.com Resent-Date: Thu, 25 Apr 2002 13:38:55 +0100 Resent-To: Smoke Reports X-UIDL: fa02c97d296fcd83ac2a749f96cc5922 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Automated smoke report for patch 16126 on irix - 6.5 uname -a = [IRIX64 6.5 04131233 IP27] v1.11 using cc -n32 -mips4 version O = OK F = Failure(s), extended report at the bottom ? = still running or test results not (yet) available Build failures during: - = unknown c = Configure, m = make, t = make test-prep Configuration ------- -------------------------------------------------------------------- O O O O -Dafsroot="/ms" -Uuseperlio O O O O -Dafsroot="/ms" -Duseperlio O O O O -Dafsroot="/ms" -Duseperlio -Duse64bitint t t t t -Dafsroot="/ms" -Duseperlio -Duse64bitall F F F F -Dafsroot="/ms" -Duseperlio -Duselongdouble F F F F -Dafsroot="/ms" -Duseperlio -Dusemorebits t t F - -Dafsroot="/ms" -Duseperlio -Duse64bitall -Duselongdouble - - - - -Dafsroot="/ms" -Dusethreads -Duseithreads -Uuseperlio - - - - -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio - - - - -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitint t t t t -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitall - - - - -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duselongdouble - - - - -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Dusemorebits - - t t -Dafsroot="/ms" -Dusethreads -Duseithreads -Duseperlio -Duse64bitall -Duselongdouble | | | +- PERLIO = perlio -DDEBUGGING | | +--- PERLIO = stdio -DDEBUGGING | +----- PERLIO = perlio +------- PERLIO = stdio Failures: irix stdio/perlio -Dafsroot="/ms" -Duseperlio -Duselongdouble irix stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Duselongdouble irix stdio/perlio -Dafsroot="/ms" -Duseperlio -Dusemorebits irix stdio/perlio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Dusemorebits t/op/sprintf........................FAILED at test 129 irix stdio -DDEBUGGING -Dafsroot="/ms" -Duseperlio -Duse64bitall -Duselongdouble t/op/sprintf........................FAILED at test 129 ext/Storable/t/canonical............FAILED at test 0 lib/ExtUtils/t/basic................FAILED at test 9 lib/Memoize/t/tie_storable..........FAILED at test 0 lib/warnings........................FAILED at test 261 --------_3CC80AA7CC47028B0158_MULTIPART_MIXED_ Content-Type: message/rfc822 Content-Description: Smoke 16127 linux 2.4.18 /home/kroepke/devel/smoke/perl-current From daily-build-reports-return-643-h.m.brand=hccnet.nl@perl.org Wed Apr 24 22: 01:58 2002 Return-Path: Received: from onion.perl.org by deliver.hccnet.nl via onion.valueclick.com [209.85.157.220] with SMTP for id WAA13619 (8.8.8/1.13); Wed, 24 A pr 2002 22:01:57 +0200 (MET DST) Received: (qmail 89874 invoked by uid 1005); 24 Apr 2002 20:01:51 -0000 Mailing-List: contact daily-build-reports-help@perl.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list daily-build-reports@perl.org Received: (qmail 89838 invoked by uid 1005); 24 Apr 2002 20:01:48 -0000 Delivered-To: perlmail-smokers-reports@perl.org Received: (qmail 89834 invoked by uid 76); 24 Apr 2002 20:01:48 -0000 Received: from go-out.mobile.de (HELO krokodil.mobile.intern) (212.12.52.41) by onion.perl.org (qpsmtpd/0.07) with SMTP; Wed Apr 24 20:01:48 2002 -0000 Received: from kroepke by krokodil.mobile.intern with local (Exim 3.35 #1 (Debian)) id 170SyN-0001I1-00 for ; Wed, 24 Apr 2002 22:02:39 +0 200 To: smokers-reports@perl.org From: ...@krokodil.mobile.intern Subject: Smoke 16127 linux 2.4.18 /home/kroepke/devel/smoke/perl-current Message-Id: Sender: Kay Roepke Date: Wed, 24 Apr 2002 22:02:39 +0200 X-UIDL: 31d07ec69c1db315df73e732ed7976d2 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Automated smoke report for patch 16127 on linux - 2.4.18 v1.12 using gcc-3.0 version 3.0.4 O = OK F = Failure(s), extended report at the bottom ? = still running or test results not (yet) available Build failures during: - = unknown c = Configure, m = make, t = make test-prep Configuration ------- -------------------------------------------------------------------- O O O O -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Uuseperlio O O O O -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio F F F F -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duse64bitint O O O O -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duselongdouble F F F F -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Dusemorebits O O O O -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Uuseperlio O O O O -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio F F F F -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duse64bitint O O O O -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duselongdouble F F F F -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Dusemorebits | | | +- PERLIO = perlio -DDEBUGGING | | +--- PERLIO = stdio -DDEBUGGING | +----- PERLIO = perlio +------- PERLIO = stdio Failures: linux stdio/perlio -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duse64bitint linux stdio/perlio -DDEBUGGING -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duse64bitint linux stdio/perlio -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Dusemorebits linux stdio/perlio -DDEBUGGING -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Dusemorebits linux stdio/perlio -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duse64bitint linux stdio/perlio -DDEBUGGING -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Duse64bit int linux stdio/perlio -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Dusemorebits linux stdio/perlio -DDEBUGGING -Dcc='gcc-3.0' -Dcpp='cpp-3.0' -Dusethreads -Duseithreads -Dperladmin="kroepke@dolphin-services.de" -Duseperlio -Dusemoreb its t/op/int............................FAILED at test 6 /t/op/int....FAILED test 6 --------_3CC80AA7CC47028B0158_MULTIPART_MIXED_-- From perl5-porters@perl.org Thu Apr 25 14:01:14 2002 Received: (qmail 6717 invoked by uid 76); 25 Apr 2002 14:01:56 -0000 Received: from mailgw5.gedas.de (HELO mailgw5.gedas.de) (139.1.44.13) by onion.perl.org (qpsmtpd/0.07) with SMTP; Thu Apr 25 14:01:56 2002 -0000 Received: from mailgw5.gedas.de (localhost [127.0.0.1]) by mailgw5.gedas.de (8.9.3+Sun/8.9.3) with ESMTP id QAA29173 for ; Thu, 25 Apr 2002 16:01:23 +0200 (MET DST) Received: from blnsem05.de.gedas.vwg (blnsem05.gedas.de [139.1.84.49]) by mailgw5.gedas.de (8.9.3+Sun/8.9.3) with ESMTP id QAA29169 for ; Thu, 25 Apr 2002 16:01:23 +0200 (MET DST) Received: by blnsem05.de.gedas.vwg with Internet Mail Service (5.5.2653.19) id ; Thu, 25 Apr 2002 16:01:23 +0200 Message-ID: To: "'perl5-porters@perl.org'" Subject: [PATCH] pp_ctl.c:pp_require Date: Thu, 25 Apr 2002 16:01:14 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" From: Philip.Newton@datenrevision.de ("Newton, Philip") X-Mailer: Internet Mail Service (5.5.2653.19) Delivered-To: mailing list perl5-porters@perl.org Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm Newsgroups: perl.perl5.porters Path: nntp.perl.org Return-Path: Xref: nntp.perl.org perl.perl5.porters:57784 X-JNN-List-Post: X-JNN-NNTPD-Xref: nntp.perl.org perl.perl5.porters:57784 I found the error message caused when you specify, say 'require 5.6;', to be a little strange. Presumable the "did you mean" line was added later, but the spot where it was added is not the best IMO. Hence the enclosed patch. --- pp_ctl.c.orig Sun Apr 7 16:20:55 2002 +++ pp_ctl.c Thu Apr 25 13:59:54 2002 @@ -2945,9 +2945,9 @@ /* help out with the "use 5.6" confusion */ if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) { - DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--" - "this is only v%d.%d.%d, stopped" - " (did you mean v%"UVuf".%03"UVuf"?)", + DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required" + " (did you mean v%"UVuf".%03"UVuf"?)--" + "this is only v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION, PERL_VERSION, PERL_SUBVERSION, rev, ver/100); } End of patch. Cheers, -- Philip Newton Philip.Newton@datenrevision.de datenrevision GmbH & Co. OHG http://www.datenrevision.de a gedas company TEL +49-40-797 007-37 Cuxhavener Str. 36, D-21149 Hamburg FAX +49-40-797 007-10 From perl5-porters@perl.org Thu Apr 25 04:21:33 2002 Received: (qmail 67476 invoked by uid 76); 25 Apr 2002 15:19:40 -0000 Received: from [216.191.234.126] (HELO nssg.mitel.com) (216.191.234.126) by onion.perl.org (qpsmtpd/0.07) with SMTP; Thu Apr 25 15:19:40 2002 -0000 Received: (qmail 13211 invoked by uid 404); 25 Apr 2002 15:19:10 -0000 Received: from schwern@pobox.com by tripe.nssg.mitel.com with qmail-scanner; 25/04/2002 11:19:09 Received: from allspice-core.nssg.mitel.com (10.33.16.12, claiming to be "e-smith.com") by tripe with SMTP id smtpdZdE8Zi; Thu, 25 Apr 2002 11:18:59 EDT Received: (qmail 23342 invoked by uid 8); 25 Apr 2002 15:18:58 -0000 Received: from blackforestcake.nssg.mitel.com (10.33.15.125, claiming to be "hse-montreal-ppp106142.qc.sympatico.ca") by allspice.nssg.mitel.com with SMTP id smtpdxikfDW; Thu, 25 Apr 2002 11:18:50 EDT Received: by hse-montreal-ppp106142.qc.sympatico.ca (Postfix, from userid 1000) id 1E79083A1; Thu, 25 Apr 2002 00:21:33 -0400 (EDT) Date: Thu, 25 Apr 2002 00:21:33 -0400 To: perl5-porters@perl.org Subject: unused attribute in Devel::DProf Message-ID: <20020425042132.GA26859@blackrider> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i From: schwern@pobox.com (Michael G Schwern) Delivered-To: mailing list perl5-porters@perl.org Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm Newsgroups: perl.perl5.porters Path: nntp.perl.org Return-Path: Xref: nntp.perl.org perl.perl5.porters:57788 X-JNN-List-Post: X-JNN-NNTPD-Xref: nntp.perl.org perl.perl5.porters:57788 Just saw this go by: cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -DVERSION=\"20000000.00_01\ " -DXS_VERSION=\"20000000.00_01\" -fpic "-I../../.." -DPERLDBf_NONAME=0x40 -DPERLDBf_GOTO=0x80 -DG_NODEBUG=32 -DPL_NEEDED DProf.c DProf.xs:97: warning: `unused' attribute ignored Running Mkbootstrap for Devel::DProf () which is coming from: #ifdef PERL_IMPLICIT_CONTEXT # define register pTHX; # undef register #endif -- Michael G. Schwern http://www.pobox.com/~schwern/ Perl Quality Assurance Kwalitee Is Job One We have cornered the market on senselessness and have profited. Courriel-0.40/t/data/stress-test/mbox_bad_date_email.txt0000644000175000017500000000155212653205401023216 0ustar autarchautarchFrom perl5-porters@perl.org Wed Jun 7 20:08:37 2000 Received: (qmail 5096 invoked by uid 511); 7 Jun 2000 20:08:37 -0000 Received: perl5-porters@perl.org Subject: perl5-porters@perl.org To: perl5-porters@perl.org Delivered-To: perl5-porters@perl.org Delivered-To: mailing list perl5-porters@perl.org Organization: perl5-porters@perl.org Date: perl5-porters@perl.org Message-ID: perl5-porters@perl.org From: perl5-porters@perl.org X-Errors-To: richard@perl.org X-Mailer: perl5-porters@perl.org X-Perlbug: perlbug@perl.org Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm Newsgroups: perl.perl5.porters Path: nntp.perl.org Return-Path: Xref: nntp.perl.org perl.perl5.porters:13469 X-JNN-List-Post: X-JNN-NNTPD-Xref: nntp.perl.org perl.perl5.porters:13469 X-JNN-Orig-Date: perl5-porters@perl.org perlCourriel-0.40/t/data/stress-test/mbox_msgid_hidden.txt0000644000175000017500000000704012653205401022740 0ustar autarchautarchFrom tomcat-user-return-63480-qmlist-jakarta-archive-tomcat-user=nagoya.apache.org@jakarta.apache.org Fri May 09 12:47:48 2003 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@apache.org Received: (qmail 18378 invoked from network); 9 May 2003 12:47:47 -0000 Received: from exchange.sun.com (192.18.33.10) by daedalus.apache.org with SMTP; 9 May 2003 12:47:47 -0000 Received: (qmail 26268 invoked by uid 97); 9 May 2003 12:49:50 -0000 Delivered-To: qmlist-jakarta-archive-tomcat-user@nagoya.betaversion.org Received: (qmail 26261 invoked from network); 9 May 2003 12:49:50 -0000 Received: from daedalus.apache.org (HELO apache.org) (208.185.179.12) by nagoya.betaversion.org with SMTP; 9 May 2003 12:49:50 -0000 Received: (qmail 16710 invoked by uid 500); 9 May 2003 12:47:29 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 16678 invoked from network); 9 May 2003 12:47:29 -0000 Received: from oldtfw04.pearsontc.com (HELO oldtms704.pearsontc.com) (12.29.228.5) by daedalus.apache.org with SMTP; 9 May 2003 12:47:29 -0000 Received: from oldtms031.prenhall.com (localhost [127.0.0.1]) by oldtms704.pearsontc.com (iPlanet Messaging Server 5.1 (built May 7 2001)) with ESMTP id <0HEM00EJ6E5BRS@oldtms704.pearsontc.com> for tomcat-user@jakarta.apache.org; Fri, 09 May 2003 08:46:23 -0400 (EDT) Received: by OLDTMS031 with Internet Mail Service (5.5.2654.89) id ; Fri, 09 May 2003 08:48:26 -0400 Content-return: allowed Date: Fri, 09 May 2003 08:48:08 -0400 From: "O'Neill, John" Subject: Tomcat server limits To: "'tomcat-user@jakarta.apache.org'" Message-id: <691974AB8807D21196F200600842F7570A7E7D51@oldtms009.schuster.com> MIME-version: 1.0 X-Mailer: Internet Mail Service (5.5.2654.89) Content-type: text/plain; charset=iso-8859-1 Content-transfer-encoding: 7BIT X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N I have an Apache, mod_jk and tomcat configuration. At a certain threshold, I begin to see a flood of EST and some SYNC_SENT tcp connections for the apache, tomcat and oracle ports (no SNYC_SENT for oracle port). Questions: 1) How do I know when I will need to load balance? 2) What are the normal and extreme settings people are using for maxProcessors on tomcat and MaxClients for Apache? 3) Has anyone needed to tune the Solaris tcp parameters to increase their efficiency for their apps? Thanks, John **************************************************************************** This email may contain confidential material. If you were not an intended recipient, please notify the sender and delete all copies. We may monitor email to and from our network. **************************************************************************** --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_mime_virus-mcafee-virusscan.txt0000644000175000017500000001323012653205401025730 0ustar autarchautarchFrom tomcat-user-return-104700-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Sun Jul 04 18:18:00 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 76004 invoked from network); 4 Jul 2004 18:17:59 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 4 Jul 2004 18:17:59 -0000 Received: (qmail 68880 invoked by uid 500); 4 Jul 2004 18:17:35 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 68615 invoked by uid 500); 4 Jul 2004 18:17:26 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 68435 invoked by uid 99); 4 Jul 2004 18:17:21 -0000 X-ASF-Spam-Status: No, hits=2.7 required=10.0 tests=FREE_TRIAL,HELO_DYNAMIC_IPADDR2,INVALID_DATE,LINES_OF_YELLING,LINES_OF_YELLING_2,LINES_OF_YELLING_3,RCVD_DOUBLE_IP_LOOSE X-Spam-Check-By: apache.org Received: from [213.229.39.169] (HELO 213-229-39-169.static.adsl-line.inode.at) (213.229.39.169) by apache.org (qpsmtpd/0.27.1) with ESMTP; Sun, 04 Jul 2004 11:17:20 -0700 Received: from 127.0.0.1 by 213-229-39-169.static.adsl-line.inode.at with SMTP ID S20040704201909$0000593; Sun, 4 Jul 2004 20:19:09 +0200 Received: (vscan-gateway 212 invoked by network (original mail was infected)); So, 4 Jul 2004 20:19:09 Received: from 80.109.225.233 by 213-229-39-169.static.adsl-line.inode.at with SMTP ID S20040704201904$0000590; Sun, 4 Jul 2004 20:19:04 +0200 Date: So, 4 Jul 2004 20:19:08 From: Mail Delivery Subsystem To: Subject: Message Bounced - Virus Infection X-Mailer: VirusScan-Gateway for XMail-Server, Beta (c) Wieser Stefan X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Hello, this is a message from Mail Delivery Subsystem of vscan.pagitz.local. *** ATTENTION *** There were problems delivering your message to the following recipient: Your message was infected with a virus. You should download a virus scanner and check your computer for viruses. Sender: Recipient: *** WHAT YOU SHOULD DO *** If you are the recipient of the message (listed under "recipient" above), you can safely ignore this message. If you are, however, the sender (listed under "sender" in the list above) you should take the following actions: http://www.mcafee.com and http://www.symantec.com offer free trial versions of their virus scanners which can remove the virus from your computer. Download them and remove the virus as soon as possible. McAfee offers an online scan which allows you to scan your computer for viruses without having to download and install a program. (see http://www.mcafee.com/myapps/vso/ov_scan.asp) If you didn't send a message containing a virus (or at least an attach- ment), please warn the other users in your address book about the virus. *** WHAT YOU SHOULD NOT DO *** First of all: Don't reply to this message. This is an automated message and your replies will be deleted automatically. Then, download a virus scanner; do not ignore this message as some viruses have quite damaging payloads (such as erasing the BIOS, deleting files, etc.) which might not affect you if you download a virus scanner and delete the virus as soon as possible. *** WHAT THE CONSEQUENCES ARE *** This message has been sent to both, sender and recipient. A copy of your original message is kept securely on the mail-server; moreover the postmaster has been informed about the message containing the virus. Your IP-address and the name of the virus have been logged to the mail servers security log. This is necessary in case we need to trace back the origin of the message. The original message was NOT delivered to the recipient. In fact, a copy containing the virus has been archived and the original message has been deleted. *** THE VIRUS-SCANNER'S REPORT *** The following output was generated by the virus scanner and might help you identifying the virus. You might want to take a look at the virus- databases of Symantec and McAfee which most likely can give you a detailed description of the virus and tell you how to remove it. [Virus Scanner Report] McAfee VirusScan for Win32 v4.32.0 Copyright (c) 1992-2003 Networks Associates Technology Inc. All rights reserved. (408) 988-3832 LICENSED COPY - Nov 27 2003 Scan engine v4.3.20 for Win32. Virus data file v4369 created Jun 24 2004 Scanning for 92380 viruses, trojans and variants. 07/04/2004 20:19:08 Options: /NOBOOT /NOMEM /ALL /UNZIP /REPORT D:\SERVER\VSCAN\VTEST\LOGFILE.T1 /NOBEEP "CHK_*.*" Scanning D: [daten] Scanning CHK_*.* chk_2message.zip ... Found the W32/Netsky.p@MM!zip virus !!! Summary report on CHK_*.* File(s) Total files: ........... 3 Clean: ................. 2 Possibly Infected: ..... 1 Time: 00:00.00 --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_utf8.txt0000644000175000017500000000652412653205401021216 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Mon Jan 9 09:03:05 2006 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by smtp.mazrmail.com (8.12.11/8.12.11) with ESMTP id k09F34CF000596 for ; Mon, 9 Jan 2006 09:03:04 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EvyNR-0003nh-97; Mon, 09 Jan 2006 15:52:05 +0100 Received: from mail.gmx.net ([213.165.64.21]) by rawmode.org with smtp (Exim 4.52) id 1EvyNK-0000zA-QL for catalyst@lists.rawmode.org; Mon, 09 Jan 2006 15:52:03 +0100 Received: (qmail invoked by alias); 09 Jan 2006 14:58:36 -0000 Received: from xdsl-84-44-230-207.netcologne.de (EHLO klangraum) [84.44.230.207] by mail.gmx.net (mp035) with SMTP; 09 Jan 2006 15:58:36 +0100 X-Authenticated: #163624 Date: Mon, 9 Jan 2006 15:58:47 +0100 From: "A. Pagaltzis" To: The elegant MVC web framework Subject: Re: [Catalyst] View::TT FILTERS and utf-8 Message-ID: <20060109145847.GD19213@klangraum> Mail-Followup-To: The elegant MVC web framework References: <25861274-FBBF-4223-A4EB-DE59EB39579B@simplicidade.org> <11A4821D-78DB-11DA-BF33-000A95719C94@sedition.com> <3390cd220601060640q1c24d653u@mail.gmail.com> <4f352aae0601060732r6e61bab9x@mail.gmail.com> <20060106155339.GD30697@central.redice.net> <3390cd220601090513h4e3e2d40g@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <3390cd220601090513h4e3e2d40g@mail.gmail.com> User-Agent: Mutt/1.4.2.1i X-Y-GMX-Trusted: 0 X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Hi Bernard, * Bernard FRIT [2006-01-09 15:40]: >Even if setting up charset to iso-8559-1 solved the problem, I >'m concerned by the fact that the output is not html safe. It >produces chars > 127 in place of escaped html chars as >é... â<80><9c>HTML safe?â<80><9d> If the charset is ISO-8859-1, you can â<80><9c>safelyâ<80><9d> use all characters from ISO-8859-1. That includes accented characters and umlauts. Escaping all characters > 127 is only necessary if the encoding is US-ASCII. Note that the default encoding for text/html, if none other is explicitly specified, is ISO-8859-1â<80>¦ Regards, -- Aristotle Pagaltzis // _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalystCourriel-0.40/t/data/stress-test/mbox_mime_virus-alert-headers.txt0000644000175000017500000000643312653205401025224 0ustar autarchautarchFrom tomcat-user-return-98406-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Wed Apr 14 11:34:38 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 83646 invoked from network); 14 Apr 2004 11:34:38 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 14 Apr 2004 11:34:38 -0000 Received: (qmail 11351 invoked by uid 500); 14 Apr 2004 11:34:14 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 11330 invoked by uid 500); 14 Apr 2004 11:34:14 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 11293 invoked from network); 14 Apr 2004 11:34:13 -0000 Received: from unknown (HELO pluton.nspoint.net) (195.252.123.15) by daedalus.apache.org with SMTP; 14 Apr 2004 11:34:13 -0000 Received: from nspoint.net (pg-as03-l045.crnagora.net [195.66.177.45]) by pluton.nspoint.net (8.12.8/8.12.8) with ESMTP id i3EBX3G3009437 for ; Wed, 14 Apr 2004 13:33:19 +0200 Message-Id: <200404141133.i3EBX3G3009437@pluton.nspoint.net> From: virusalert@nspoint.net To: Subject: FOUND VIRUS IN MAIL from to Date: Wed, 14 Apr 2004 13:33:21 +0200 MIME-Version: 1.0 X-Priority: 3 X-MSMail-Priority: Normal X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N V I R U S A L E R T Our viruschecker found a VIRUS in your email to "". We stopped delivery of this email! Now it is on you to check your system for viruses In file: /usr/local/mav/basedir/i3EBX3G3009437/i3EBX3G3009437 Found the W32/Netsky.d.eml!exe virus !!! /usr/local/mav/basedir/i3EBX3G3009437/message_details.pif Found the W32/Netsky.d@MM virus !!! For your reference, here are the headers from your email: ------------------------- BEGIN HEADERS ----------------------------- Received: from pg-as03-l045.crnagora.net [195.66.177.45] by pluton.nspoint.net [195.252.123.15] with SMTP id i3EBX3G3009437; Wed Apr 14 13:34:12 2004 +0200 From: tomcat-user@jakarta.apache.org To: vesnam@nspoint.net Subject: Re: Re: Message Date: Wed, 14 Apr 2004 13:33:21 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0011_00006D21.000015F6" X-Priority: 3 X-MSMail-Priority: Normal -------------------------- END HEADERS ------------------------------ --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_utf8_2.txt0000644000175000017500000001151612653205401021434 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Wed Jan 11 10:58:11 2006 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by smtp.mazrmail.com (8.12.11/8.12.11) with ESMTP id k0BGwBas014679 for ; Wed, 11 Jan 2006 10:58:11 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1Ewj2w-0000E9-Fa; Wed, 11 Jan 2006 17:42:02 +0100 Received: from web53409.mail.yahoo.com ([206.190.37.56]) by rawmode.org with smtp (Exim 4.52) id 1Ewj2t-0000T8-Q6 for catalyst@lists.rawmode.org; Wed, 11 Jan 2006 17:42:01 +0100 Received: (qmail 80485 invoked by uid 60001); 11 Jan 2006 16:47:54 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=Message-ID:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=HHyLVsrhKEBoqTLanPXMNuCiROJUXTerphoSCQPbqLPGxUThv7fkHshMlnDcidw6q7hs57n2epMVtG5yUgzfqQPmjmhQiibKuaUwL6+ZY7lQkkHP6wfB3XJTlR aGp1S+jnG2Xq65iGrP+doxyVqCrnB6KfvG1aeF1Vowy493Vdw= ; Message-ID: <20060111164754.80483.qmail@web53409.mail.yahoo.com> Received: from [12.182.77.130] by web53409.mail.yahoo.com via HTTP; Wed, 11 Jan 2006 08:47:54 PST Date: Wed, 11 Jan 2006 08:47:54 -0800 (PST) From: "Dr. Jennifer Nussbaum" To: catalyst@lists.rawmode.org MIME-Version: 1.0 Subject: [Catalyst] Caching problem? X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0202396941==" Mime-version: 1.0 Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org --===============0202396941== Content-Type: multipart/alternative; boundary="0-1693529836-1136998074=:80456" Content-Transfer-Encoding: 8bit --0-1693529836-1136998074=:80456 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit hi, I have a Catalyst application that does the usual database thingies. I just learned that when database info changes, the pages arent getting updated because theyre being cached, so if someone goes to www.mysite.com/catalog/view/242, they get the same content even if things have changed. Users can "reload" in the browser and get the right content. Whats the easiest way that this doesnt happen? Jen --------------------------------- Yahoo! Photos <96> Showcase holiday pictures in hardcover Photo Books. You design it and we<92>ll bind it! --------------------------------- Yahoo! Photos Got holiday prints? See all the ways to get quality prints in your hands ASAP. --0-1693529836-1136998074=:80456 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: 8bit
 hi,

I have a Catalyst application that does the usual database thingies. I
just learned t hat when database info changes, the pages arent getting
updated because theyre being cached, so if someone goes to
www.mys ite.com/catalog/view/242, they get the same content even if
things have changed. Users can "reload" in the browser and get the< br> right content.

Whats the easiest way that this doesnt happen?

Jen


Yahoo! Photos <96> Showcase holiday pictures in hardcover
Photo Books. You design it and we<92>ll bind it!


Yahoo! Photos
Got holiday prints? See all the ways to get quality prints in your hands ASAP. --0-1693529836-1136998074=:80456-- --===============0202396941== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst --===============0202396941==--Courriel-0.40/t/data/stress-test/nntp_references_split.txt0000644000175000017500000000561612653205401023677 0ustar autarchautarchX-JNN-NNTPD-Xref: nntp.perl.org perl.perl6.language:12609/28009 Newsgroups: perl.perl6.language Path: nntp.perl.org Xref: nntp.perl.org perl.perl6.language:12609 Return-Path: Mailing-List: contact perl6-language-help@perl.org; run by ezmlm Delivered-To: mailing list perl6-language@perl.org Delivered-To: moderator for perl6-language@perl.org Received: (qmail 81971 invoked by uid 76); 21 Nov 2002 02:23:12 -0000 Received: from mailhost2.auckland.ac.nz (HELO mailhost2.auckland.ac.nz) (130.216.191.4) by onion.perl.org (qpsmtpd/0.12) with SMTP; 2002-11-21 02:23:12Z Received: from mailhost.auckland.ac.nz (IDENT:mirapoint@mailhost [130.216.191.61]) by mailhost2.auckland.ac.nz (8.9.2/8.9.2/8.9.2-ua) with ESMTP id PAA19035; Thu, 21 Nov 2002 15:22:53 +1300 (NZDT) Received: from tanya.sig.net.nz (ben-vm.itss.auckland.ac.nz [130.216.4.76]) by mailhost.auckland.ac.nz (Mirapoint Messaging Server MOS 3.2.1.6-EA) with ESMTP id AKB02599; Thu, 21 Nov 2002 15:22:52 +1300 (NZDT) Received: from localhost (localhost [127.0.0.1]) by tanya.sig.net.nz (8.12.5/8.12.2/Debian -5) with ESMTP id gAL2Mvfw001341; Thu, 21 Nov 2002 15:22:57 +1300 Subject: Re: String concatentation operator To: Mark Biggar Cc: perl6-language@perl.org In-Reply-To: <3DDBCD19.9030608@attbi.com> References: <20021114202930.GT547@ool-18b93024.dyn.optonline.net> <20021114214715.GX547@ool-18b93024.dyn.optonl ine.net> <3DD42A6F.4060603@vulpes.com> <3DD6F50A.2000504@conway.org> <3DD7FE9B.8070301@conway.org> <20021118020031.GC3579@ouroboros.anu .edu.au> <20021118051040.36543.qmail@onion.perl.org> <1037673259.29506.14.camel@tanya.sig.net.nz> <3DDBCD19.9030608@attbi.com> Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) Date: 21 Nov 2002 15:22:57 +1300 Message-ID: <1037845377.1222.23.camel@tanya.sig.net.nz> Mime-Version: 1.0 From: martin@sig.net.nz (Martin D Kealey) On Thu, 2002-11-21 at 06:57, Mark Biggar wrote: > Martin D Kealey wrote: > > I want Perl to run 128 times faster on a 128 CPU machine... now I know > > that's not entirely realistic, but it should be able to run at least say > > 60 times faster. > > Amdahl's law applies here: "no amount of paralellism will speed up > an inheirently sequential algorithm" True in the abstract, but in practice in most languages an awful lot of algorithms that I inherently sequential get serialized by the compiler because it can't tell it's safe to do otherwise. This is where pure-functional or applicative languages can have a big performance win - because the compile almost alway I see that things are safe to parallelize. -Martin Courriel-0.40/t/data/stress-test/mbox_references.txt0000644000175000017500000000617212653205401022450 0ustar autarchautarchFrom matt@v8zman.com Tue Jun 14 14:17:47 2005 Received: from smtp.mailix.net ([216.148.213.132]) by rince.africaninspace.com with esmtp (Exim 4.34) id 1DiGuw-0002kW-TV for ubuntu-users@lists.ubuntu.com; Tue, 14 Jun 2005 14:17:46 -0500 Received: from [24.218.2.7] (helo=[10.10.0.100]) by smtp.mailix.net with asmtp (Exim 4.24-H) id 1DiGuU-0003Tm-7e for ubuntu-users@lists.ubuntu.com; Tue, 14 Jun 2005 12:17:18 -0700 Message-ID: <42AF2D39.3050904@v8zman.com> Date: Tue, 14 Jun 2005 15:17:13 -0400 From: Matt Patterson User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050404) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Ubuntu Help and User Discussions References: <20050523164611.GB12692@westexe.demon.co.uk><4293182A.2000001@v8zman.com> <20050524124710.GD11105@westexe.demon.co.uk> In-Reply-To: X-SA-Exim-Mail-From: matt@v8zman.com Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on southcarolina.backend X-Spam-Status: No, score=0.7 required=10.0 tests=J_CHICKENPOX_43,TW_LR autolearn=no version=3.0.2 X-Spam-Level: X-SA-Exim-Version: 3.1 (built Thu Oct 23 13:26:47 PDT 2003) X-SA-Exim-Scanned: Yes X-uvscan-result: clean (1DiGuU-0003Tm-7e) Subject: Re: freezing problems X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ubuntu Help and User Discussions List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jun 2005 19:17:47 -0000 Generally hard freezes are hardware issues related to interrupt problems. So I would look into disabling devices like network and sound and see if the problem continues. Also, of course try the acpi=off, noapic, nolapic options for the kernel. And just so you know, I used my AGP + PCI video setup for years in windows, but it crashed linux like nobodies business. It was the pci video card. Matt lee_connell wrote: >No i think someone in the postings got confused. I have ati mobility >and i am installing ati fglrx drivers and same issue happens with xorg >ati driver. tried uncommenting dri, glx, noaccel and still happened. >I am not sure how to tell if its even video causing the issue. really >sucks, i dont know where to look or how to debug the problem. > > > >Courriel-0.40/t/data/stress-test/mbox_msgid_missing_2.txt0000644000175000017500000000561612653205401023406 0ustar autarchautarchFrom tomcat-user-return-131967-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Fri Aug 26 10:05:24 2005 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 75611 invoked from network); 26 Aug 2005 10:05:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 26 Aug 2005 10:05:24 -0000 Received: (qmail 88296 invoked by uid 500); 26 Aug 2005 10:05:04 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 88264 invoked by uid 500); 26 Aug 2005 10:05:03 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 88249 invoked by uid 99); 26 Aug 2005 10:05:03 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2005 03:05:02 -0700 X-ASF-Spam-Status: No, hits=0.2 required=10.0 tests=INVALID_DATE X-Spam-Check-By: apache.org Received-SPF: neutral (asf.osuosl.org: local policy) Received: from [62.189.43.68] (HELO flmsw06.fimat.com) (62.189.43.68) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2005 03:05:19 -0700 Received: from SPLDN001.fimat.co.uk (unverified) by flmsw06.fimat.com (Content Technologies SMTPRS 4.3.12) with ESMTP id for ; Fri, 26 Aug 2005 11:16:24 +0100 Subject: Re: Viewing PDF in Internet Explorer To: "Tomcat Users List" Cc: X-Mailer: Lotus Notes Release 5.0.8 June 18, 2001 From: "Mark Sutton" Date: 26-Aug-2005 11:04:57 GDT Message-ID: X-MIMETrack: Serialize by Router on SPLDN001/SRV/FIMAT (Release 5.0.8 |June 18, 2001) at 26/08/2005 11:04:58 MIME-Version: 1.0 Content-type: text/plain; charset="us-ascii" X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N This may be due to the version of Tomcat you are using. It sounds a lot like this bug: http://issues.apache.org/bugzilla/show_bug.cgi?id=24970 This hit me when I tried upgrading from 4.1.27 to 4.1.29. I am not sure in which subsequest version it was fixed. It may have been 4.1.31. You could always try 5.X? Mark Sutton Client Services IT Development Fimat International Banque SA (UK Branch) SG House 41 Tower Hill London EC3N 4SG Tel: +44 20 7676 8311 e-mail:mark.sutton@fimat.com Courriel-0.40/t/data/stress-test/mbox_mime_yahoo-auto-response.txt0000644000175000017500000000670112653205401025255 0ustar autarchautarchFrom tomcat-user-return-112208-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Fri Oct 08 12:55:52 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 59631 invoked from network); 8 Oct 2004 12:55:52 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 8 Oct 2004 12:55:52 -0000 Received: (qmail 76191 invoked by uid 500); 8 Oct 2004 12:55:18 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 75989 invoked by uid 500); 8 Oct 2004 12:55:16 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 75967 invoked by uid 99); 8 Oct 2004 12:55:16 -0000 X-ASF-Spam-Status: No, hits=2.2 required=10.0 tests=DNS_FROM_RFC_ABUSE,FORGED_YAHOO_RCVD,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: local policy) Received: from [66.163.174.143] (HELO mta115.mail.sc5.yahoo.com) (66.163.174.143) by apache.org (qpsmtpd/0.28) with SMTP; Fri, 08 Oct 2004 05:55:15 -0700 Date: Fri, 8 Oct 2004 05:55:13 -0700 (PDT) From: freetimeintomoney@yahoo.com Subject: Yahoo! Auto Response To: tomcat-user@jakarta.apache.org MIME-Version: 1.0 Content-Type: text X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Hello Visitor, Thank you for your interest shown towards our work from HOME/CAFE (EARNING THROUGH INTERNET) opportunity.This is responce to your mail. PLZ visit our webpage for Details. http://freetime2money.cjb.net For more Details Call us at 0-9841243410 (between 7.00pm to 10.30 pm) -------------------- Original Message: X-YahooFilteredBulk: 219.64.131.243 X-Originating-IP: [219.64.131.243] Return-Path: Received: from 219.64.131.243 (EHLO yahoo.com) (219.64.131.243) by mta115.mail.sc5.yahoo.com with SMTP; Fri, 08 Oct 2004 05:55:13 -0700 From: tomcat-user@jakarta.apache.org To: freetimeintomoney@yahoo.com Subject: Re: Order Date: Fri, 8 Oct 2004 06:24:24 -0700 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0016----=_NextPart_000_0016" X-Priority: 3 X-MSMail-Priority: Normal This is a multi-part message in MIME format. ------=_NextPart_000_0016----=_NextPart_000_0016 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit Thank you for your request, your details are attached! ++++ Attachment: No Virus found ++++ Norman AntiVirus - www.norman.com ------=_NextPart_000_0016----=_NextPart_000_0016 Content-Type: application/octet-st _________________________________________________________ DO YOU YAHOO!? Get your free @yahoo.com address at http://mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_mime_applemail_1x.txt0000644000175000017500000001553212653205401023712 0ustar autarchautarchFrom catalyst-dev-bounces@lists.scsys.co.uk Tue Oct 30 00:15:44 2007 Return-Path: X-Original-To: archive@grokbase.com Delivered-To: archive@grokbase.com Received: from de007061.idaq.com (HELO jules.scsys.co.uk) (217.168.146.69) by s69759.xenosight.com (qpsmtpd/0.32) with ESMTP; Tue, 30 Oct 2007 00:15:43 -0500 Received: from localhost ([127.0.0.1] helo=jules.scsys.co.uk) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjMh-0003dX-9E; Tue, 30 Oct 2007 05:10:11 +0000 Received: from dopple.ion0.com ([69.65.110.16] helo=dave.ion0.com) by jules.scsys.co.uk with esmtp (Exim 4.60) (envelope-from ) id 1ImjMe-0003dP-Nq for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 05:10:09 +0000 Received: from dave.ion0.com (localhost [127.0.0.1]) by dave.ion0.com (8.13.8/8.12.9) with ESMTP id l9U4pdfW051676 for ; Tue, 30 Oct 2007 00:51:44 -0400 (EDT) (envelope-from jayk@ion0.com) Received: (from root@localhost) by dave.ion0.com (8.13.8/8.12.9/Submit) id l9U4pdo0051673 for catalyst-dev@lists.scsys.co.uk; Tue, 30 Oct 2007 00:51:39 -0400 (EDT) Message-ID: <4C53584B-E166-4D4C-B9F9-F8A3F5A0A529@ion0.com> From: Jay K To: Development of the elegant MVC web framework In-Reply-To: <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> MIME-Version: 1.0 (Apple Message framework v912) Subject: Re: [Catalyst-dev] Advent 2007 Date: Mon, 29 Oct 2007 23:10:02 -0600 References: <756703690710261112s35c77e57n88a96caa88854fd1@mail.gmail.com> <472248D4.8030302@jrock.us> <756703690710291513y1737c124le6aa0a471aec2fc3@mail.gmail.com> X-Mailer: Apple Mail (2.912) X-Mesmtpd-Mailerfrom: Jay K X-BeenThere: catalyst-dev@lists.scsys.co.uk X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Development of the elegant MVC web framework List-Id: Development of the elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0845696419==" Mime-version: 1.0 Errors-To: catalyst-dev-bounces@lists.scsys.co.uk --===============0845696419== Content-Type: multipart/alternative; boundary=Apple-Mail-8-665438218 --Apple-Mail-8-665438218 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit I'll do one or two. ideas: intro to auth using auth realms anyone interested in a simple 'interacting with external caches' thing - like making your app cache friendly? Jay On Oct 29, 2007, at 4:13 PM, J. Shirley wrote: > Here's a list, we can shuffle days around as necessary. > > > Day 1 - Catalyst Application Design, jrockway > Day 2 - Catalyst Base Classes - ??? > Day 3 - REST Redux, Using RESTful services and YUI; jshirley > Day 4 - Catalyst Configuration > Day 5 - $c->uri_for fun and profit - purge > Day 6 - > Day 7 > Day 8 > Day 9 > Day 10 > Day 11 > Day 12 > Day 13 > Day 14 > Day 15 > Day 16 > Day 17 > Day 18 > Day 19 > Day 20 > Day 21 > Day 22 > Day 23 > Day 24 - This Year in Catalyst - kd > > _______________________________________________ > Catalyst-dev mailing list > Catalyst-dev@lists.scsys.co.uk > http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --- "Those who can make you believe absurdities can make you commit atrocities." --Voltaire --Apple-Mail-8-665438218 Content-Type: text/html; charset=US-ASCII Content-Transfer-Encoding: quoted-printable I'll do one or two. =  

ideas: =  

intro = to auth

using = class=3D"webkit-block-placeholder">
anyone interested in a = simple 'interacting with external caches' thing - like making your app = cache friendly?

Jay

On Oct 29, 2007, at 4:13 = PM, J. Shirley wrote:

Here's a = list, we can shuffle days around as necessary.


Day 1 - = Catalyst Application Design, jrockway
Day 2 - Catalyst Base Classes - = ???
Day 3 - REST Redux, Using RESTful services and YUI; jshirley
= Day 4 - Catalyst Configuration
Day 5 - $c->uri_for fun and profit = - purge
Day 6 -
Day 7
Day 8
Day 9
Day 10
Day 11
= Day 12
Day 13
Day 14
Day 15
Day 16
Day 17
Day = 18
Day 19
Day 20
Day 21
Day 22
Day 23
Day 24 - This = Year in Catalyst - kd

= _______________________________________________
Catalyst-dev mailing = list
Catalyst-dev@lists.scsys.co= ..uk
ht= tp://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev

---
"Those who = can make you believe absurdities can make you commit atrocities." = --Voltaire

=

= --Apple-Mail-8-665438218-- --===============0845696419== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst-dev mailing list Catalyst-dev@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev --===============0845696419==-- Courriel-0.40/t/data/stress-test/mbox_references_long.txt0000644000175000017500000002330312653205401023462 0ustar autarchautarchFrom sentto-1238696-13333-1191841860-archive=grokbase.com@returns.groups.yahoo.com Mon Oct 8 06:11:04 2007 Return-Path: X-Original-To: archive@grokbase.com Delivered-To: archive@grokbase.com Received: from n19b.bullet.sp1.yahoo.com (HELO n19b.bullet.sp1.yahoo.com) (69.147.64.131) by s69759.xenosight.com (qpsmtpd/0.32) with SMTP; Mon, 08 Oct 2007 06:11:04 -0500 Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lima; d=yahoogroups.com; b=P9Qla4vt40BBfyD5kVF6bJhV2JXoS8Z2HJlbYvND5ia5CCqxUWOfz0j1b54k5U3e/Dkkvkchu6RmCwpcxL2u+VpJy3V8G3eyPhAWTpxSLzOh90KcD7W1Zi61LUx8/K5z; Received: from [216.252.122.219] by n19.bullet.sp1.yahoo.com with NNFMP; 08 Oct 2007 11:11:02 -0000 Received: from [209.73.164.86] by t4.bullet.sp1.yahoo.com with NNFMP; 08 Oct 2007 11:11:01 -0000 Received: from [66.218.66.97] by t8.bullet.scd.yahoo.com with NNFMP; 08 Oct 2007 11:11:01 -0000 X-Yahoo-Newman-Id: 1238696-m13333 X-Sender: kreinig@earthlink.net X-Apparently-To: online-saga@yahoogroups.com Received: (qmail 68166 invoked from network); 8 Oct 2007 11:10:59 -0000 Received: from unknown (69.147.108.202) by m57.grp.scd.yahoo.com with QMQP; 8 Oct 2007 11:10:59 -0000 Received: from unknown (HELO elasmtp-banded.atl.sa.earthlink.net) (209.86.89.70) by mta3.grp.re1.yahoo.com with SMTP; 8 Oct 2007 11:10:59 -0000 Received: from [141.154.126.173] (helo=[10.0.1.3]) by elasmtp-banded.atl.sa.earthlink.net with asmtp (Exim 4.34) id 1IeqVn-00047B-6y for online-saga@yahoogroups.com; Mon, 08 Oct 2007 07:10:59 -0400 In-Reply-To: <5a355a7f00009d0d@gdc4s.com> References: <5c521745000103fd@gdc4s.com> <513479.87790.qm@web60425.mail.yahoo.com> <20070907030600.1A8F2280213@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B715B907DC@TNTNC4SXCH.gdc4s.com> <20070908023651.BF40327FF48@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B715BF0638@TNTNC4SXCH.gdc4s.com> <200709101619.1iuPJ32Dw3Nl34m1@mx-casero.atl.sa.earthlink.net> <40DBE454-8732-4523-A6CC-4CD74462B516@earthlink.net> <200709110045.1iuXCGia3Nl36t0@mx-collie.atl.sa.earthlink.net> <5E8ABEB1-ED4C-45DC-819D-B7E15E93A7E5@earthlink.net> <8C431EC125E9924186D8BB91DC1152B715C80BAC@TNTNC4SXCH.gdc4s.com> <200709111429.1ivauO4Ub3Nl36v0@mx-harris.atl.sa.earthlink.net> <1BCEB9FD-3178-4C41-9853-D476C654C706@earthlink.net> <8C431EC125E9924186D8BB91DC1152B715CDA998@TNTNC4SXCH.gdc4s.com> <20070912181046.AC7F22801F8@gideon.gdc4s.com> <7cdfbb5100003670@gdc4s.com> <1C608308-E419-40A8-BC3E-5CDA15513250@earthlink.net> <20070914034847.DAB9128038F@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B715D70 B3B@TN T N C4SXCH. g dc 4 s .com> <20070915014309.63A7D28040B@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B715DDA0F9@TNTNC4SXCH.gdc4s.com> <20070917232538.CCBE6280074@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B715E589EC@TNTNC4SXCH.gdc4s.com> <20070919024355.3A04522DD7A@az25egs01.gdds.com> <8C431EC125E9924186D8BB91DC1152B715EBB648@TNTNC4SXCH.gdc4s.com> <20070920022848.18FC327FFEB@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B715F1D555@TNTNC4SXCH.gdc4s.com> <20070920215320.75CE722DD89@az25egs01.gdds.com> <8C431EC125E9924186D8BB91DC1152B715F9B7B1@TNTNC4SXCH.gdc4s.com> <20070921191102.9F1BA22DD9C@az25egs01.gdds.com> <8C431EC125E9924186D8BB91DC1152B715FCB1EF@TNTNC4SXCH.gdc4s.com> <200709250233.1iA3YS6D43Nl34m0@mx-casero.atl.sa.earthlink.net> <39D6B181-9758-45B6-A1E5-6BF30ACC9C19@earthlink.net> <200709260105.1iAp521YD3Nl36J0@mx-various.atl.sa.earthlink.net> <1c74de1600000284@gdc4s.com> <0EAA35F1-CF85-4096-B9D9-D2AC843DD446@e a rt hlink.net > < 200 70927064241.C2B4E22DD77@az25egs01.gdds.com> <8C431EC125E9924186D8BB91DC1152B7160E7078@TNTNC4SXCH.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B7160E708A@TNTNC4SXCH.gdc4s.com> <20070928004307.BF00A27FEC3@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B716150B3B@TNTNC4SXCH.gdc4s.com> <20070929205326.1EC7E22DD77@az25egs01.gdds.com> <8C431EC125E9924186D8BB91DC1152B7161BF91E@TNTNC4SXCH.gdc4s.com> <20071002233707.04A9122DD87@az25egs01.gdds.com> <8C431EC125E9924186D8BB91DC1152B71628B73E@TNTNC4SXCH.gdc4s.com> <20071004051418.958D928021C@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B71631D2FD@TNTNC4SXCH.gdc4s.com> <20071005032539.1F4462807AD@gideon.gdc4s.com> <8C431EC125E9924186D8BB91DC1152B71638B84F@TNTNC4SXCH.gdc4s.com> <20071008050727.BA7C622DD7B@az25egs01.gdds.com> <5a355a7f00009d0d@gdc4s.com> Message-Id: To: online-saga@yahoogroups.com X-Mailer: Apple Mail (2.752.2) X-ELNK-Trace: 2dc96a205399d9b5d780f4a490ca69563f9fea00a6dd62bc96ce2dd453464dc77a5d205f361494b4350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c X-Originating-IP: 209.86.89.70 X-eGroups-Msg-Info: 1:12:0:0:0 From: Kathy Reinig X-Yahoo-Profile: krreinig Sender: online-saga@yahoogroups.com MIME-Version: 1.0 Mailing-List: list online-saga@yahoogroups.com; contact online-saga-owner@yahoogroups.com Delivered-To: mailing list online-saga@yahoogroups.com List-Id: Precedence: bulk List-Unsubscribe: Date: Mon, 8 Oct 2007 07:10:58 -0400 Subject: Re: [ArM Saga] Exploring a Cave Reply-To: online-saga@yahoogroups.com X-Yahoo-Newman-Property: groups-email-tradt-m Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Oct 8, 2007, at 7:05 AM, Dahlene,William wrote: > No Problem. > > And I just realized Rurik wont be able to see in the dark to get > back to the rope. True, but the rope should be against the wall, and a hand against the wall then gets there. It's the standard way to move in the dark. And there's light above, which is where it would be most needed. Not that he's looking to leave. Just noting that if you're used to moving in the dark, it's not hard. Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/online-saga/ <*> Your email settings: Individual Email | Traditional <*> To change settings online go to: http://groups.yahoo.com/group/online-saga/join (Yahoo! ID required) <*> To change settings via email: mailto:online-saga-digest@yahoogroups.com mailto:online-saga-fullfeatured@yahoogroups.com <*> To unsubscribe from this group, send an email to: online-saga-unsubscribe@yahoogroups.com <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/ From perl5-porters-return-129439-archive=grokbase.com@perl.org Mon Oct 8 06:14:36 2007 Return-Path: X-Original-To: archive@grokbase.com Delivered-To: archive@grokbase.com Received: from x6.develooper.com (HELO lists.develooper.com) (63.251.223.186) by s69759.xenosight.com (qpsmtpd/0.32) with SMTP; Mon, 08 Oct 2007 06:14:36 -0500 Received: (qmail 6546 invoked by uid 514); 8 Oct 2007 11:14:31 -0000 Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: X-List-Archive: List-Id: Delivered-To: mailing list perl5-porters@perl.org Received: (qmail 6533 invoked from network); 8 Oct 2007 11:14:30 -0000 Delivered-To: perl5-porters@perl.org X-Spam-Status: No, hits=0.3 required=8.0 tests=BAYES_00,RCVD_IN_PBL,RDNS_DYNAMIC,TVD_RCVD_IP X-Spam-Check-By: la.mx.develooper.com Date: Mon, 8 Oct 2007 12:13:29 +0100 From: Dave Mitchell To: demerphq Cc: Michael G Schwern , albie@alfarrabio.di.uminho.pt, perl5-porters@perl.org Subject: Re: [KOT] Languages Benchmarks Message-ID: <20071008111329.GD19071@iabyn.com> References: <46CF251B.2030701@alfarrabio.di.uminho.pt> <9b18b3110708241424n1601e457t9d541b71a06eb85f@mail.gmail.com> <46CF5F51.9050001@pobox.com> <9b18b3110708250351lfd5f498vbe5b058a5edad79f@mail.gmail.com> <20070827132502.GB19324@iabyn.com> <9b18b3110709030558v3b665f33kfba29cd1abfd9769@mail.gmail.com> <9b18b3110709041246t1b017095x8b6357b5166e6c25@mail.gmail.com> <20070904194743.GG13794@iabyn.com> <9b18b3110709041255t4796b08aqe355988b18f57160@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9b18b3110709041255t4796b08aqe355988b18f57160@mail.gmail.com> User-Agent: Mutt/1.4.2.3i X-Disclaimer: This disclaimer may not be read without permission On Tue, Sep 04, 2007 at 09:55:31PM +0200, demerphq wrote: > On 9/4/07, Dave Mitchell wrote: > > On Tue, Sep 04, 2007 at 09:46:28PM +0200, demerphq wrote: > > > Actually i built perl with the AC stuff disabled and the benchmark I > > > > Um, what does AC stand for? > > Sorry. AC is abbreviation for Aho Corasick, which is more or less the > algorithm that the code in find_byclass() that you profiled > implements. > > You can disable it by finding a line regcomp.c that says > > #define TRIE_STCLASS > > and commenting it out, or whatever. You can also disable the tri > optimisation outright by modifying on of the defines at the top of > regcomp.h This is odd - I've just had another look at this 20% slowdown thing, and I can no longer see any noticeable difference between the 5.8.8 and bleed times of this benchmark (based on the 'user' value of the UNIX 'time' output). This is unthreaded, optimised 5.8.8, and bleed from 25 Sept. So either: something's changed recently in bleed that's made the problem go away, or the 20% was just noise and varies randomly from build to build (wouldn't be the first time...), or I've made a mistake somewhere. -- This is a great day for France! -- Nixon at Charles De Gaulle's funeral Courriel-0.40/t/data/stress-test/mbox_mime_partial-tomcat-failure.txt0000644000175000017500000000406312653205401025701 0ustar autarchautarchFrom tomcat-user-return-99988-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Sat May 01 16:47:24 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 97563 invoked from network); 1 May 2004 16:47:23 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 1 May 2004 16:47:23 -0000 Received: (qmail 55546 invoked by uid 500); 1 May 2004 16:46:54 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 55535 invoked by uid 500); 1 May 2004 16:46:54 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 55501 invoked from network); 1 May 2004 16:46:53 -0000 Received: from unknown (HELO jakarta.apache.org) (81.36.103.42) by daedalus.apache.org with SMTP; 1 May 2004 16:46:53 -0000 From: tomcat-user@jakarta.apache.org To: tomcat-user@jakarta.apache.org Subject: Mail Delivery (failure tomcat-user@jakarta.apache.org) Date: Sat, 1 May 2004 18:46:52 +0200 MIME-Version: 1.0 Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_000_001B_01C0CA80.6B015D10" X-Priority: 3 X-MSMail-Priority: Normal X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N ------=_NextPart_000_001B_01C0CA80.6B015D10 Content-Type: multipart/alternative; boundary="----=_NextPart_001_001C_01C0CA80.6B015D10" ------=_NextPart_001_001C_01C0CA80.6B015D10 Content- Courriel-0.40/t/data/stress-test/mixed_header_line_endings.txt0000644000175000017500000002025612653205401024435 0ustar autarchautarchX-RP-SendingIP: 72.9.105.148 X-RP-SENDER-EPOCH: 1397336837000 X-RP-DATE-HEADER-EPOCH: 1397336800000 Received: from forward1-smtp.messagingengine.com (forward1-smtp.messagingengine.com [66.111.4.223]) by mxa.senderscore.net (Postfix) with ESMTP id 440FE140006 for ; Tue, 15 Apr 2014 15:55:48 -0600 (MDT) Received: from imap22.nyi.mail.srv.osa (imap22.nyi.mail.srv.osa [10.202.2.72]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id 0150120E8C; Tue, 15 Apr 2014 17:55:48 -0400 (EDT) Received: by imap22.nyi.mail.srv.osa (Postfix, from userid 99) id F2F3D88000E; Tue, 15 Apr 2014 17:55:47 -0400 (EDT) Received: from compute3.internal (compute3.nyi.mail.srv.osa [10.202.2.43]) by sloti22t13 (Cyrus git2.5+0-git-fastmail-9767) with LMTPA; Sat, 12 Apr 2014 17:07:18 -0400 Received: from mx3 ([10.202.2.202]) by compute3.internal (LMTPProxy); Sat, 12 Apr 2014 17:07:18 -0400 Received: from e2trrjf.snavo.snavo.snavo.me.uk (unknown [72.9.105.148]) by mx3.messagingengine.com (Postfix) with ESMTP id E0BB2C0068 for ; Sat, 12 Apr 2014 17:07:17 -0400 (EDT) Received: by 016e524a.e2trrjf.snavo.snavo.snavo.me.uk (amavisd-new, port 6731) with ESMTP id 01KHC6E52HCV4A; for ; Sat, 12 Apr 2014 14:06:40 -0700 Message-ID: <3731882400351137311071034315757@e2trrjf.snavo.snavo.snavo.me.uk> To: vrwc1860csa@operamail.com Date: Sat, 12 Apr 2014 14:06:40 -0700 From: "PMP Course" Content-Type: text/html; charset=us-ascii Content-Language: en-us MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Learn how: To manage projects...like a Pro







Cannot view this newsletter mailing because of images being off? Please go right here to fix.


Learn how: To manage projects...like a Pro




effects of similar improvements in similar private undertakings at home and abroad. In such concerns it is still possible to ascertain the advantages of reorganization because theyare surrounded by a society which is still based upon private ownership in the means of production andthe use of hi. it is still possible for them to keep books and make calculations which for similar concerns in a purely socialist environment would be



entirely out of the question. Withoutcalculation, economic activity is impossible. Since under Socialismeconomic calculation is impossible, under Socialism there can be no economic activity in our sense of the word. In small and insignificant things rational action might still persist. But, for the most part, it would no longer be possible to speak of rational production. In the absence of criteria of rationality, production could not be consciously economical.



[78] For some time possibly the accumulated tradition of thousands of years of economic hidom would preserve the art of economic administration from complete disintegration. Men would preserve the old processes, not because they were rational, but because they were sanctified by tradition. In the meantime, however, changing conditions would make them irrational.They would become uneconomical as the result of changes brought about bythe general decline of economic thought. It is true that production would no longer be “anarchical.” The command of a supreme authority would govern the hi of supply. instead of the economy of “anarchical” production the senseless order of an irrational machine would be supreme. The wheels would


go round, but to no effect. Let us try to imagine the position of a socialist community. There will be hundreds and thousands of establishments in which work is going on. A minority of these will produce goods ready for use. The majority will produce capital goods and semi-manufactures. All these establishments will be closely connected. each commodity produced will phi through a whole series of such establishments before it is ready for consumption. Yet in the incessant press of all these processes the economic administration will have no real sense of direction. It will have no means of ascertaining whether a given piece of work is really necessary, whetherlabour and materialare not being wasted in completing it. How would it discover which of two processes was the more satisfactory? At best, it could compare the quantity of ultimate products. But only rarely could it compare the expenditure incurred in their production. It would know exactly—or it would imagine it knew—what it wanted to produce. It ought therefore to set about obtaining the desired results with the smallest possibleexpenditure. But to do this it would have to be able to make calculations.And such calculationsmust be calculations of value. They could not be merely “technical,” they could not be calculations ofthe objective use-value of



goods and services; this is so obvious that it needs no further demonstration. Under a system based upon private ownership in the means of production, the scale of values is the outcome of the actions of every independent member of society. Everyone plays a two-fold part in its establishment first as a consumer, secondlyas producer. As consumer, he establishes the valuation of goods ready forconsumption. As producer, he guides production-goods into those uses in which they yield the highest product. In this way all goods of higher orders also are graded in the way appropriate to them under .









Courriel-0.40/t/data/stress-test/mbox_bad_from.txt0000644000175000017500000000473512653205401022103 0ustar autarchautarchFrom nobody@gs1.ubuntuforums.org Mon Oct 25 22:43:42 2004 Received: from volcano.xlogicgroup.com ([66.98.138.34] helo=gs1.ubuntuforums.org) by rince.africaninspace.com with esmtp (Exim 4.34) id 1CMIFK-0005py-Bt for ubuntu-users@lists.ubuntu.com; Mon, 25 Oct 2004 22:43:42 -0500 Received: from nobody by gs1.ubuntuforums.org with local (Exim 4.43) id 1CMIFI-0005cL-LS for ubuntu-users@lists.ubuntu.com; Mon, 25 Oct 2004 22:43:18 -0500 To: ubuntu-users@lists.ubuntu.com From: ubuntu-geek <@gs1.ubuntuforums.org> Date: Mon, 25 Oct 2004 22:43:19 -0500 Message-ID: Organization: My Forums User-Agent: vBulletin USENET gateway X-Originating-IP: 24.247.184.104 References: <57159d7b04102520123e45610d@mail.gmail.com> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gs1.ubuntuforums.org X-AntiAbuse: Original Domain - lists.ubuntu.com X-AntiAbuse: Originator/Caller UID/GID - [99 99] / [47 12] X-AntiAbuse: Sender Address Domain - gs1.ubuntuforums.org X-Source: X-Source-Args: X-Source-Dir: X-Mailman-Approved-At: Tue, 26 Oct 2004 00:24:24 -0500 Subject: Re: dyndns.org, etc. client X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Oct 2004 03:43:42 -0000 Ethan King Wrote: > The ability to do remote access built in to gnome 2.8 is really nice > but it seems that it is really missing is a client for dyndns.org. > For many of us at home on a DSL or Calble line this would really make > the VNC feature usuable. > > So if anyone knows of a nice Gnome client please let us know. > Otherwise it would be nice to include in Hoary. > > -- > ubuntu-users mailing list > ubuntu-users@lists.ubuntu.com > http://lists.ubuntu.com/mailman/listinfo/ubuntu-users You might check gnomefiles.org they got lots of gnome applications.. -- ubuntu-geek Courriel-0.40/t/data/stress-test/mbox_mime_boundary_2.txt0000644000175000017500000001212012653205401023370 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Sat Nov 19 09:37:32 2005 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by s69759.xenosight.com (8.12.11/8.12.11) with ESMTP id jAJFbWu0028232 for ; Sat, 19 Nov 2005 09:37:32 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EdUf9-0005hG-QS; Sat, 19 Nov 2005 16:29:59 +0100 Received: from xproxy.gmail.com ([66.249.82.193]) by rawmode.org with esmtp (Exim 4.52) id 1EdUf2-00032G-Rf for catalyst@lists.rawmode.org; Sat, 19 Nov 2005 16:29:56 +0100 Received: by xproxy.gmail.com with SMTP id t4so383035wxc for ; Sat, 19 Nov 2005 07:35:26 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type; b=H8AsLHc82HF4n/oqgQLtdLzrMYeqXL/CI9GMv2DCyNL09SsfadcbXT/P0YG/xC6ChTXuJ8HSdO/buPAcQbbKUV4ZAOknULKF7cmHr+PqcV0U35yQ el85cfOFuqHuo0jZ4y+Z9p9Nba3/8gy7BDoleiWbU3JniV1yvhmOck6I3RA= Received: by 10.70.52.13 with SMTP id z13mr614083wxz; Sat, 19 Nov 2005 07:35:26 -0800 (PST) Received: by 10.70.44.10 with HTTP; Sat, 19 Nov 2005 07:35:26 -0800 (PST) Message-ID: Date: Sat, 19 Nov 2005 10:35:26 -0500 From: Drew Taylor To: The elegant MVC web framework , handel@lists.rawmode.org MIME-Version: 1.0 Subject: [Catalyst] Handle support for non-CDBI ORMs X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0167484140==" Mime-version: 1.0 Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Status: O X-Status: X-Keywords: X-UID: 13 --===============0167484140== Content-Type: multipart/alternative; boundary="----=_Part_11516_12935954.1132414526093" ------=_Part_11516_12935954.1132414526093 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline (Cross posting to both lists because Handel will be used with Catalyst) I'm about to start on a project using Handel, but I'd like to try out other ORM packages (namely DBIx::Class or Rose::DB::Object). How tightly integrated is CDBI into Handel? Could I use Sweet or perhaps DBIx::Class::Compat(sp?) which should use the same interface as CDBI? BTW, the Handel article on perl.com was excellent. :-) Drew -- ---------------------------------------------------------------- Drew Taylor * Web development & consulting Email: drew@drewtaylor.com * Site implementation & hosting Web : www.drewtaylor.com * perl/mod_perl/DBI/mysql/postgres ---------------------------------------------------------------- ------=_Part_11516_12935954.1132414526093 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline (Cross posting to both lists because Handel will be used with Catalyst)
=
I'm about to start on a project using Handel, but I'd like to try out o= ther ORM packages (namely DBIx::Class or Rose::DB::Object). How tightly int= egrated is CDBI into Handel? Could I use Sweet or perhaps DBIx::Class::Comp= at(sp?) which should use the same interface as CDBI?

BTW, the Handel article on perl.com= was excellent. :-)

Drew
--
-------------------= ---------------------------------------------
Drew Taylor  &n= bsp;            = ;  *  Web development & consulting
Email: drew@drewtaylor.com&= nbsp; *  Site implementation & hosting
Web &nbs= p;: www.drewtaylor.com  = ; *  perl/mod_perl/DBI/mysql/postgres
---------------------------------------------------------------- ------=_Part_11516_12935954.1132414526093-- --===============0167484140== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst --===============0167484140==-- Courriel-0.40/t/data/stress-test/mbox_mime_boundary_3.txt0000644000175000017500000001243212653205401023377 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Mon Nov 21 06:43:32 2005 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by s69759.xenosight.com (8.12.11/8.12.11) with ESMTP id jALChVmM024617 for ; Mon, 21 Nov 2005 06:43:31 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EeAss-0008Bk-JT; Mon, 21 Nov 2005 13:34:58 +0100 Received: from sa2.bezeqint.net ([192.115.104.16]) by rawmode.org with esmtp (Exim 4.52) id 1EeAsn-000665-IG for catalyst@lists.rawmode.org; Mon, 21 Nov 2005 13:34:55 +0100 Received: from localhost (unknown [127.0.0.1]) by sa2.bezeqint.net (Bezeq International SMTP out Mail Server) with ESMTP id 9C21C33CF5 for ; Mon, 21 Nov 2005 14:40:22 +0200 (IST) Received: from sa2.bezeqint.net ([127.0.0.1]) by localhost (sa2 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 01868-05 for ; Mon, 21 Nov 2005 14:40:19 +0200 (IST) Received: from pasta.woobling.org (unknown [82.81.247.180]) by sa2.bezeqint.net (Bezeq International SMTP out Mail Server) with ESMTP for ; Mon, 21 Nov 2005 14:40:19 +0200 (IST) Received: by pasta.woobling.org (Postfix, from userid 501) id 23B626C45; Mon, 21 Nov 2005 14:39:54 +0200 (IST) Date: Mon, 21 Nov 2005 14:39:53 +0200 From: Yuval Kogman To: The elegant MVC web framework Subject: Re: [Catalyst] Beer Rewards Message-ID: <20051121123953.GY8114@woobling.org> References: <20051121121554.GX8114@woobling.org> <6.1.1.1.0.20051121132320.04b69738@127.0.0.1> <20051121122801.GX4916@herlpacker.co.uk> Mime-Version: 1.0 In-Reply-To: <20051121122801.GX4916@herlpacker.co.uk> X-HelloFBI-1: Allah Chemicals Weapons Mass Destruction Terror Anthrax X-HelloFBI-2: Taliban Iraq Jihad America Terrorism Communist Bomb X-OpenPGP-Key: http://nothingmuch.woobling.org/gpg-key-0xEBD27418.asc X-OpenPGP-Key-Fingerprint: C56E 126B C277 6DB7 237C 4A7C 542C 11C0 EBD2 7418 X-Habeas-SWE-1: winter into spring X-Habeas-SWE-2: brightly anticipated X-Habeas-SWE-3: like Habeas SWE (tm) X-Habeas-SWE-4: Copyright 2002 Habeas (tm) X-Habeas-SWE-5: Sender Warranted Email (SWE) (tm). The sender of this X-Habeas-SWE-6: email in exchange for a license for this Habeas X-Habeas-SWE-7: warrant mark warrants that this is a Habeas Compliant X-Habeas-SWE-8: Message (HCM) and not spam. Please report use of this X-Habeas-SWE-9: mark in spam to . User-Agent: mutt-ng 1.5.9i (Linux) X-Virus-Scanned: amavisd-new at bezeqint.net X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1726565169==" Mime-version: 1.0 Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Status: O X-Status: X-Keywords: X-UID: 49 --===============1726565169== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="tYlHSoJ8Aop8eNG2" Content-Disposition: inline --tYlHSoJ8Aop8eNG2 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Nov 21, 2005 at 12:28:01 +0000, Chisel Wright wrote: > On Mon, Nov 21, 2005 at 01:25:25PM +0100, Johan Lindstr=F6m wrote: > > At 13:15 2005-11-21, Yuval Kogman wrote: > > >http://dev.catalyst.perl.org/wiki/BeerRewards > >=20 > > I bet one beer (a Lappinkulta) that Catalyst::Easy is going to get more= =20 > > takers if described right there in the Wiki. >=20 > Yeah, I scanned through the list and immediately dismissed > Catalyst::Easy because I didn't see why I needed to head off to IRC for > the details. Fixed... Thanks for pressuring me, otherwise I would have left it at that =3D) --=20 () Yuval Kogman 0xEBD27418 perl hacker & /\ kung foo master: /me spreads pj3Ar using 0wnage: neeyah!!!!!!!!!!! --tYlHSoJ8Aop8eNG2 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDgcAZVCwRwOvSdBgRAqK/AJ0cVEEzun9rt4AOURPazUflp9IwGACdETnE cqmuTsHkmW1oJL2EAzk+vRQ= =4ymK -----END PGP SIGNATURE----- --tYlHSoJ8Aop8eNG2-- --===============1726565169== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst --===============1726565169==-- Courriel-0.40/t/data/stress-test/mbox_mime_yahoo-auto-response-cn.txt0000644000175000017500000001067012653205401025653 0ustar autarchautarchFrom tomcat-user-return-122250-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Mon Feb 28 00:13:30 2005 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 51418 invoked from network); 28 Feb 2005 00:13:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 28 Feb 2005 00:13:30 -0000 Received: (qmail 10335 invoked by uid 500); 28 Feb 2005 00:13:18 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 9968 invoked by uid 500); 28 Feb 2005 00:13:17 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 9952 invoked by uid 99); 28 Feb 2005 00:13:17 -0000 X-ASF-Spam-Status: No, hits=3.9 required=10.0 tests=DNS_FROM_RFC_ABUSE,FROM_ENDS_IN_NUMS,NO_REAL_NAME,SUBJ_ILLEGAL_CHARS X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: local policy includes SPF record at spf.trusted-forwarder.org) Received: from mta108.mail.cnb.yahoo.com (HELO mta108.mail.cnb.yahoo.com) (202.165.102.48) by apache.org (qpsmtpd/0.28) with SMTP; Sun, 27 Feb 2005 16:13:15 -0800 Date: Mon, 28 Feb 2005 08:13:11 +0800 (CST) From: sunjinsheng0604@yahoo.com.cn Subject: Yahoo! À´ÐÅ×Ô¶¯»Ø¸´ To: tomcat-user@jakarta.apache.org MIME-Version: 1.0 Content-Type: text X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N ÄúºÃ£¡Äú¶ÔÕâ¸öÐÐÒµÓÐÐËȤ£¿×¬µ½Ç®À­Â𣿲»·Á¿¼ÂÇ¿¼ÂÇÍÆ¹ãÎÒÃǵÄרÀû£¬ÔÛºÏ×÷ֻ׬²»Å⣬ÈÃÄúÕæÕýµÄ°×ÊÖÆð¼Ò£¨Äú²»Í¶×ÊÔõô»áÅ⣿£©ÁªÏµ°¡£¡ Èý¹«£º¹«¿ª£¬¹«Æ½ºÍ¹«ÕýÖ±½ÓÏúÊÛ8ÕÛ£¬×Ô¼º¿´°É ÎÒÃǺÓÄÏÜþÑôÅóÓÑÓÚ´º»¨Ò²À´ºÏ×÷Á˰¡ ËýµÄµç»°13137158831 ÎÒÃÇ¿ª·âµÄÅóÓÑÁõºìϼ´ó½ã ÊÖ»ú13937890987 Õ¬µç0378-5865295 http://sunjinsheng.anyp.cn ENGLISH QQ66474435 +QQ88527227 TIVÑĮ̀ÉÌó(µÚÒ»ÈË)»òÕß13542072734ÀîÉÐÆæ +QQ44116005 Ææ£¨µÚ¶þÈË£© µç»°02368317916 Í¿Ôö +QQ252034688(µÚÈýÈË)ÊÖ»ú13570548822µç»°02085522738ºò½ú¶«+QQ2647 29225globolÇþµÀ(µÚËÄÈË)·½±ã¸Û°ÄÒÔ¼°ËùÓз±Ìå°æ±¾µÄÅóÓÑÔÄÀÀÇë½øÈë http://sunjinsheng.home.sunbo.net/ µ±Ç°×¨ÀûºÏ×÷Ǣ̸ÖÐ ¶ÔÎÒÃǵÄרÀûÓÐÐËȤµÄÅóÓÑÇëÉÔ΢ µÈµÈ ÍòÒ»Õâ¸öǢ̸²»³É ÎÒÃÇÔÙ̸ רÀûºÏ×÷̸³ÉÁË Ä¿Ç°¸÷¸öµØÇøµÄ´úÀí²»±ä ÏÖ³ÏÕÐÆäËûµØÇøµÄ¶À¼Ò´úÀí µç»°13938603662 -------------------- Original Message: X-YahooFilteredBulk: 219.146.223.41 Authentication-Results: mta108.mail.cnb.yahoo.com from=jakarta.apache.org; domainkeys=neutral (no sig) X-Originating-IP: [219.146.223.41] Return-Path: Received: from 219.146.223.41 (EHLO jakarta.apache.org) (219.146.223.41) by mta108.mail.cnb.yahoo.com with SMTP; Mon, 28 Feb 2005 08:13:11 +0800 From: tomcat-user@jakarta.apache.org To: sunjinsheng0604@yahoo.com.cn Subject: Hello Date: Mon, 28 Feb 2005 08:11:59 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0005_8F0CA16D.717EFEBC" X-Priority: 3 X-MSMail-Priority: Normal This is a multi-part message in MIME format. ------=_NextPart_000_0005_8F0CA16D.717EFEBC Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit The message contains Unicode characters and has been s _________________________________________________________ DO YOU YAHOO!? Get your free @yahoo.com address at http://mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_gmane_entities.txt0000644000175000017500000000562412653205401023323 0ustar autarchautarchFrom gluu-ubuntu-users@m.gmane.org Tue Jun 14 14:16:39 2005 Received: from main.gmane.org ([80.91.229.2] helo=ciao.gmane.org) by rince.africaninspace.com with esmtp (Exim 4.34) id 1DiGtr-0002jp-EF for ubuntu-users@lists.ubuntu.com; Tue, 14 Jun 2005 14:16:39 -0500 Received: from root by ciao.gmane.org with local (Exim 4.43) id 1DiGo7-0007Hd-3w for ubuntu-users@lists.ubuntu.com; Tue, 14 Jun 2005 21:10:43 +0200 Received: from 66.250.73.16 ([66.250.73.16]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 14 Jun 2005 21:10:43 +0200 Received: from russblau by 66.250.73.16 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 14 Jun 2005 21:10:43 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: ubuntu-users@lists.ubuntu.com From: "Russell Blau" Date: Tue, 14 Jun 2005 10:29:08 -0400 Lines: 20 Message-ID: X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: 66.250.73.16 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 Sender: news Subject: Help with new monitor X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Russell Blau , Ubuntu Help and User Discussions List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jun 2005 19:16:39 -0000 I have Ubuntu (Hoary) installed on an Intel 486DX2 box. I have two computers (the Ubuntu box and a Windows box) sharing a keyboard, mouse, and monitor using a KVM switch. This weekend I installed a new LCD monitor. It works fine with the Windows box. When I switch to Ubuntu I see the boot process just fine (in text mode), but then when Gnome kicks in for the login screen the monitor goes blank and I see "Cannot display current graphics mode." So, the only way I can get into Ubuntu now is by SSH'ing to it from another machine. Here's the question -- somewhere on my system there is probably a file that tells Gnome what the default graphics mode should be. How do I find and change that file to put in some plain-vanilla graphics mode that my new monitor should be able to handle? Thanks in advance. Russ Blau Courriel-0.40/t/data/stress-test/mbox_mime_virus-mcgraw-hill.txt0000644000175000017500000000622612653205401024712 0ustar autarchautarchFrom tomcat-user-return-104834-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Tue Jul 06 19:49:57 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 56912 invoked from network); 6 Jul 2004 19:49:57 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 6 Jul 2004 19:49:57 -0000 Received: (qmail 89832 invoked by uid 500); 6 Jul 2004 19:49:43 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 89793 invoked by uid 500); 6 Jul 2004 19:49:43 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 89780 invoked by uid 99); 6 Jul 2004 19:49:43 -0000 X-ASF-Spam-Status: No, hits=2.5 required=10.0 tests=FROM_AND_TO_SAME,NO_REAL_NAME,RCVD_ILLEGAL_IP X-Spam-Check-By: apache.org Received: from [198.45.18.165] (HELO corp148mr3.mcgraw-hill.com) (198.45.18.165) by apache.org (qpsmtpd/0.27.1) with ESMTP; Tue, 06 Jul 2004 12:49:41 -0700 Received: from unknown (0.0.0.0) by corp148mr3.mcgraw-hill.com with ; 06 Jul 2004 15:49:18 -0400 Date: 06 Jul 2004 15:49:18 -0400 To: tomcat-user@jakarta.apache.org From: Subject: Attachment type not allowed X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N We have received a message with your e-mail address (tomcat-user@jakarta.apache.org) as the sender, with the following as the Subject: "TEST" . Due to security standards maintained on the McGraw-Hill corporate network, one or more of the attachments contained in your message fall into the category of files that could potentially contain harmful or malicious coding such as viruses. Therefore the entire message was blocked and NOT delivered. If you are in fact the sender of this message, please contact the intended recipient(s): stan@mcgrawhill.ca to make alternate arrangements for delivering the attachments. If you did NOT send the message, no further action is required on your part. We apologize for the inconvenience. >From tomcat-user@jakarta.apache.org Tue Jul 06 15:49:10 2004 X-IronPort-RCPT-TO: stan@mcgrawhill.ca From: tomcat-user@jakarta.apache.org To: stan@mcgrawhill.ca Subject: TEST Date: Tue, 6 Jul 2004 15:49:12 -0400 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0004_74614D2D.F09C944A" X-Priority: 3 X-MSMail-Priority: Normal --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.orgCourriel-0.40/t/data/stress-test/mbox_piper2mbox_attach.txt0000644000175000017500000001526012653205401023740 0ustar autarchautarchFrom victori@lamer0.com Thu Feb 1 00:27:51 2007 Date: Thu, 1 Feb 2007 00:28:00 +0000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="1180908984.D1c61bD.9667"; charset="us-ascii" List-Archive: List-Post: In-Reply-To: <9e0a28690701311127w4131c2cn546682e3cd487fc3@mail.gmail.com> Errors-To: catalyst-bounces@lists.rawmode.org List-Help: References: <200612271208.42815.mark@itsolve.co.uk> <45926EB1.2040007@cpan.org> <9e0a28690701310723p2db99e58tab1f82e1824a0abd@mail.gmail.com> <6053700D-69B0-40F2-BED8-3587EB4A9ACC@trout.me.uk> <9e0a28690701311127w4131c2cn546682e3cd487fc3@mail.gmail.com> Reply-To: The elegant MVC web framework Message-ID: <75AB7D73-107D-4CE2-A286-7BB8E3C55ACB@lamer0.com> X-BeenThere: catalyst@lists.rawmode.org Subject: [Catalyst] FormBuilder + C::C::Formbuilder memory leak fixes List-Id: The elegant MVC web framework Return-Path: List-Subscribe: , Sender: catalyst-bounces@lists.rawmode.org Precedence: list List-Unsubscribe: From: Victor Igumnov --1180908984.D1c61bD.9667 Date: Sun, 3 Jun 2007 15:16:24 -0700 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline To see the impact of the memory leak. Run broken.pl first which will run formbuilder against your installed version. It will create a new formbuilder instance over and over, watch top -o size as it grows to 100-200 megs in just a few seconds. Now run fixed.pl - works great don't it? No memory leaks what so ever. I have also included a CatTest catalyst project which uses C::C::FormBuilder. With everything patched up the process stays at ~14 megs while being hammered by ab -n 900 -c 100 http://localhost: 3000/. So the question is am I the only one using formbuilder? This leak was very obvious. All tests pass for both projects. http://temp.fabulously40.com/~victori/CGI-FormBuilder-3.05-memfix.tbz -victor --1180908984.D1c61bD.9667 Date: Sun, 3 Jun 2007 15:16:24 -0700 MIME-Version: 1.0 Content-Type: text/html; name="attachment-0001.htm"; charset="us-ascii" Content-Disposition: attachment; filename="attachment-0001.htm" <HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "> ;<DIV>To see the impact of the memory leak.</DIV><DIV><BR class="khtml-block-placeholder"> ;</DIV><DIV>Run broken.pl first which will run formbuilder against your installed version.</DIV> ;<DIV>It will create a new formbuilder instance over and over, watch top -o size as&nbs p;it grows to 100-200 megs in just a few seconds.</DIV><DIV><BR class="khtml-block-placeholde r"></DIV><DIV>Now run fixed.pl - works great don't it? No memory leaks what so&nbs p;ever.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I have also included a CatTe st catalyst project which uses C::C::FormBuilder. With everything patched up the process stays at& nbsp;~14 megs while being hammered by ab -n 900 -c 100 <A href="http://localhost:3000"> http://localhost:3000</A>/. </DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>So the ques tion is am I the only one using formbuilder? This leak was very obvious.</DIV><DIV>&l t;BR class="khtml-block-placeholder"></DIV><DIV>All tests pass for both projects.</DIV><DIV>< BR class="khtml-block-placeholder"></DIV><DIV><A href="http://temp.fabulously40.com/~victori/">http://temp.fabul ously40.com/~victori/</A><FONT class="Apple-style-span" face="Lucida Grande">CGI-FormBuilder-3.05-memfix.tbz</FON T></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>-victor</DIV><BR></BODY></HTML> --1180908984.D1c61bD.9667-- From mreece@vinq.com Thu Feb 1 02:05:09 2007 List-Archive: List-Post: Errors-To: catalyst-bounces@lists.rawmode.org List-Help: Reply-To: The elegant MVC web framework Message-ID: X-BeenThere: catalyst@lists.rawmode.org Subject: [Catalyst] $c->detach and $c->action List-Id: The elegant MVC web framework Return-Path: List-Subscribe: , Date: Thu, 1 Feb 2007 02:05:10 +0000 Sender: catalyst-bounces@lists.rawmode.org Precedence: list List-Unsubscribe: From: Michael Reece is there something like detach that will also set the current 'action' to the one being detached to? my MyApp::C::Root->end does something like if (!$c->stash->{template}) { $c->stash->{template} = $c->action->namespace . '/' . $c->action- >name . '.html'; } and my wish is to be able to detach to another action in such a way that by the time 'end' is called, $c->action points to the new action, so that the calling/original action need not explicitly specify the template that would have been the default had the new action been the original action (what a horrid sentence -- my apologies!). i'm trying to find a way to do this without re-doing all the hard work that forward() does to determine the proper action to execute.. thanks, michael. Courriel-0.40/t/data/stress-test/mbox_mime_nested.txt0000644000175000017500000001212012653205401022606 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Sat Nov 19 09:37:32 2005 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by s69759.xenosight.com (8.12.11/8.12.11) with ESMTP id jAJFbWu0028232 for ; Sat, 19 Nov 2005 09:37:32 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EdUf9-0005hG-QS; Sat, 19 Nov 2005 16:29:59 +0100 Received: from xproxy.gmail.com ([66.249.82.193]) by rawmode.org with esmtp (Exim 4.52) id 1EdUf2-00032G-Rf for catalyst@lists.rawmode.org; Sat, 19 Nov 2005 16:29:56 +0100 Received: by xproxy.gmail.com with SMTP id t4so383035wxc for ; Sat, 19 Nov 2005 07:35:26 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:mime-version:content-type; b=H8AsLHc82HF4n/oqgQLtdLzrMYeqXL/CI9GMv2DCyNL09SsfadcbXT/P0YG/xC6ChTXuJ8HSdO/buPAcQbbKUV4ZAOknULKF7cmHr+PqcV0U35yQel85cfOFuqHuo0jZ4y+Z9p9Nba3/8gy7BDoleiWbU3J niV1yvhmOck6I3RA= Received: by 10.70.52.13 with SMTP id z13mr614083wxz; Sat, 19 Nov 2005 07:35:26 -0800 (PST) Received: by 10.70.44.10 with HTTP; Sat, 19 Nov 2005 07:35:26 -0800 (PST) Message-ID: Date: Sat, 19 Nov 2005 10:35:26 -0500 From: Drew Taylor To: The elegant MVC web framework , handel@lists.rawmode.org MIME-Version: 1.0 Subject: [Catalyst] Handle support for non-CDBI ORMs X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0167484140==" Mime-version: 1.0 Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Status: O X-Status: X-Keywords: X-UID: 13 --===============0167484140== Content-Type: multipart/alternative; boundary="----=_Part_11516_12935954.1132414526093" ------=_Part_11516_12935954.1132414526093 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline (Cross posting to both lists because Handel will be used with Catalyst) I'm about to start on a project using Handel, but I'd like to try out other ORM packages (namely DBIx::Class or Rose::DB::Object). How tightly integrated is CDBI into Handel? Could I use Sweet or perhaps DBIx::Class::Compat(sp?) which should use the same interface as CDBI? BTW, the Handel article on perl.com was excellent. :-) Drew -- ---------------------------------------------------------------- Drew Taylor * Web development & consulting Email: drew@drewtaylor.com * Site implementation & hosting Web : www.drewtaylor.com * perl/mod_perl/DBI/mysql/postgres ---------------------------------------------------------------- ------=_Part_11516_12935954.1132414526093 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline (Cross posting to both lists because Handel will be used with Catalyst)
=
I'm about to start on a project using Handel, but I'd like to try out o= ther ORM packages (namely DBIx::Class or Rose::DB::Object). How tightly int= egrated is CDBI into Handel? Could I use Sweet or perhaps DBIx::Class::Comp= at(sp?) which should use the same interface as CDBI?

BTW, the Handel article on perl.com= was excellent. :-)

Drew
--
-------------------= ---------------------------------------------
Drew Taylor  &n= bsp;            = ;  *  Web development & consulting
Email: drew@drewtaylor.com&= nbsp; *  Site implementation & hosting
Web &nbs= p;: www.drewtaylor.com  = ; *  perl/mod_perl/DBI/mysql/postgres
---------------------------------------------------------------- ------=_Part_11516_12935954.1132414526093-- --===============0167484140== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst --===============0167484140==--Courriel-0.40/t/data/stress-test/mbox_mime_applemail_1xb.txt0000644000175000017500000002131112653205401024044 0ustar autarchautarchFrom tomcat-user-return-85601-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Wed Dec 03 23:53:48 2003 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 16677 invoked from network); 3 Dec 2003 23:53:48 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 3 Dec 2003 23:53:48 -0000 Received: (qmail 89276 invoked by uid 500); 3 Dec 2003 23:52:57 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 89252 invoked by uid 500); 3 Dec 2003 23:52:57 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 89239 invoked from network); 3 Dec 2003 23:52:56 -0000 Received: from unknown (HELO sccrmhc11.comcast.net) (204.127.202.55) by daedalus.apache.org with SMTP; 3 Dec 2003 23:52:56 -0000 Received: from [192.168.0.198] (c-67-162-133-54.client.comcast.net[67.162.133.54]) by comcast.net (sccrmhc11) with SMTP id <2003120323530201100i4rhke>; Wed, 3 Dec 2003 23:53:03 +0000 In-Reply-To: <3FCE6FDC.4040304@cyberspaceroad.com> References: <3FCE6FDC.4040304@cybers paceroad.com> Mime-Version: 1.0 (Apple Message framework v606) Content-Type: multipart/signed; micalg=sha1; boundary=Apple-Mail-2--153422392; protocol="application/pkcs7-signature" Message-Id: Cc: Tomcat Users List From: Matt Raible Subject: Re: servlet sendRedirect() to j_security_check problem (remember me) Date: Wed, 3 Dec 2003 16:52:54 -0700 To: Adam Hardy X-Mailer: Apple Mail (2.606) X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N --Apple-Mail-2--153422392 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed It's standard container managed security stuff - I first invoke a protected URL - in index.jsp - I redirect to mainMenu.do - and *.do is protected. Based on security constraints in web.xml, I'm presented with a form-login-page "login.jsp" - rather than having action="j_security_check" in this form, I have action="/security/authorize" - which is mapped to my own LoginServlet. In the LoginServlet, I encrypt the password (optionally based on an init-parameter), set some cookies and do an HTTP Post to j_security_check. Works on Tomcat 4-5 and Resin 3.x. Matt On Dec 3, 2003, at 4:21 PM, Adam Hardy wrote: > Matt, > are you really managing to post a form to j_security_check without > invoking it first, or is that some sort of black magic you've cooked > up? > > Or have I just misunderstood what Chris said? > > Adam > > On 12/03/2003 09:24 PM Matt Raible wrote: >> Chris, >> I found your post at >> http://www.mail-archive.com/tomcat-user%40jakarta.apache.org/ >> msg111700.html and I'm cc'ing the list in case anyone else is >> interested in this info (I'm not subscribed). >> I've actually improved the "Remember Me" feature a fair amount since >> I posted to the Tomcat User list. The sendRedirect works, however, >> it (in some browsers) puts the URL (with password) into the address >> bar. This isn't a big deal IMO since it's the user that just logged >> in and they don't mind seeing their own passwords. However, the URL >> tends to show up in server log files which can be a security hole. >> Because of this, I changed to using an HTTP Post with Jakarta >> Common's HttpClient. I also moved my form-login-page and >> form-error-page into a "security" folder and then set my cookies for >> the /appname/security path rather than / - this makes it so the >> user/pass cookies are more secure and can only be retrieved when >> logging in, rather than for any URL in the site. >> That being said, I've updated one of my sample apps with these >> changes and you can download it if you'd like: >> http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse >> Here's my updated LoginServlet that does an Http Post instead of a >> Get: >> http://tinyurl.com/xl80 >> HTH, >> Matt >> On Dec 3, 2003, at 12:52 PM, Chris Ward wrote: >>> >>> Hi Matt, >>> >>> Sorry for sending unsolicited email but I've been looking at some >>> of your postings to Tomcat-User and wondered if I could ask a >>> couple of questions. I've tried posting to list but had no response >>> from anyone there. >>> >>> Specifically, it's regarding your "remember me" login stuff. If this >>> is a pain feel free to ignore this email. >>> >>> >>> Best regards >>> Chris >>> >>> p.s. My question the list was under the subject >>> "servlet sendRedirect() to j_security_check problem" > > > -- > struts 1.1 + tomcat 5.0.14 + java 1.4.2 > Linux 2.4.20 RH9 --Apple-Mail-2--153422392 Content-Transfer-Encoding: base64 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Disposition: attachment; filename=smime.p7s MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGIDCCAtkw ggJCoAMCAQICAwsccTANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0EwHhcNMDMxMTA5MTczNDEyWhcNMDQxMTA4MTczNDEyWjBIMR8wHQYDVQQD ExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMSUwIwYJKoZIhvcNAQkBFhZtYXR0QHJhaWJsZWRlc2ln bnMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAla58rYCRWEPkVegsRQWT44kB 5t4xQFt0YijF8TilOATYUF6IDuBFYvdR7JYYYqYu1V5lQaVtWSIRq76ZCyeuN3e2A/pC1gDNbgQa XSpMMdHBM0lBGYv4XHRj3HG5r9La2b1lVBjn46hxcVx3FLtqx0EY305gO/Mi5IbQPzJTaEaxZkeK aVa3lid+RoFR4wWFJFa/gk4IapgnnB8S3qSILiYzlatlnmINEePIMLB0plJqTQQkTZikp8ThR/rA N5vTyp+79AKaJaE60Qd+TyuvuxxVMqeFxvw2zgDMpVjtKXEgzttxFMhFyaZTEFV3YY1ZjAvSIOnz CtTbeJm2eib8nQIDAQABozMwMTAhBgNVHREEGjAYgRZtYXR0QHJhaWJsZWRlc2lnbnMuY29tMAwG A1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEEBQADgYEAeupTLdOtmAOhwqaDNPLbcwHV62WnTejaox0p qoYnM5A+LTMKVUPmwetnYeeJX30cRvRbzgtoecTHotCnogdv2LGja+X+ydqb6fZW4XKu8gOFJMM+ ikS+NwaWQR7hV0yIlfFhy/IjKLdXRi0rMIHwFfbRnwO95wz2BWGYs5saf+4wggM/MIICqKADAgEC AgENMA0GCSqGSIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBl MRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQL Ex9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29u YWwgRnJlZW1haWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5j b20wHhcNMDMwNzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTElMCMGA1UE ChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFs IEZyZWVtYWlsIElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSmPFVzVftO ucqZWh5owHUEcJ3f6f+jHuy9zfVb8hp2vX8MOmHyv1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9x VsuvPAsH5/EfkTYkKhPPK9Xzgnc9A74r/rsYPge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAe ZBlyYLf7AgMBAAGjgZQwgZEwEgYDVR0TAQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJo dHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8E BAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3 DQEBBQUAA4GBAEiM0VCD6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9 reFhYsPZOhl+hLGZGwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAa WzVNd+NWIXiC3CEZNd4ksdMdRv9dX2VPMYIC5zCCAuMCAQEwaTBiMQswCQYDVQQGEwJaQTElMCMG A1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNv bmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECAwsccTAJBgUrDgMCGgUAoIIBUzAYBgkqhkiG9w0BCQMx CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMzEyMDMyMzUyNTRaMCMGCSqGSIb3DQEJBDEW BBRr1qrnVkmh2gCGkLjUdJQtQRaXZjB4BgkrBgEEAYI3EAQxazBpMGIxCzAJBgNVBAYTAlpBMSUw IwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVy c29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIDCxxxMHoGCyqGSIb3DQEJEAILMWugaTBiMQswCQYD VQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMj VGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0ECAwsccTANBgkqhkiG9w0BAQEFAASC AQAPbA2xWIwO9AqEtzskJ2XS8Z2By4EHec1ct8JVB4FkbZPWqMxq1KMWpNGjCUHwegxn+PFKeLQr 10x8WuuFNRybi401Y4LZYHPj1/Keulmjj5xgsAqSNsggV66d/+Zqe63wmUSss4Sj/AvOUGhSSPiA dFOa5TQreNon5mmb1yyFxOeoEX1tM+DD7iK1DoBAeesNkQKp/7lXpctPraastXPXyw0Z3wR0/hIp m2SZ0TMTu9GEPNdo/tiCgN4sNsTQroUeZkJrvt4hm4dX2iVqB4jlhWjFhKG+aQAEOM+H9Q3v2F5R BmbLXHbXHCbbYbr/kTH6IEGCgZWZxi7RSeJUa+HmAAAAAAAA --Apple-Mail-2--153422392--Courriel-0.40/t/data/stress-test/mbox_piper2mbox_attach1.txt0000644000175000017500000001171312653205401024020 0ustar autarchautarchFrom victori@lamer0.com Thu Feb 1 00:27:51 2007 Date: Thu, 1 Feb 2007 00:28:00 +0000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="1180908984.D1c61bD.9667"; charset="us-ascii" List-Archive: List-Post: In-Reply-To: <9e0a28690701311127w4131c2cn546682e3cd487fc3@mail.gmail.com> Errors-To: catalyst-bounces@lists.rawmode.org List-Help: References: <200612271208.42815.mark@itsolve.co.uk> <45926EB1.2040007@cpan.org> <9e0a28690701310723p2db99e58tab1f82e1824a0abd@mail.gmail.com> <6053700D-69B0-40F2-BED8-3587EB4A9ACC@trout.me.uk> <9e0a28690701311127w4131c2cn546682e3cd487fc3@mail.gmail.com> Reply-To: The elegant MVC web framework Message-ID: <75AB7D73-107D-4CE2-A286-7BB8E3C55ACB@lamer0.com> X-BeenThere: catalyst@lists.rawmode.org Subject: [Catalyst] FormBuilder + C::C::Formbuilder memory leak fixes List-Id: The elegant MVC web framework Return-Path: List-Subscribe: , Sender: catalyst-bounces@lists.rawmode.org Precedence: list List-Unsubscribe: From: Victor Igumnov --1180908984.D1c61bD.9667 Date: Sun, 3 Jun 2007 15:16:24 -0700 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline To see the impact of the memory leak. Run broken.pl first which will run formbuilder against your installed version. It will create a new formbuilder instance over and over, watch top -o size as it grows to 100-200 megs in just a few seconds. Now run fixed.pl - works great don't it? No memory leaks what so ever. I have also included a CatTest catalyst project which uses C::C::FormBuilder. With everything patched up the process stays at ~14 megs while being hammered by ab -n 900 -c 100 http://localhost: 3000/. So the question is am I the only one using formbuilder? This leak was very obvious. All tests pass for both projects. http://temp.fabulously40.com/~victori/CGI-FormBuilder-3.05-memfix.tbz -victor --1180908984.D1c61bD.9667 Date: Sun, 3 Jun 2007 15:16:24 -0700 MIME-Version: 1.0 Content-Type: text/html; name="attachment-0001.htm"; charset="us-ascii" Content-Disposition: attachment; filename="attachment-0001.htm" <HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "> ;<DIV>To see the impact of the memory leak.</DIV><DIV><BR class="khtml-block-placeholder"> ;</DIV><DIV>Run broken.pl first which will run formbuilder against your installed version.</DIV> ;<DIV>It will create a new formbuilder instance over and over, watch top -o size as&nbs p;it grows to 100-200 megs in just a few seconds.</DIV><DIV><BR class="khtml-block-placeholde r"></DIV><DIV>Now run fixed.pl - works great don't it? No memory leaks what so&nbs p;ever.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I have also included a CatTe st catalyst project which uses C::C::FormBuilder. With everything patched up the process stays at& nbsp;~14 megs while being hammered by ab -n 900 -c 100 <A href="http://localhost:3000"> http://localhost:3000</A>/. </DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>So the ques tion is am I the only one using formbuilder? This leak was very obvious.</DIV><DIV>&l t;BR class="khtml-block-placeholder"></DIV><DIV>All tests pass for both projects.</DIV><DIV>< BR class="khtml-block-placeholder"></DIV><DIV><A href="http://temp.fabulously40.com/~victori/">http://temp.fabul ously40.com/~victori/</A><FONT class="Apple-style-span" face="Lucida Grande">CGI-FormBuilder-3.05-memfix.tbz</FON T></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>-victor</DIV><BR></BODY></HTML> --1180908984.D1c61bD.9667-- Courriel-0.40/t/data/stress-test/mbox_spam.txt0000644000175000017500000000754312653205401021272 0ustar autarchautarchFrom sjoeboo@sjoeboo.com Mon Mar 14 13:26:03 2005 Received: from h000f66a433cb.ne.client2.attbi.com ([24.131.189.6] helo=skywalker.sjoeboo.com) by rince.africaninspace.com with esmtp (Exim 4.34) id 1DAvCV-0007YK-OO for ubuntu-users@lists.ubuntu.com; Mon, 14 Mar 2005 13:26:03 -0600 Received: (qmail 20416 invoked by uid 1010); 14 Mar 2005 14:13:00 -0500 Received: from 127.0.0.1 by skywalker (envelope-from , uid 1008) with qmail-scanner-1.24-st-qms (clamdscan: 0.80/533. spamassassin: 3.0.1. perlscan: 1.24-st-qms. Clear:RC:1(127.0.0.1):. Processed in 0.110415 secs); 14 Mar 2005 19:13:00 -0000 X-Antivirus-sjoeboo.com-Mail-From: sjoeboo@sjoeboo.com via skywalker X-Antivirus-sjoeboo.com: 1.24-st-qms (Clear:RC:1(127.0.0.1):. Processed in 0.110415 secs Process 20409) Received: from localhost (sjoeboo@sjoeboo.com@127.0.0.1) by skywalker.sjoeboo.com with AES256-SHA encrypted SMTP; 14 Mar 2005 14:12:59 -0500 Date: Mon, 14 Mar 2005 14:12:59 -0500 To: Ubuntu Help and User Discussions J-From: Message-ID: <20050314191259.GA20344@skywalker.sjoeboo.com> J-Message-ID: <199909112127.RAA14812@hub.org> References: <4235E1AA.2060906@themauvezone.fsnet.co.uk> Mime-Version: 1.0 J-JNN-Skip: 1 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="qMm9M+Fa2AknHoGS" Content-Disposition: inline In-Reply-To: <4235E1AA.2060906@themauvezone.fsnet.co.uk> User-Agent: Mutt/1.5.6+20040907i #J-Subject: Re: dependency fun #Subject: returned mail: user unknown def #JT-Subject: Eliminate Travel Expenses! X-BeenThere: ubuntu-users@lists.ubuntu.com X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ubuntu Help and User Discussions List-Id: Ubuntu Help and User Discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Mar 2005 19:26:04 -0000 --qMm9M+Fa2AknHoGS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable try apt-get install libstdc++6 libstdc++6-dev is in universe i do belive. those should resolve those dependancies for you.=20 another hint is to try doing searchs via teh command line. synaptic by default searches package names, where as an 'apt-cache search' in teh command line does much much more. hope that helped On Mon, Mar 14, 2005 at 07:10:34PM +0000, baza wrote: > I'm trying to get the Targetware flight sim working, but am having=20 > dependency fun and keep getting this error >=20 >=20 >=20 >=20 > baza@barbelith:~/Desktop/targetware$ ./targetware > ./targetware: error while loading shared libraries:=20 > libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file=20 > or directory > baza@barbelith:~/Desktop/targetware$ >=20 > I can't find the above libs in synaptic, any help?? >=20 > Baza >=20 >=20 > --=20 > ubuntu-users mailing list > ubuntu-users@lists.ubuntu.com > http://lists.ubuntu.com/mailman/listinfo/ubuntu-users --=20 Mat Nicholson --qMm9M+Fa2AknHoGS Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) iD8DBQFCNeI7pXZHtNxjH8MRAvs5AKCNoss3KWrtqFSFmfH/6WDR667SBgCfQUy6 kwkc2Yru32mcyHIPYL9knj0= =lozH -----END PGP SIGNATURE----- --qMm9M+Fa2AknHoGS-- Courriel-0.40/t/data/stress-test/mbox_tmp_list_post.txt0000644000175000017500000001011512653205401023217 0ustar autarchautarchFrom catalyst-bounces@lists.rawmode.org Fri Jan 6 10:33:24 2006 Return-Path: Received: from rawmode.org (rawmode.org [213.239.209.201]) by smtp.mazrmail.com (8.12.11/8.12.11) with ESMTP id k06GXNVv008488 for ; Fri, 6 Jan 2006 10:33:24 -0600 Received: from localhost ([127.0.0.1]) by rawmode.org with esmtp (Exim 4.52) id 1EuuMf-00052H-Hc; Fri, 06 Jan 2006 17:22:53 +0100 Received: from nproxy.gmail.com ([64.233.182.201]) by rawmode.org with esmtp (Exim 4.52) id 1EuuMc-0002wF-B0 for catalyst@lists.rawmode.org; Fri, 06 Jan 2006 17:22:50 +0100 Received: by nproxy.gmail.com with SMTP id o25so1276103nfa for ; Fri, 06 Jan 2006 08:29:29 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=IGpoedvVJI6lY4VdTP4CaVuTqRb44RVmYaKwSCQDYjhMsTm3ns5QZy9vH8ID9SSHjoSdJU55+O5Vhlgco6QwvZtoxie+tNJUBsJaGfsHO6wOs3ShuOnudKD7L6AiEdBa07/2p+2d/Y9F+qQaVHJ3KvvCYhj+QJbomKRlWTZFLn8= Received: by 10.48.30.17 with SMTP id d17mr765926nfd; Fri, 06 Jan 2006 08:29:27 -0800 (PST) Received: by 10.48.42.12 with HTTP; Fri, 6 Jan 2006 08:29:27 -0800 (PST) Message-ID: <3390cd220601060829y34db5d25t@mail.gmail.com> Date: Fri, 6 Jan 2006 17:29:27 +0100 From: Bernard FRIT To: The elegant MVC web framework Subject: Re: [Catalyst] View::TT FILTERS and utf-8 In-Reply-To: <4f352aae0601060732r6e61bab9x@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Disposition: inline References: <25861274-FBBF-4223-A4EB-DE59EB39579B@simplicidade.org> <11A4821D-78DB-11DA-BF33-000A95719C94@sedition.com> <3390cd220601060640q1c24d653u@mail.gmail.com> <4f352aae0601060732r6e61bab9x@mail.gmail.com> X-BeenThere: catalyst@lists.rawmode.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The elegant MVC web framework List-Id: The elegant MVC web framework List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: catalyst-bounces@lists.rawmode.org Errors-To: catalyst-bounces@lists.rawmode.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by smtp.mazrmail.com id k06GXNVv008488 2006/1/6, Carl Franks : > > The problem occurs only when using mod_perl. > > I suggest you view the pages using a tool which lets you view the full > response header, as well as the body - it sounds like apache might be > adding an encoding header that is messing things up. > > Compare the response header between responses from mod_perl and the > standalone server (or some other webserver). mod-perl header : Date: Fri, 06 Jan 2006 16:23:25 GMT Server: Apache/1.3.33 (Unix) mod_perl/1.29 mod_gzip/1.3.19.1a PHP/4.3.10 mod_ssl/2.8.22 OpenSSL/0.9.6m X-Catalyst: 5.61 Set-Cookie: session=bdd8c9d3a5a5d333d072bfeff7f27af874ff101e8d7529d3804c92c55475300e; path=/; expires=Fri, 06-Jan-2006 17:23:25 GMT Content-Length: 25944 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: text/html; 200 OK builtin server : Connection: close Date: Fri, 06 Jan 2006 16:22:59 GMT Content-Length: 27091 Content-Type: text/html; path=/; expires=Fri, 06-Jan-2006 17:22:59 GMT Status: 200 X-Catalyst: 5.61 200 OK I can't figure out any significant difference. -- Bernard FRIT _______________________________________________ Catalyst mailing list Catalyst@lists.rawmode.org http://lists.rawmode.org/mailman/listinfo/catalyst Courriel-0.40/t/data/stress-test/mbox_msgid_missing_netscape-3-5.txt0000644000175000017500000000440112653205401025340 0ustar autarchautarchFrom tomcat-user-return-88678-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Fri Jan 09 17:22:49 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 50120 invoked from network); 9 Jan 2004 17:22:49 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 9 Jan 2004 17:22:49 -0000 Received: (qmail 12163 invoked by uid 500); 9 Jan 2004 17:22:21 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 12144 invoked by uid 500); 9 Jan 2004 17:22:20 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 12110 invoked from network); 9 Jan 2004 17:22:19 -0000 Received: from unknown (HELO bow.intnet.mu) (202.123.2.7) by daedalus.apache.org with SMTP; 9 Jan 2004 17:22:19 -0000 Received: from webmail ([202.123.2.124]) by bow.intnet.mu (Netscape Messaging Server 4.15) with SMTP id HR8G8702.VR7 for ; Fri, 9 Jan 2004 21:21:43 +0400 From: annimandary@bow.intnet.mu To: "Tomcat Users List" Subject: Re: CGI servlet in tomcat X-Mailer: Netscape Messenger Express 3.5.2 [Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)] X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Tim, Thanks. I followed your instructions but I get the error "CGI script not found or not specified." Any idea on what I should do? --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_msgid_invalid_exchange-6-5.txt0000644000175000017500000002227312653205401025307 0ustar autarchautarchFrom users-return-148577-apmail-tomcat-users-archive=tomcat.apache.org@tomcat.apache.org Mon Jul 24 14:08:20 2006 Return-Path: Delivered-To: apmail-tomcat-users-archive@www.apache.org Received: (qmail 55298 invoked from network); 24 Jul 2006 14:08:19 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 24 Jul 2006 14:08:19 -0000 Received: (qmail 74251 invoked by uid 500); 24 Jul 2006 14:08:05 -0000 Delivered-To: apmail-tomcat-users-archive@tomcat.apache.org Received: (qmail 74227 invoked by uid 500); 24 Jul 2006 14:08:05 -0000 Mailing-List: contact users-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Users List" Delivered-To: mailing list users@tomcat.apache.org Received: (qmail 74216 invoked by uid 99); 24 Jul 2006 14:08:05 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 24 Jul 2006 07:08:05 -0700 X-ASF-Spam-Status: No, hits=2.9 required=10.0 tests=FORGED_MUA_IMS,INVALID_MSGID X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [155.91.38.1] (HELO uscttw1110.merck.com) (155.91.38.1) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 24 Jul 2006 07:08:04 -0700 Received: from 54.62.195.237 by uscttw1110.merck.com with ESMTP (SMTP Relay); Mon, 24 Jul 2006 10:07:29 -0400 X-Server-Uuid: 0D0C80A0-46FA-490C-AFC2-7618DC791584 Received: from 54.62.195.245 by uscttw1101.merck.com with ESMTP ( Tumbleweed Email Firewall SMTP Relay (Email Firewall v6.1.1)); Mon, 24 Jul 2006 10:07:18 -0400 X-Server-Uuid: 96433E61-BC67-4637-9B91-0C482EF10D46 Received: by usrygw30.merck.com with Internet Mail Service (5.5.2658.27) id <3RS9BDC8>; Mon, 24 Jul 2006 10:07:17 -0400 Message-ID: 38687D1995FB2249B9DC84E2AE63285B From: "Cosio, Raul" To: "Tomcat Users List" Subject: RE: out of memory error Date: Mon, 24 Jul 2006 10:07:05 -0400 MS-TNEF-CorrelatoXr: <922874C78B5E2D4FA51B9A97A1A5637A2DF2C8@mxmxmx1100.merck.com> MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2658.27) content-class: urn:content-classes:message x-mimeole: Produced By Microsoft Exchange V6.5 x-originalarrivaltime: 24 Jul 2006 14:07:07.0945 (UTC) FILETIME=[72FF2990:01C6AF2A] X-WSS-ID: 68DA0B9F2588846378-02-01 X-WSS-ID: 68DA0B8726C10309059-05-01 Content-Type: text/plain Content-Transfer-Encoding: 8bit Content-Disposition: inline X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N This link may help... http://tomcat.apache.org/faq/memory.html -----Original Message----- From: Shinya Koizumi [mailto:skoizumi@basicengineering.ca] Sent: Jueves, 20 de Julio de 2006 07:10 p.m. To: Tomcat Users List Subject: Re: out of memory error One of solution for out of memory problem is to upgrade to Java 1.5 SK ----- Original Message ----- From: "MW Janssen" To: "'Tomcat Users List'" Sent: Wednesday, July 19, 2006 8:39 AM Subject: RE: out of memory error > i dont see a memory tab when i right click.. > > -----Oorspronkelijk bericht----- > Van: Propes, Barry L [mailto:barry.l.propes@citigroup.com] > Verzonden: woensdag 19 juli 2006 17:32 > Aan: Tomcat Users List > Onderwerp: RE: out of memory error > > possibly like I (incorrectly, because he was on UNIX) told a guy the other > day. > > Go to startup.bat, right click and change (under the Memory tab) properties > in the Initial Environment box from Auto to 4096 or higher. > > -----Original Message----- > From: MW Janssen [mailto:maarten@bedrijven.nl] > Sent: Wednesday, July 19, 2006 9:01 AM > To: 'Tomcat Users List' > Subject: RE: out of memory error > > > Guys, > > I am on a Windows NT platform so not Unix..solution? > > Maarten > > -----Oorspronkelijk bericht----- > Van: Leon Rosenberg [mailto:rosenberg.leon@googlemail.com] > Verzonden: woensdag 19 juli 2006 15:57 > Aan: Tomcat Users List > Onderwerp: Re: out of memory error > > On 7/19/06, Jon Wingfield wrote: > > The process running tomcat can't (read isn't allowed by OS) to create > > any more threads: > > > > "java.lang.OutOfMemoryError: unable to create new native thread" > > > > If you are on unix you can up the number by tinkering with the ulimit > > command. > > but if you are on 2.4.x kernel, you're lost, since it can't create many > threads (max 500-600). > > leon > > > > > HTH, > > > > Jon > > > > MW Janssen wrote: > > > Hi, > > > > > > Can anyone explain and suggest a solution on error below: > > > > > > Jul 19, 2006 12:49:18 PM > > > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run > > > SEVERE: Caught exception (java.lang.OutOfMemoryError: unable to > > > create new native thread) executing HYPERLINK > > > "mailto:org.apache.tomcat.util.net.LeaderFollowerWorkerThread@b4a7c3 > > > "org.apa che.tomcat.util.net.LeaderFollowerWorkerThread@b4a7c3, > > > terminating thread Jul 19, 2006 1:25:30 PM > > > org.apache.coyote.http11.Http11Protocol pause > > > INFO: Pausing Coyote HTTP/1.1 on http-80 Jul 19, 2006 1:25:31 PM > > > org.apache.catalina.core.StandardService stop > > > INFO: Stopping service Tomcat-Standalone Jul 19, 2006 1:25:32 PM > > > org.apache.catalina.core.ApplicationContext log > > > INFO: action: Finalizing this controller servlet Jul 19, 2006 > > > 1:25:32 PM org.apache.catalina.core.StandardWrapper unload > > > INFO: Waiting for 3 instance(s) to be deallocated Jul 19, 2006 > > > 1:25:33 PM org.apache.catalina.core.StandardWrapper unload > > > INFO: Waiting for 3 instance(s) to be deallocated Jul 19, 2006 > > > 1:25:34 PM org.apache.catalina.core.StandardWrapper unload > > > INFO: Waiting for 3 instance(s) to be deallocated Jul 19, 2006 > > > 1:25:34 PM org.apache.catalina.core.ApplicationContext log > > > INFO: action: Finalizing this controller servlet Jul 19, 2006 > > > 1:25:34 PM org.apache.coyote.http11.Http11Protocol destroy > > > INFO: Stopping Coyote HTTP/1.1 on http-80 > > > > > > Regards, > > > > > > Maarten Janssen > > > > > > > > > > > > > > --------------------------------------------------------------------- > > To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, > > e-mail: users-unsubscribe@tomcat.apache.org > > For additional commands, e-mail: users-help@tomcat.apache.org > > > > > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, > e-mail: users-unsubscribe@tomcat.apache.org > For additional commands, e-mail: users-help@tomcat.apache.org > > -- > No virus found in this incoming message. > Checked by AVG Free Edition. > Version: 7.1.394 / Virus Database: 268.10.1/391 - Release Date: 18-7-2006 > > > -- > No virus found in this outgoing message. > Checked by AVG Free Edition. > Version: 7.1.394 / Virus Database: 268.10.1/391 - Release Date: 18-7-2006 > > > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > For additional commands, e-mail: users-help@tomcat.apache.org > > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > For additional commands, e-mail: users-help@tomcat.apache.org > > -- > No virus found in this incoming message. > Checked by AVG Free Edition. > Version: 7.1.394 / Virus Database: 268.10.1/391 - Release Date: 18-7-2006 > > > -- > No virus found in this outgoing message. > Checked by AVG Free Edition. > Version: 7.1.394 / Virus Database: 268.10.1/391 - Release Date: 18-7-2006 > > > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org > For additional commands, e-mail: users-help@tomcat.apache.org > > > ------------------------------------------------------------------------------ Notice: This e-mail message, together with any attachments, contains information of Merck & Co., Inc. (One Merck Drive, Whitehouse Station, New Jersey, USA 08889), and/or its affiliates (which may be known outside the United States as Merck Frosst, Merck Sharp & Dohme or MSD and in Japan, as Banyu) that may be confidential, p roprietary copyrighted and/or legally privileged. It is intended solely for the use of the individual or entity named on this message. If you are not the intended recipient, and have received this message in error, please notify us immediately by reply e-mail and then delete it from your system. ------------------------------------------------------------------------------ --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org For additional commands, e-mail: users-help@tomcat.apache.org Courriel-0.40/t/data/stress-test/mbox_msgid_missing_outlook2003-11.txt0000644000175000017500000000721112653205401025456 0ustar autarchautarchFrom tomcat-user-return-87994-apmail-jakarta-tomcat-user-archive=jakarta.apache.org@jakarta.apache.org Fri Jan 02 20:22:23 2004 Return-Path: Delivered-To: apmail-jakarta-tomcat-user-archive@www.apache.org Received: (qmail 81482 invoked from network); 2 Jan 2004 20:22:23 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 2 Jan 2004 20:22:23 -0000 Received: (qmail 94497 invoked by uid 500); 2 Jan 2004 20:21:53 -0000 Delivered-To: apmail-jakarta-tomcat-user-archive@jakarta.apache.org Received: (qmail 94477 invoked by uid 500); 2 Jan 2004 20:21:53 -0000 Mailing-List: contact tomcat-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Users List" Reply-To: "Tomcat Users List" Delivered-To: mailing list tomcat-user@jakarta.apache.org Received: (qmail 94464 invoked from network); 2 Jan 2004 20:21:53 -0000 Received: from unknown (HELO mx.sh-solutions.de) (80.190.247.134) by daedalus.apache.org with SMTP; 2 Jan 2004 20:21:53 -0000 Received: from gb143.stw.stud.uni-saarland.de ([134.96.82.158] helo=shs1) by mx.sh-solutions.de with asmtp (Exim 4.30) id 1AcW4Q-0004dw-E3 for tomcat-user@jakarta.apache.org; Fri, 02 Jan 2004 21:38:58 +0100 From: "SH Solutions" To: "'Tomcat Users List'" Subject: AW: what *really* happens when you reload or stop/start a webapp? Date: Fri, 2 Jan 2004 21:24:40 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook, Build 11.0.5510 In-Reply-To: X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0 Thread-Index: AcPRa8tb4+5NqzIsTQSYL27a25+7KQAAYdAg X-Authenticated-Sender:*@sh-solutions.de X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Hi > No, this is just an example. What I'd like to know is if stop/start or reload has the same effect on a webapp as actually shutting down tomcat and starting it back up. When you stop an webapp, its classloader is discarded. Therefor every information held by you classes is discarded. Whey you restart an webapp, a new classloader is instantiated for that webapp and every class is loaded from scratch. Static vars and such are all-new. Problems occur, if you pass references of you classes to elements outside you classloader (in example by using shared libraries). In that case, the classes referenced from outside your webapp cannot be discarded due to javas typesafe pointers. This might result in the existence of the same static variable in two classloaders. Remember that these are two distinct variables. Even worse, if you manage to get the reference in the old classloader from the shared library it won't be even the same type as it was before since Classes loaded from different classloaders are type-different. Hence avoid to even try to find a way to make information persistent to webapp reloads without writing them somewhere outside the VM. HTH Steffen --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-user-help@jakarta.apache.org Courriel-0.40/t/data/stress-test/mbox_mime_video_verizon_1.txt0000644000175000017500000032036612653205401024444 0ustar autarchautarchDelivered-To: johncwang@gmail.com Received: by 10.142.194.20 with SMTP id r20cs40924wff; Sat, 2 Feb 2008 22:15:11 -0800 (PST) Received: by 10.70.80.6 with SMTP id d6mr3592747wxb.15.1202019310182; Sat, 02 Feb 2008 22:15:10 -0800 (PST) Return-Path: <6508338240@vzwpix.com> Received: from njbrmotmta7.vzwpix.com (njbrmotmta7.vzwpix.com [66.174.95.107]) by mx.google.com with ESMTP id h19si8799219wxd.28.2008.02.02.22.15.09; Sat, 02 Feb 2008 22:15:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of 6508338240@vzwpix.com designates 66.174.95.107 as permitted sender) client-ip=66.174.95.107; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of 6508338240@vzwpix.com designates 66.174.95.107 as permitted sender) smtp.mail=6508338240@vzwpix.com Received: from m01.vzwpix.com (93.sub-66-174-95.myvzw.com [66.174.95.93]) by njbrmotmta7.vzwpix.com (8.13.8+Sun/8.13.1) with SMTP id m136F8pt011034 for ; Sun, 3 Feb 2008 01:15:09 -0500 (EST) X-Priority: 3 Importance: Normal From: 6508338240@vzwpix.com To: Johncwang@gmail.com Subject: From robert Message-ID: <212068779238935839@-212068779238935840> Date: Sun, 3 Feb 2008 01:13:58 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; type="application/smil"; boundary="__CONTENT_64564_PART_BOUNDARY__33243242__" --__CONTENT_64564_PART_BOUNDARY__33243242__ Content-Type: text/plain; charset=utf-8; name="text_01_000.txt" Content-Location: text_01_000.txt Test vid This message was sent using PIX-FLIX Messaging service from Verizon Wireless! To learn how you can snap pictures with your wireless phone visit www.verizonwireless.com/getitnow/getpix. To learn how you can record videos with your wireless phone visit www.verizonwireless.com/getitnow/getflix. To play video messages sent to email, QuickTime® 6.5 or higher is required. Visit www.apple.com/quicktime/download to download the free player or upgrade your existing QuickTime® Player. Note: During the download process when asked to choose an installation type (Minimum, Recommended or Custom), select Minimum for faster download. --__CONTENT_64564_PART_BOUNDARY__33243242__ Content-Type: video/3gpp2; name="0202082212.3g2" Content-Location: 0202082212.3g2 Content-Transfer-Encoding: base64 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 --__CONTENT_64564_PART_BOUNDARY__33243242__-- Courriel-0.40/t/ContentType.t0000644000175000017500000000175712653205401015775 0ustar autarchautarchuse strict; use warnings; use Test::More 0.88; use Courriel::Header::ContentType; { my $ct = Courriel::Header::ContentType->new_from_value( value => 'text/plain' ); is( $ct->value, 'text/plain', 'got expected value' ); is( $ct->mime_type, 'text/plain', 'got expected mime_type' ); } { my $ct = Courriel::Header::ContentType->new_from_value( name => 'content-type', value => 'text/plain', ); is( $ct->name, 'content-type', 'name from parameters is used' ); is( $ct->mime_type, 'text/plain', 'got expected mime_type' ); } { my $ct = Courriel::Header::ContentType->new_from_value( name => 'content-type', value => 'text/plain; charset=ISO-8859-2', ); is( $ct->attribute_value('charset'), 'ISO-8859-2', 'got charset attribute value' ); is( $ct->attribute_value('nonexistent'), undef, 'got nonexistent attribute value as undef' ); } done_testing(); Courriel-0.40/eg/0000775000175000017500000000000012653205401013454 5ustar autarchautarchCourriel-0.40/eg/sendgrid0000644000175000017500000000531012653205401015173 0ustar autarchautarch#!/usr/bin/env perl use v5.10; use strict; use warnings; use Courriel::Builder; use Email::Sender::Simple qw( sendmail ); use Email::Sender::Transport::SMTP; my $from = 'you@yourdomain.com'; my $to = 'person@youaremailing.com'; my $subject = 'Example Perl Email'; # We will create an email with both a plain text and HTML body. If the # recipient has an HTML-capable email reader, they'll see that version. my $plain = <<'EOF'; Hi, You How are you? I'm doing *great*! EOF my $html = <<'EOF';

Hi, You,

How are you? I'm doing great!

EOF my $email = build_email( from($from), to($to), subject($subject), plain_body($plain), html_body($html), ); # Sendgrid login credentials my $username = 'yourlogin@sendgrid.net'; my $password = "yourpassword"; my $transport = Email::Sender::Transport::SMTP->new( host => 'smtp.sendgrid.net', port => 587, sasl_username => $username, sasl_password => $password, helo => 'yourdomain.com', ); sendmail( $email, { transport => $transport } ); __END__ =head1 INSTALLING MODULES The Courriel and Email::Sender libraries can be installed from CPAN using any cpan client. For example, using cpanminus (https://metacpan.org/module/App::cpanminus) you would run the following shell command: cpanm Courriel Email::Sender =head1 SMTP VERSUS A LOCAL MAIL SERVER If you really want to ensure that emails get delivered, you need to handle the (rare) case where Sendgrid is unavailable and queue the email for retrying. We could try to implement that in this code, but that would get complicated fast, and soon we'd have reimplemented an entire mail server. A better solution is to configure a local mail server running locally to deliver email using Sendgrid. See http://sendgrid.com/docs/Integrate/Mail_Servers/index.html for more details on how to do this. The mail server will queue the email if Sendgrid is unavailable and try to send it again later. If you're using a local mail server, you don't need to use Email::Sender::Transport::SMTP at all. You can just use the C subroutine in its default mode: sendmail($email); This looks for a sendmail binary program in the path and invokes it to send the email. On Unix systems, this binary should always do the right thing if you've installed a local mail server. =head1 AUTHOR David Rolsky =head1 LICENSE To the extent possible under law, David Rolsky has waived all copyright and related or neighboring rights to this example. This work is published from: United States. See http://creativecommons.org/publicdomain/zero/1.0/ for details. Courriel-0.40/Makefile.PL0000644000175000017500000000626112653205401015036 0ustar autarchautarch# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.043. use strict; use warnings; use 5.010000; use ExtUtils::MakeMaker; my %WriteMakefileArgs = ( "ABSTRACT" => "High level email parsing and manipulation", "AUTHOR" => "Dave Rolsky ", "CONFIGURE_REQUIRES" => { "ExtUtils::MakeMaker" => 0 }, "DISTNAME" => "Courriel", "LICENSE" => "artistic_2", "MIN_PERL_VERSION" => "5.010000", "NAME" => "Courriel", "PREREQ_PM" => { "Carp" => 0, "DateTime" => 0, "DateTime::Format::Mail" => 0, "DateTime::Format::Natural" => 0, "Devel::PartialDump" => 0, "Email::Abstract::Plugin" => 0, "Email::Address" => 0, "Email::Address::List" => 0, "Email::MIME::Encodings" => 0, "Email::MessageID" => 0, "Encode" => 0, "Exporter" => 0, "File::Basename" => 0, "File::LibMagic" => 0, "File::Slurp::Tiny" => 0, "List::AllUtils" => 0, "List::MoreUtils" => "0.28", "MIME::Base64" => 0, "MIME::QuotedPrint" => 0, "Moose" => 0, "Moose::Role" => 0, "MooseX::Params::Validate" => "0.21", "MooseX::Role::Parameterized" => 0, "MooseX::StrictConstructor" => 0, "MooseX::Types" => 0, "MooseX::Types::Combine" => 0, "MooseX::Types::Common::String" => 0, "MooseX::Types::Moose" => 0, "Scalar::Util" => 0, "Sub::Exporter" => 0, "namespace::autoclean" => 0, "parent" => 0, "strict" => 0, "warnings" => 0 }, "TEST_REQUIRES" => { "ExtUtils::MakeMaker" => 0, "File::Spec" => 0, "Sys::Hostname" => 0, "Test::Differences" => 0, "Test::Fatal" => 0, "Test::More" => "0.96", "Test::Requires" => 0, "utf8" => 0 }, "VERSION" => "0.40", "test" => { "TESTS" => "t/*.t" } ); my %FallbackPrereqs = ( "Carp" => 0, "DateTime" => 0, "DateTime::Format::Mail" => 0, "DateTime::Format::Natural" => 0, "Devel::PartialDump" => 0, "Email::Abstract::Plugin" => 0, "Email::Address" => 0, "Email::Address::List" => 0, "Email::MIME::Encodings" => 0, "Email::MessageID" => 0, "Encode" => 0, "Exporter" => 0, "ExtUtils::MakeMaker" => 0, "File::Basename" => 0, "File::LibMagic" => 0, "File::Slurp::Tiny" => 0, "File::Spec" => 0, "List::AllUtils" => 0, "List::MoreUtils" => "0.28", "MIME::Base64" => 0, "MIME::QuotedPrint" => 0, "Moose" => 0, "Moose::Role" => 0, "MooseX::Params::Validate" => "0.21", "MooseX::Role::Parameterized" => 0, "MooseX::StrictConstructor" => 0, "MooseX::Types" => 0, "MooseX::Types::Combine" => 0, "MooseX::Types::Common::String" => 0, "MooseX::Types::Moose" => 0, "Scalar::Util" => 0, "Sub::Exporter" => 0, "Sys::Hostname" => 0, "Test::Differences" => 0, "Test::Fatal" => 0, "Test::More" => "0.96", "Test::Requires" => 0, "namespace::autoclean" => 0, "parent" => 0, "strict" => 0, "utf8" => 0, "warnings" => 0 ); unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) { delete $WriteMakefileArgs{TEST_REQUIRES}; delete $WriteMakefileArgs{BUILD_REQUIRES}; $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs; } delete $WriteMakefileArgs{CONFIGURE_REQUIRES} unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; WriteMakefile(%WriteMakefileArgs); Courriel-0.40/META.yml0000644000175000017500000004575512653205401014350 0ustar autarchautarch--- abstract: 'High level email parsing and manipulation' author: - 'Dave Rolsky ' build_requires: ExtUtils::MakeMaker: '0' File::Spec: '0' Sys::Hostname: '0' Test::Differences: '0' Test::Fatal: '0' Test::More: '0.96' Test::Requires: '0' utf8: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 0 generated_by: 'Dist::Zilla version 5.043, CPAN::Meta::Converter version 2.150005' license: artistic_2 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Courriel provides: Courriel: file: lib/Courriel.pm version: '0.40' Courriel::Builder: file: lib/Courriel/Builder.pm version: '0.40' Courriel::Header: file: lib/Courriel/Header.pm version: '0.40' Courriel::Header::ContentType: file: lib/Courriel/Header/ContentType.pm version: '0.40' Courriel::Header::Disposition: file: lib/Courriel/Header/Disposition.pm version: '0.40' Courriel::HeaderAttribute: file: lib/Courriel/HeaderAttribute.pm version: '0.40' Courriel::Headers: file: lib/Courriel/Headers.pm version: '0.40' Courriel::Helpers: file: lib/Courriel/Helpers.pm version: '0.40' Courriel::Part::Multipart: file: lib/Courriel/Part/Multipart.pm version: '0.40' Courriel::Part::Single: file: lib/Courriel/Part/Single.pm version: '0.40' Courriel::Role::HeaderWithAttributes: file: lib/Courriel/Role/HeaderWithAttributes.pm version: '0.40' Courriel::Role::Part: file: lib/Courriel/Role/Part.pm version: '0.40' Courriel::Role::Streams: file: lib/Courriel/Role/Streams.pm version: '0.40' Courriel::Types: file: lib/Courriel/Types.pm version: '0.40' Courriel::Types::Internal: file: lib/Courriel/Types/Internal.pm version: '0.40' Email::Abstract::Courriel: file: lib/Email/Abstract/Courriel.pm version: '0.40' requires: Carp: '0' DateTime: '0' DateTime::Format::Mail: '0' DateTime::Format::Natural: '0' Devel::PartialDump: '0' Email::Abstract::Plugin: '0' Email::Address: '0' Email::Address::List: '0' Email::MIME::Encodings: '0' Email::MessageID: '0' Encode: '0' Exporter: '0' File::Basename: '0' File::LibMagic: '0' File::Slurp::Tiny: '0' List::AllUtils: '0' List::MoreUtils: '0.28' MIME::Base64: '0' MIME::QuotedPrint: '0' Moose: '0' Moose::Role: '0' MooseX::Params::Validate: '0.21' MooseX::Role::Parameterized: '0' MooseX::StrictConstructor: '0' MooseX::Types: '0' MooseX::Types::Combine: '0' MooseX::Types::Common::String: '0' MooseX::Types::Moose: '0' Scalar::Util: '0' Sub::Exporter: '0' namespace::autoclean: '0' parent: '0' perl: v5.10.0 strict: '0' warnings: '0' resources: bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=Courriel homepage: http://metacpan.org/release/Courriel repository: git://github.com/autarch/Courriel.git version: '0.40' x_Dist_Zilla: perl: version: '5.022001' plugins: - class: Dist::Zilla::Plugin::MakeMaker config: Dist::Zilla::Role::TestRunner: default_jobs: 1 name: '@DROLSKY/MakeMaker' version: '5.043' - class: Dist::Zilla::Plugin::Authority name: '@DROLSKY/Authority' version: '1.009' - class: Dist::Zilla::Plugin::AutoPrereqs name: '@DROLSKY/AutoPrereqs' version: '5.043' - class: Dist::Zilla::Plugin::CopyFilesFromBuild name: '@DROLSKY/CopyFilesFromBuild' version: '0.151680' - class: Dist::Zilla::Plugin::Git::GatherDir config: Dist::Zilla::Plugin::GatherDir: exclude_filename: - Build.PL - LICENSE - Makefile.PL - README.md - cpanfile exclude_match: [] follow_symlinks: 0 include_dotfiles: 0 prefix: '' prune_directory: [] root: . Dist::Zilla::Plugin::Git::GatherDir: include_untracked: 0 name: '@DROLSKY/Git::GatherDir' version: '2.036' - class: Dist::Zilla::Plugin::GitHub::Meta name: '@DROLSKY/GitHub::Meta' version: '0.42' - class: Dist::Zilla::Plugin::GitHub::Update config: Dist::Zilla::Plugin::GitHub::Update: metacpan: 1 name: '@DROLSKY/GitHub::Update' version: '0.42' - class: Dist::Zilla::Plugin::MetaResources name: '@DROLSKY/MetaResources' version: '5.043' - class: Dist::Zilla::Plugin::MetaProvides::Package config: Dist::Zilla::Plugin::MetaProvides::Package: finder_objects: - class: Dist::Zilla::Plugin::FinderCode name: '@DROLSKY/MetaProvides::Package/AUTOVIV/:InstallModulesPM' version: '5.043' Dist::Zilla::Role::MetaProvider::Provider: inherit_missing: '1' inherit_version: '1' meta_noindex: '1' name: '@DROLSKY/MetaProvides::Package' version: '2.003001' - class: Dist::Zilla::Plugin::NextRelease name: '@DROLSKY/NextRelease' version: '5.043' - class: Dist::Zilla::Plugin::Prereqs config: Dist::Zilla::Plugin::Prereqs: phase: test type: requires name: '@DROLSKY/Test::More with subtest' version: '5.043' - class: Dist::Zilla::Plugin::Prereqs config: Dist::Zilla::Plugin::Prereqs: phase: develop type: requires name: '@DROLSKY/Modules for use with tidyall' version: '5.043' - class: Dist::Zilla::Plugin::PromptIfStale config: Dist::Zilla::Plugin::PromptIfStale: check_all_plugins: 1 check_all_prereqs: 1 modules: [] phase: release skip: - Dist::Zilla::Plugin::DROLSKY::Contributors - Dist::Zilla::Plugin::DROLSKY::License - Dist::Zilla::Plugin::DROLSKY::TidyAll - Dist::Zilla::Plugin::DROLSKY::VersionProvider name: '@DROLSKY/PromptIfStale' version: '0.047' - class: Dist::Zilla::Plugin::ReadmeAnyFromPod config: Dist::Zilla::Role::FileWatcher: version: '0.006' name: '@DROLSKY/README.md in build' version: '0.150250' - class: Dist::Zilla::Plugin::ReadmeAnyFromPod config: Dist::Zilla::Role::FileWatcher: version: '0.006' name: '@DROLSKY/README.md in root' version: '0.150250' - class: Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable name: '@DROLSKY/Test::Pod::Coverage::Configurable' version: '0.05' - class: Dist::Zilla::Plugin::Test::PodSpelling config: Dist::Zilla::Plugin::Test::PodSpelling: directories: [] spell_cmd: '' stopwords: - API - CPAN - Courriel - DROLSKY - "DROLSKY's" - DateTime - Multipart - PayPal - PayPal - Postel - Rolsky - "Rolsky's" - UTC - UTF - ascii - "attribute's" - cid - distro - filename - html - inline - lookup - multipart - utf - zh wordlist: Pod::Wordlist name: '@DROLSKY/Test::PodSpelling' version: '2.007000' - class: Dist::Zilla::Plugin::Test::ReportPrereqs name: '@DROLSKY/Test::ReportPrereqs' version: '0.021' - class: Dist::Zilla::Plugin::Test::Version name: '@DROLSKY/Test::Version' version: '1.05' - class: Dist::Zilla::Plugin::ManifestSkip name: '@DROLSKY/ManifestSkip' version: '5.043' - class: Dist::Zilla::Plugin::MetaYAML name: '@DROLSKY/MetaYAML' version: '5.043' - class: Dist::Zilla::Plugin::License name: '@DROLSKY/License' version: '5.043' - class: Dist::Zilla::Plugin::ExtraTests name: '@DROLSKY/ExtraTests' version: '5.043' - class: Dist::Zilla::Plugin::ExecDir name: '@DROLSKY/ExecDir' version: '5.043' - class: Dist::Zilla::Plugin::ShareDir name: '@DROLSKY/ShareDir' version: '5.043' - class: Dist::Zilla::Plugin::Manifest name: '@DROLSKY/Manifest' version: '5.043' - class: Dist::Zilla::Plugin::CheckVersionIncrement name: '@DROLSKY/CheckVersionIncrement' version: '0.121750' - class: Dist::Zilla::Plugin::TestRelease name: '@DROLSKY/TestRelease' version: '5.043' - class: Dist::Zilla::Plugin::ConfirmRelease name: '@DROLSKY/ConfirmRelease' version: '5.043' - class: Dist::Zilla::Plugin::UploadToCPAN name: '@DROLSKY/UploadToCPAN' version: '5.043' - class: Dist::Zilla::Plugin::CheckPrereqsIndexed name: '@DROLSKY/CheckPrereqsIndexed' version: '0.017' - class: Dist::Zilla::Plugin::CPANFile name: '@DROLSKY/CPANFile' version: '5.043' - class: Dist::Zilla::Plugin::DROLSKY::Contributors name: '@DROLSKY/DROLSKY::Contributors' version: '0.41' - class: Dist::Zilla::Plugin::DROLSKY::License name: '@DROLSKY/DROLSKY::License' version: '0.41' - class: Dist::Zilla::Plugin::DROLSKY::TidyAll name: '@DROLSKY/DROLSKY::TidyAll' version: '0.41' - class: Dist::Zilla::Plugin::DROLSKY::VersionProvider name: '@DROLSKY/DROLSKY::VersionProvider' version: '0.41' - class: Dist::Zilla::Plugin::DROLSKY::Git::CheckFor::CorrectBranch config: Dist::Zilla::Role::Git::Repo: repo_root: . name: '@DROLSKY/DROLSKY::Git::CheckFor::CorrectBranch' version: '0.41' - class: Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts config: Dist::Zilla::Role::Git::Repo: repo_root: . name: '@DROLSKY/Git::CheckFor::MergeConflicts' version: '0.013' - class: Dist::Zilla::Plugin::Git::Contributors config: Dist::Zilla::Plugin::Git::Contributors: include_authors: 0 include_releaser: 1 order_by: name paths: - . name: '@DROLSKY/Git::Contributors' version: '0.018' - class: Dist::Zilla::Plugin::InstallGuide name: '@DROLSKY/InstallGuide' version: '1.200006' - class: Dist::Zilla::Plugin::Meta::Contributors name: '@DROLSKY/Meta::Contributors' version: '0.002' - class: Dist::Zilla::Plugin::MetaConfig name: '@DROLSKY/MetaConfig' version: '5.043' - class: Dist::Zilla::Plugin::MetaJSON name: '@DROLSKY/MetaJSON' version: '5.043' - class: Dist::Zilla::Plugin::SurgicalPodWeaver config: Dist::Zilla::Plugin::PodWeaver: finder: - ':InstallModules' - ':ExecFiles' plugins: - class: Pod::Weaver::Plugin::EnsurePod5 name: '@CorePrep/EnsurePod5' version: '4.012' - class: Pod::Weaver::Plugin::H1Nester name: '@CorePrep/H1Nester' version: '4.012' - class: Pod::Weaver::Section::Name name: Name version: '4.012' - class: Pod::Weaver::Section::Version name: Version version: '4.012' - class: Pod::Weaver::Section::Region name: prelude version: '4.012' - class: Pod::Weaver::Section::Generic name: SYNOPSIS version: '4.012' - class: Pod::Weaver::Section::Generic name: DESCRIPTION version: '4.012' - class: Pod::Weaver::Section::Leftovers name: Leftovers version: '4.012' - class: Pod::Weaver::Section::Region name: postlude version: '4.012' - class: Pod::Weaver::Section::Authors name: Authors version: '4.012' - class: Pod::Weaver::Section::Contributors name: Contributors version: '0.009' - class: Pod::Weaver::Section::Legal name: Legal version: '4.012' name: '@DROLSKY/SurgicalPodWeaver' version: '0.0023' - class: Dist::Zilla::Plugin::MojibakeTests name: '@DROLSKY/MojibakeTests' version: '0.8' - class: Dist::Zilla::Plugin::PodSyntaxTests name: '@DROLSKY/PodSyntaxTests' version: '5.043' - class: Dist::Zilla::Plugin::Test::CPAN::Changes name: '@DROLSKY/Test::CPAN::Changes' version: '0.009' - class: Dist::Zilla::Plugin::Test::CPAN::Meta::JSON name: '@DROLSKY/Test::CPAN::Meta::JSON' version: '0.004' - class: Dist::Zilla::Plugin::Test::Portability name: '@DROLSKY/Test::Portability' version: '2.000006' - class: Dist::Zilla::Plugin::Test::TidyAll name: '@DROLSKY/Test::TidyAll' version: '0.01' - class: Dist::Zilla::Plugin::Test::Compile config: Dist::Zilla::Plugin::Test::Compile: bail_out_on_fail: '0' fail_on_warning: author fake_home: 0 filename: xt/author/00-compile.t module_finder: - ':InstallModules' needs_display: 0 phase: develop script_finder: - ':PerlExecFiles' skips: [] name: '@DROLSKY/Test::Compile' version: '2.054' - class: Dist::Zilla::Plugin::Git::Check config: Dist::Zilla::Plugin::Git::Check: untracked_files: die Dist::Zilla::Role::Git::DirtyFiles: allow_dirty: - Build.PL - CONTRIBUTING.md - Changes - LICENSE - Makefile.PL - README.md - cpanfile allow_dirty_match: [] changelog: Changes Dist::Zilla::Role::Git::Repo: repo_root: . name: '@DROLSKY/Git::Check' version: '2.036' - class: Dist::Zilla::Plugin::Git::Commit config: Dist::Zilla::Plugin::Git::Commit: add_files_in: [] commit_msg: v%v%n%n%c Dist::Zilla::Role::Git::DirtyFiles: allow_dirty: - Build.PL - CONTRIBUTING.md - Changes - LICENSE - Makefile.PL - README.md - cpanfile allow_dirty_match: [] changelog: Changes Dist::Zilla::Role::Git::Repo: repo_root: . Dist::Zilla::Role::Git::StringFormatter: time_zone: local name: '@DROLSKY/commit generated files' version: '2.036' - class: Dist::Zilla::Plugin::Git::Tag config: Dist::Zilla::Plugin::Git::Tag: branch: ~ changelog: Changes signed: 0 tag: v0.40 tag_format: v%v tag_message: v%v Dist::Zilla::Role::Git::Repo: repo_root: . Dist::Zilla::Role::Git::StringFormatter: time_zone: local name: '@DROLSKY/Git::Tag' version: '2.036' - class: Dist::Zilla::Plugin::Git::Push config: Dist::Zilla::Plugin::Git::Push: push_to: - origin remotes_must_exist: 1 Dist::Zilla::Role::Git::Repo: repo_root: . name: '@DROLSKY/Git::Push' version: '2.036' - class: Dist::Zilla::Plugin::BumpVersionAfterRelease config: Dist::Zilla::Plugin::BumpVersionAfterRelease: finders: - ':ExecFiles' - ':InstallModules' global: 0 munge_makefile_pl: 1 name: '@DROLSKY/BumpVersionAfterRelease' version: '0.013' - class: Dist::Zilla::Plugin::Git::Commit config: Dist::Zilla::Plugin::Git::Commit: add_files_in: [] commit_msg: 'Bump version after release' Dist::Zilla::Role::Git::DirtyFiles: allow_dirty: - Changes - dist.ini allow_dirty_match: - (?^:.+) changelog: Changes Dist::Zilla::Role::Git::Repo: repo_root: . Dist::Zilla::Role::Git::StringFormatter: time_zone: local name: '@DROLSKY/commit version bump' version: '2.036' - class: Dist::Zilla::Plugin::Git::Push config: Dist::Zilla::Plugin::Git::Push: push_to: - origin remotes_must_exist: 1 Dist::Zilla::Role::Git::Repo: repo_root: . name: '@DROLSKY/push version bump' version: '2.036' - class: Dist::Zilla::Plugin::Test::Pod::LinkCheck name: '@DROLSKY/Test::Pod::LinkCheck' version: '1.002' - class: Dist::Zilla::Plugin::Test::Pod::No404s name: '@DROLSKY/Test::Pod::No404s' version: '1.002' - class: Dist::Zilla::Plugin::Encoding name: Encoding version: '5.043' - class: Dist::Zilla::Plugin::Prereqs config: Dist::Zilla::Plugin::Prereqs: phase: runtime type: requires name: Prereqs version: '5.043' - class: Dist::Zilla::Plugin::Prereqs config: Dist::Zilla::Plugin::Prereqs: phase: test type: recommends name: TestRecommends version: '5.043' - class: Dist::Zilla::Plugin::Prereqs config: Dist::Zilla::Plugin::Prereqs: phase: develop type: requires name: DevelopRequires version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':InstallModules' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':IncModules' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':TestFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':ExtraTestFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':ExecFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':PerlExecFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':ShareFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':MainModule' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':AllFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: ':NoFiles' version: '5.043' - class: Dist::Zilla::Plugin::FinderCode name: '@DROLSKY/MetaProvides::Package/AUTOVIV/:InstallModulesPM' version: '5.043' zilla: class: Dist::Zilla::Dist::Builder config: is_trial: '0' version: '5.043' x_authority: cpan:DROLSKY x_contributors: - 'Gregory Oschwald ' - 'Ricardo Signes ' - 'Zbigniew Łukasiak ' Courriel-0.40/LICENSE0000644000175000017500000002152012653205401014064 0ustar autarchautarchThis software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) The Artistic License 2.0 Copyright (c) 2000-2006, The Perl Foundation. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. Definitions "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. "You" and "your" means any person who would like to copy, distribute, or modify the Package. "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. "Source" form means the source code, documentation source, and configuration files for the Package. "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. Permission for Use and Modification Without Distribution (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. Permissions for Redistribution of the Standard Version (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. Distribution of Modified Versions of the Package as Source (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. (b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. (c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under (i) the Original License or (ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed. Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. Aggregating or Linking the Package (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. Items That are Not Considered Part of a Modified Version (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. General Provisions (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Courriel-0.40/weaver.ini0000644000175000017500000000024612653205401015053 0ustar autarchautarch[@CorePrep] [Name] [Version] [Region / prelude] [Generic / SYNOPSIS] [Generic / DESCRIPTION] [Leftovers] [Region / postlude] [Authors] [Contributors] [Legal] Courriel-0.40/lib/0000775000175000017500000000000012653205401013627 5ustar autarchautarchCourriel-0.40/lib/Email/0000775000175000017500000000000012653205401014656 5ustar autarchautarchCourriel-0.40/lib/Email/Abstract/0000775000175000017500000000000012653205401016421 5ustar autarchautarchCourriel-0.40/lib/Email/Abstract/Courriel.pm0000644000175000017500000000262112653205401020542 0ustar autarchautarchpackage Email::Abstract::Courriel; use strict; use warnings; our $VERSION = '0.40'; use Courriel; use parent 'Email::Abstract::Plugin'; sub target {'Courriel'} sub construct { my ( $class, $rfc822 ) = @_; Courriel->parse( text => \$rfc822 ); } sub get_header { my ( $class, $obj, $header ) = @_; my @values = map { $_->value } $obj->headers->get($header); return wantarray ? @values : $values[0]; } sub get_body { my ( $class, $obj ) = @_; return $obj->as_string; } sub set_header { my ( $class, $obj, $header, @data ) = @_; $obj->headers->remove($header); $obj->headers->add( $header => $_ ) for @data; } sub set_body { my ( $class, $obj, $body ) = @_; $obj->replace_body( text => $body ); } sub as_string { my ( $class, $obj ) = @_; $obj->as_string; } 1; #ABSTRACT: Email::Abstract wrapper for Courriel __END__ =pod =head1 NAME Email::Abstract::Courriel - Email::Abstract wrapper for Courriel =head1 VERSION version 0.40 =head1 DESCRIPTION This module wraps the Courriel mail handling library with an abstract interface, to be used with L. =encoding utf-8 =head1 SEE ALSO L, L. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/0000775000175000017500000000000012653205401015413 5ustar autarchautarchCourriel-0.40/lib/Courriel/Types/0000775000175000017500000000000012653205401016517 5ustar autarchautarchCourriel-0.40/lib/Courriel/Types/Internal.pm0000644000175000017500000000401212653205401020624 0ustar autarchautarchpackage Courriel::Types::Internal; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use List::AllUtils qw( all ); use Scalar::Util qw( blessed ); use MooseX::Types -declare => [ qw( Body EmailAddressStr HeaderArray Headers Part Printable Streamable StringRef ) ]; use MooseX::Types::Common::String qw( NonEmptyStr ); use MooseX::Types::Moose qw( ArrayRef CodeRef FileHandle HashRef Object ScalarRef Str ); #<<< subtype Body, as role_type('Courriel::Role::Body'); subtype Headers, as class_type('Courriel::Headers'); subtype EmailAddressStr, as NonEmptyStr; coerce EmailAddressStr, from class_type('Email::Address'), via { $_->format }; my $_check_header_array = sub { return 0 unless @{$_} % 2 == 0; my ( @even, @odd ); for my $i ( 0 .. $#{$_} ) { if ( $i % 2 ) { push @odd, $i; } else { push @even, $i; } } ## no critic (ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions) return 0 unless all { defined $_ && length $_ && !ref $_ } @{$_}[@even]; ## use critic; return 0 unless all { blessed($_) && $_->isa('Courriel::Header') } @{$_}[@odd]; return 1; }; subtype HeaderArray, as ArrayRef, # prototype wants an actual block, not a ref to a sub &where($_check_header_array), message { 'The array reference must contain an even number of elements' }; subtype Part, as role_type('Courriel::Role::Part'); subtype Printable, as Object, where { $_->can('print') }; subtype Streamable, as CodeRef; coerce Streamable, from FileHandle, via sub { my $fh = $_; return sub { print {$fh} @_ or die $! }; }; coerce Streamable, from Printable, via sub { my $obj = $_; return sub { $obj->print(@_) }; }; subtype StringRef, as ScalarRef[Str]; coerce StringRef, from Str, via { my $str = $_; \$str }; #>>> 1; Courriel-0.40/lib/Courriel/Part/0000775000175000017500000000000012653205401016321 5ustar autarchautarchCourriel-0.40/lib/Courriel/Part/Single.pm0000644000175000017500000002044412653205401020102 0ustar autarchautarchpackage Courriel::Part::Single; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Header::Disposition; use Courriel::Types qw( NonEmptyStr StringRef ); use Email::MIME::Encodings; use Encode qw( decode encode ); use MIME::Base64 (); use MIME::QuotedPrint (); use Moose; use MooseX::StrictConstructor; with 'Courriel::Role::Part'; has content_ref => ( is => 'ro', isa => StringRef, coerce => 1, init_arg => 'content', lazy => 1, builder => '_build_content_ref', predicate => '_has_content_ref', ); has encoded_content_ref => ( is => 'ro', isa => StringRef, coerce => 1, init_arg => 'encoded_content', lazy => 1, builder => '_build_encoded_content_ref', predicate => '_has_encoded_content_ref', ); has disposition => ( is => 'ro', isa => 'Courriel::Header::Disposition', lazy => 1, builder => '_build_disposition', predicate => '_has_disposition', handles => [qw( is_attachment is_inline filename )], ); has encoding => ( is => 'rw', writer => '_set_encoding', isa => NonEmptyStr, lazy => 1, default => '8bit', predicate => '_has_encoding', ); sub BUILD { my $self = shift; unless ( $self->_has_content_ref || $self->_has_encoded_content_ref ) { die 'You must provide a content or encoded_content parameter when constructing a Courriel::Part::Single object.'; } if ( !$self->_has_encoding ) { my @enc = $self->headers->get('Content-Transfer-Encoding'); $self->_set_encoding( $enc[0]->value ) if @enc && $enc[0]; } $self->_sync_headers_with_self; return; } after _set_headers => sub { my $self = shift; $self->_sync_headers_with_self; return; }; sub _sync_headers_with_self { my $self = shift; $self->_maybe_set_disposition_in_headers; $self->headers->replace( 'Content-Transfer-Encoding' => $self->encoding ); return; } sub _maybe_set_disposition_in_headers { my $self = shift; return unless $self->_has_disposition; $self->headers->replace( 'Content-Disposition' => $self->disposition ); } { my $fake_disp = Courriel::Header::Disposition->new_from_value( name => 'Content-Disposition', value => 'inline', ); sub _build_disposition { my $self = shift; my @disp = $self->headers->get('Content-Disposition'); if ( @disp > 1 ) { die 'This email defines more than one Content-Disposition header.'; } return $disp[0] // $fake_disp; } } sub is_multipart {0} { my %unencoded = map { $_ => 1 } qw( 7bit 8bit binary ); sub _build_content_ref { my $self = shift; my $encoding = $self->encoding; my $bytes = $unencoded{ lc $encoding } ? $self->encoded_content : Email::MIME::Encodings::decode( $encoding, $self->encoded_content, ); return \$bytes if $self->content_type->is_binary; return \$bytes if lc $self->content_type->charset eq 'unknown-8bit'; return \( decode( $self->content_type->charset, $bytes, ) ); } sub _build_encoded_content_ref { my $self = shift; my $encoding = $self->encoding; my $bytes = $self->content_type->is_binary ? $self->content : encode( $self->content_type->charset, $self->content, ); return \$bytes if $unencoded{ lc $encoding }; return \( Email::MIME::Encodings::encode( $encoding, $bytes, ) ); } } sub content { return ${ $_[0]->content_ref }; } sub encoded_content { return ${ $_[0]->encoded_content_ref }; } ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines) sub _stream_content { my $self = shift; my $output = shift; return $output->( $self->encoded_content ); } ## use critic __PACKAGE__->meta->make_immutable; 1; # ABSTRACT: A part which does not contain other parts, only content __END__ =pod =head1 NAME Courriel::Part::Single - A part which does not contain other parts, only content =head1 VERSION version 0.40 =head1 SYNOPSIS my $headers = $part->headers; my $ct = $part->content_type; my $content = $part->content; print ${$content}; =head1 DESCRIPTION This class represents a single part that does not contain other parts, just content. =encoding utf-8 =head1 API This class provides the following methods: =head2 Courriel::Part::Single->new( ... ) This method creates a new part object. It accepts the following parameters: =over 4 =item * content This can either be a string or a reference to a scalar. It should be a character string, I a byte string. If you pass a reference, then the scalar underlying the reference may be modified, so don't pass in something you don't want modified. =item * encoded_content This can either be a string or a reference to a scalar. If you pass a reference, then the scalar underlying the reference may be modified, so don't pass in something you don't want modified. =item * content_type A L object. This will default to one with the mime type "text/plain". =item * disposition A L object representing this part's content disposition. This will default to "inline" with no other attributes. =item * encoding The Content-Transfer-Encoding for this part. This defaults to the value found in the part's headers, or "8bit" if no header is found. =item * headers A L object containing headers for this part. =back You must pass a C or C value when creating a new part, but there's really no point in passing both. It is strongly recommended that you pass a C parameter and letting this module do the encoding for you internally. =head2 $part->content() This returns returns the decoded content for the part. It will be in Perl's native utf-8 encoding, decoded from whatever character set the content is in. =head2 $part->encoded_content() This returns returns the encoded content for the part. =head2 $part->mime_type() Returns the mime type for this part. =head2 $part->has_charset() Return true if the part has a charset defined. Binary attachments will usually not have this defined. =head2 $part->charset() Returns the charset for this part. =head2 $part->is_inline(), $part->is_attachment() These methods return boolean values based on the part's content disposition. =head2 $part->filename() Returns the filename from the part's content disposition, if any. =head2 $part->content_type() Returns the L object for this part. =head2 $part->disposition() Returns the L object for this part. =head2 $part->encoding() Returns the encoding for the part. =head2 $part->headers() Returns the L object for this part. =head2 $part->is_multipart() Returns false. =head2 $part->container() Returns the L or L object to which this part belongs, if any. This is set when the part is added to another object. =head2 $part->content_ref() This returns returns a reference to a scalar containing the decoded content for the part. =head2 $part->encoded_content_ref() This returns returns a reference to a scalar containing the encoded content for the part, without any decoding. =head2 $part->as_string() Returns the part as a string, along with its headers. Lines will be terminated with "\r\n". =head2 $part->stream_to( output => $output ) This method will send the stringified part to the specified output. The output can be a subroutine reference, a filehandle, or an object with a C method. The output may be sent as a single string, as a list of strings, or via multiple calls to the output. =head1 ROLES This class does the C and C roles. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Part/Multipart.pm0000644000175000017500000001226312653205401020642 0ustar autarchautarchpackage Courriel::Part::Multipart; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::HeaderAttribute; use Courriel::Helpers qw( unique_boundary ); use Courriel::Types qw( ArrayRef NonEmptyStr Part ); use Email::MessageID; use Moose; use MooseX::StrictConstructor; with 'Courriel::Role::Part'; has preamble => ( is => 'ro', isa => NonEmptyStr, predicate => 'has_preamble', ); has epilogue => ( is => 'ro', isa => NonEmptyStr, predicate => 'has_epilogue', ); has _parts => ( traits => ['Array'], isa => ArrayRef [Part], init_arg => 'parts', required => 1, handles => { parts => 'elements', part_count => 'count', }, ); sub BUILD { my $self = shift; my $p = shift; my $boundary = delete $p->{boundary} // unique_boundary; my $existing = $self->content_type->attribute('boundary'); ## no critic (Subroutines::ProtectPrivateSubs) $self->content_type->_set_attribute( boundary => Courriel::HeaderAttribute->new( name => ( $existing ? $existing->name : 'boundary' ), value => $boundary, ) ); ## use critic $_->_set_container($self) for $self->parts; return; } sub is_attachment {0} sub is_inline {0} sub is_multipart {1} ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines) sub _stream_content { my $self = shift; my $output = shift; $output->( $self->preamble, $Courriel::Helpers::CRLF ) if $self->has_preamble; for my $part ( $self->parts ) { $output->( $Courriel::Helpers::CRLF, '--', $self->boundary, $Courriel::Helpers::CRLF, ); $part->stream_to( output => $output ); } $output->( $Courriel::Helpers::CRLF, '--', $self->boundary, '--', $Courriel::Helpers::CRLF ); $output->( $self->epilogue, $Courriel::Helpers::CRLF ) if $self->has_epilogue; return; } ## use critic sub boundary { my $self = shift; return $self->content_type->attribute_value('boundary'); } __PACKAGE__->meta->make_immutable; 1; # ABSTRACT: A part which contains other parts __END__ =pod =head1 NAME Courriel::Part::Multipart - A part which contains other parts =head1 VERSION version 0.40 =head1 SYNOPSIS my $headers = $part->headers; my $ct = $part->content_type; for my $subpart ( $part->parts ) { ... } =head1 DESCRIPTION This class represents a multipart email part which contains other parts. =encoding utf-8 =head1 API This class provides the following methods: =head2 Courriel::Part::Multipart->new( ... ) This method creates a new part object. It accepts the following parameters: =over 4 =item * parts An array reference of part objects (either Single or Multipart). This is required, but could be empty. =item * content_type A L object. This defaults to one with a mime type of "multipart/mixed". =item * boundary The part boundary. If none is provided, a unique value will be generated. =item * preamble Content that appears before the first part boundary. This will be seen by email clients that don't understand multipart messages. =item * epilogue Content that appears after the final part boundary. The spec allows for this, but it's probably not very useful. =item * headers A L object containing headers for this part. =back =head2 $part->parts() Returns an array (not a reference) of the parts this part contains. =head2 $part->part_count() Returns the number of parts this part contains. =head2 $part->boundary() Returns the part boundary. =head2 $part->mime_type() Returns the mime type for this part. =head2 $part->content_type() Returns the L object for this part. =head2 $part->headers() Returns the L object for this part. =head2 $part->is_inline(), $part->is_attachment() These methods always return false, but exist for the sake of providing a consistent API between Single and Multipart part objects. =head2 $part->is_multipart() Returns true. =head2 $part->preamble() The preamble as passed to the constructor. =head2 $part->epilogue() The epilogue as passed to the constructor. =head2 $part->container() Returns the L or L object to which this part belongs, if any. This is set when the part is added to another object. =head2 $part->stream_to( output => $output ) This method will send the stringified part to the specified output. The output can be a subroutine reference, a filehandle, or an object with a C method. The output may be sent as a single string, as a list of strings, or via multiple calls to the output. =head2 $part->as_string() Returns the part as a string, along with its headers. Lines will be terminated with "\r\n". =head1 ROLES This class does the C and C roles. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Types.pm0000644000175000017500000000045412653205401017056 0ustar autarchautarchpackage Courriel::Types; use strict; use warnings; use namespace::autoclean; use parent 'MooseX::Types::Combine'; our $VERSION = '0.40'; __PACKAGE__->provide_types_from( qw( MooseX::Types::Common::String MooseX::Types::Moose Courriel::Types::Internal ) ); 1; Courriel-0.40/lib/Courriel/HeaderAttribute.pm0000644000175000017500000001442112653205401021025 0ustar autarchautarchpackage Courriel::HeaderAttribute; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::HeaderAttribute; use Courriel::Helpers qw( quote_and_escape_attribute_value ); use Courriel::Types qw( Maybe NonEmptyStr Str ); use Encode qw( encode ); use Moose; use MooseX::StrictConstructor; with 'Courriel::Role::Streams'; has name => ( is => 'ro', isa => NonEmptyStr, required => 1, ); has value => ( is => 'ro', isa => Str, required => 1, ); has charset => ( is => 'ro', isa => NonEmptyStr, default => 'us-ascii', ); has language => ( is => 'ro', isa => Maybe [NonEmptyStr], default => undef, ); override BUILDARGS => sub { my $class = shift; my $p = super(); return $p unless defined $p->{value}; $p->{charset} = 'UTF-8' if $p->{value} =~ /[^\p{ASCII}]/; return $p; }; ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines) sub _stream_to { my $self = shift; my $output = shift; $output->( $self->_as_string ); } ## use critic { my $non_attribute_char = qr{ $Courriel::Helpers::TSPECIALS | [ \*\%] # space, *, % | [^\p{ASCII}] # anything that's not ascii | [\x00-\x1f\x7f] # ctrl chars }x; sub _as_string { my $self = shift; my $value = $self->value; my $transport_method = '_simple_parameter'; if ( $value =~ /[\x00-\x1f]|\x7f|[^\p{ASCII}]/ || defined $self->language || $self->charset ne 'us-ascii' ) { $value = encode( 'utf-8', $value ); $value =~ s/($non_attribute_char)/'%' . uc sprintf( '%02x', ord($1) )/eg; $transport_method = '_encoded_parameter'; } elsif ( $value =~ /$non_attribute_char/ ) { $transport_method = '_quoted_parameter'; } # XXX - hard code 78 as the max line length may not be right. Should # this account for the length that the parameter name takes up (as # well as encoding information, etc.)? my @pieces; while ( length $value ) { my $last_percent = rindex( $value, '%', 78 ); my $size = $last_percent >= 76 ? $last_percent : length $value > 78 ? 78 : length $value; push @pieces, substr( $value, 0, $size, q{} ); } if ( @pieces == 1 ) { return $self->$transport_method( undef, $pieces[0] ); } else { return join q{ }, map { $self->$transport_method( $_, $pieces[$_] ) } 0 .. $#pieces; } } } ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines) sub _simple_parameter { my $self = shift; my $order = shift; my $value = shift; my $param = $self->name; $param .= q{*} . $order if defined $order; $param .= q{=}; $param .= $value; return $param; } sub _quoted_parameter { my $self = shift; my $order = shift; my $value = shift; my $param = $self->name; $param .= q{*} . $order if defined $order; $param .= q{=}; $value =~ s/\"/\\\"/g; $param .= q{"} . $value . q{"}; return $param; } sub _encoded_parameter { my $self = shift; my $order = shift; my $value = shift; my $param = $self->name; $param .= q{*} . $order if defined $order; $param .= q{*=}; # XXX (1) - does it makes sense to just say everything is utf-8? in theory # someone could pass through binary data in another encoding. unless ($order) { $param .= 'UTF-8' . q{'} . ( $self->language // q{} ) . q{'}; } $param .= $value; return $param; } ## use critic; __PACKAGE__->meta->make_immutable; 1; # ABSTRACT: A single attribute belonging to a header __END__ =pod =head1 NAME Courriel::HeaderAttribute - A single attribute belonging to a header =head1 VERSION version 0.40 =head1 SYNOPSIS my $ct = $headers->get('Content-Type'); print $ct->get_attribute('charset')->value; =head1 DESCRIPTION This class represents a single attribute belonging to a header. An attribute consists of a name and value, with optional charset and language information. =encoding utf-8 =head1 API This class supports the following methods: =head1 Courriel::HeaderAttribute->new( ... ) This method creates a new object. It accepts the following parameters: =over 4 =item * name The name of the attribute. This should be a non-empty string. =item * value The value of the attribute. This can be empty. =item * charset The charset for the value. If the value contains any non-ASCII data, this will always be "UTF-8", otherwise the default is "us-ascii". =item * language The language for the attribute's value. It should be a valid ISO language code like "en-us" or "zh". This is optional. =back =head2 $attribute->name() The attribute name as passed to the constructor. =head2 $attribute->value() The attribute value as passed to the constructor. =head2 $attribute->charset() The attribute's charset. =head2 $attribute->language() The attribute's language. =head2 $attribute->as_string() This returns the attribute in a form suitable for putting in an email. This may involve escaping, quoting, splitting up, and otherwise messing with the value. If the value needs to be split across continuations, each name/value pair is returned separate by a space, but not folded across multiple lines. =head2 $attribute->stream_to( output => $output ) This method will send the stringified attribute to the specified output. The output can be a subroutine reference, a filehandle, or an object with a C method. The output may be sent as a single string, as a list of strings, or via multiple calls to the output. =head1 ROLES This class does the C role. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Helpers.pm0000644000175000017500000001126012653205401017351 0ustar autarchautarchpackage Courriel::Helpers; use strict; use warnings; our $VERSION = '0.40'; use Encode qw( decode ); use Exporter qw( import ); use List::AllUtils qw( first ); our @EXPORT_OK = qw( fold_header parse_header_with_attributes quote_and_escape_attribute_value unique_boundary ); our $CRLF = "\x0d\x0a"; # from Email::Simple our $LINE_SEP_RE = qr/(?:\x0a\x0d|\x0d\x0a|\x0a|\x0d)/; sub fold_header { my $line = shift; my $folded = q{}; # Algorithm stolen from Email::Simple::Header while ($line) { if ( $line =~ s/^(.{0,76})(\s|\z)// ) { $folded .= $1 . $CRLF; $folded .= q{ } if $line; } else { # Basically nothing we can do. :( $folded .= $line . $CRLF; last; } } return $folded; } sub quote_and_escape_attribute_value { my $val = shift; return $val unless $val =~ /[^a-zA-Z0-9\-]/; $val =~ s/(\\|")/\\$1/g; return qq{"$val"}; } sub parse_header_with_attributes { my $text = shift; return unless defined $text; my ($val) = $text =~ /([^\s;]+)(?:\s*;\s*(.*))?\z/s; ## no critic (RegularExpressions::ProhibitCaptureWithoutTest) return ( $val, _parse_attributes($2), ); } our $TSPECIALS = qr{\Q()<>@,;:\"/[]?=}; my $extract_quoted = qr/ (?: \" (? [^\\\"]* (?: \\.[^\\\"]* )* ) \" | \' (? [^\\\']* (?: \\.[^\\\']* )* ) \' ) /x; # This is a very loose regex. RFC 2231 has a much tighter definition of what # can go in an attribute name, but this parser is designed to accept all the # crap the internet throws at it. my $attr_re = qr/ (?[^\s=\*]+) # names cannot include spaces, "=", or "*" (?: \*(?[\d+]) )? (?\*)? = (?: $extract_quoted | (?[^\s;]+) # unquoted values cannot contain spaces ) (\s*;\s*)? /xs; sub _parse_attributes { my $attr_text = shift; return {} unless defined $attr_text && length $attr_text; my $attrs = {}; while ( $attr_text =~ /\G$attr_re/g ) { my $name = $+{name}; my $value; my $charset; my $language; my $order = $+{order} || 0; if ( $+{is_encoded} ) { if ($order) { $value = _decode_raw_value( $+{value}, $attrs->{$name}[$order]{charset}, ); } else { ( $charset, $language, my $raw ) = split /\'/, $+{value}, 3; $language = undef unless length $language; $value = _decode_raw_value( $raw, $charset ); } } elsif ( defined $+{quoted_value} ) { ( $value = $+{quoted_value} ) =~ s/\G(.*?)\\(.)/$1$2/g; } else { $value = $+{value}; } $attrs->{$name}[$order] = { value => $value, charset => $charset, language => $language, }; } return { map { $_ => _inflate_attribute( $_, $attrs->{$_} ) } keys %{$attrs} }; } sub _decode_raw_value { my $raw = shift; my $charset = shift; $raw =~ s/%([\da-fA-F]{2})/chr(hex($1))/eg; return $raw unless defined $charset; return decode( $charset, $raw ); } sub _inflate_attribute { my $name = shift; my $raw_data = shift; my $value = join q{}, grep {defined} map { $_->{value} } @{$raw_data}; my %p = ( name => $_, value => $value, ); for my $key (qw( charset language )) { $p{$key} = $raw_data->[0]{$key} if defined $raw_data->[0]{$key}; } return Courriel::HeaderAttribute->new(%p); } sub unique_boundary { return Email::MessageID->new->user; } # Courriel::HeaderAttribute requires that $TSPECIALS be defined require Courriel::HeaderAttribute; 1; Courriel-0.40/lib/Courriel/Builder.pm0000644000175000017500000004344412653205401017346 0ustar autarchautarchpackage Courriel::Builder; use strict; use warnings; our $VERSION = '0.40'; use Carp qw( croak ); use Courriel; use Courriel::Header::ContentType; use Courriel::Header::Disposition; use Courriel::Headers; use Courriel::Helpers qw( parse_header_with_attributes ); use Courriel::Part::Multipart; use Courriel::Part::Single; use Courriel::Types qw( EmailAddressStr HashRef NonEmptyStr Str StringRef ); use DateTime; use DateTime::Format::Mail; use Devel::PartialDump; use File::Basename qw( basename ); use File::LibMagic; use File::Slurp::Tiny qw( read_file ); use List::AllUtils qw( first ); use MooseX::Params::Validate qw( pos_validated_list validated_list ); use Scalar::Util qw( blessed reftype ); our @CARP_NOT = __PACKAGE__; my @exports; BEGIN { @exports = qw( build_email subject from to cc header plain_body html_body attach ); } use Sub::Exporter -setup => { exports => \@exports, groups => { default => \@exports }, }; { my $spec = { isa => HashRef }; sub build_email { my $count = @_ ? @_ : 1; pos_validated_list( \@_, ($spec) x $count, MX_PARAMS_VALIDATE_NO_CACHE => 1, ); my @headers; my $plain_body; my $html_body; my @attachments; for my $p (@_) { ## no critic (ControlStructures::ProhibitCascadingIfElse) if ( $p->{header} ) { push @headers, @{ $p->{header} }; } elsif ( $p->{plain_body} ) { $plain_body = $p->{plain_body}; } elsif ( $p->{html_body} ) { $html_body = $p->{html_body}; } elsif ( $p->{attachment} ) { push @attachments, $p->{attachment}; } else { _bad_value($p); } } my $body_part; if ( $plain_body && $html_body ) { my $ct = Courriel::Header::ContentType->new( mime_type => 'multipart/alternative', ); $body_part = Courriel::Part::Multipart->new( headers => Courriel::Headers->new, content_type => $ct, parts => [ $plain_body, $html_body ], ); } else { $body_part = first {defined} $plain_body, $html_body; croak 'Cannot call build_email without a plain or html body' unless $body_part; } if (@attachments) { my $ct = Courriel::Header::ContentType->new( mime_type => 'multipart/mixed' ); $body_part = Courriel::Part::Multipart->new( headers => Courriel::Headers->new, content_type => $ct, parts => [ $body_part, @attachments, ], ); } _add_required_headers( \@headers ); # XXX - a little incestuous but I don't really want to make this method # public, and delaying building the body part would make all the code more # complicated than it needs to be. $body_part->_set_headers( Courriel::Headers->new( headers => [@headers] ) ); return Courriel->new( part => $body_part ); } } sub _bad_value { croak 'A weird value was passed to build_email: ' . Devel::PartialDump->new->dump( $_[0] ); } sub _add_required_headers { my $headers = shift; my %keys = map {lc} @{$headers}; unless ( $keys{date} ) { push @{$headers}, ( Date => DateTime::Format::Mail->format_datetime( DateTime->now ) ); } unless ( $keys{'message-id'} ) { push @{$headers}, ( 'Message-Id' => Email::MessageID->new->in_brackets ); } unless ( $keys{'mime-version'} ) { push @{$headers}, ( 'MIME-Version' => '1.0' ); } return; } { my $spec = { isa => Str }; sub subject { my ($subject) = pos_validated_list( \@_, $spec, ); return { header => [ Subject => $subject ] }; } } { my $spec = { isa => EmailAddressStr, coerce => 1 }; sub from { my ($from) = pos_validated_list( \@_, $spec, ); if ( blessed $from ) { $from = $from->format; } return { header => [ From => $from ] }; } } { my $spec = { isa => EmailAddressStr, coerce => 1 }; sub to { my $count = @_ ? @_ : 1; my (@to) = pos_validated_list( \@_, ($spec) x $count, MX_PARAMS_VALIDATE_NO_CACHE => 1, ); @to = map { blessed($_) ? $_->format : $_ } @to; return { header => [ To => join ', ', @to ] }; } } { my $spec = { isa => EmailAddressStr, coerce => 1 }; sub cc { my $count = @_ ? @_ : 1; my (@cc) = pos_validated_list( \@_, ($spec) x $count, MX_PARAMS_VALIDATE_NO_CACHE => 1, ); @cc = map { blessed($_) ? $_->format : $_ } @cc; return { header => [ Cc => join ', ', @cc ] }; } } { my @spec = ( { isa => NonEmptyStr }, { isa => Str }, ); sub header { my ( $name, $value ) = pos_validated_list( \@_, @spec, ); return { header => [ $name => $value ] }; } } sub plain_body { my %p = @_ == 1 ? ( content => shift ) : @_; return { plain_body => _body_part( %p, mime_type => 'text/plain', ) }; } sub html_body { my @attachments; for my $i ( reverse 0 .. $#_ ) { if ( ref $_[$i] && reftype( $_[$i] ) eq 'HASH' && $_[$i]->{attachment} ) { push @attachments, splice @_, $i, 1; } } my %p = @_ == 1 ? ( content => shift ) : @_; my $body = _body_part( %p, mime_type => 'text/html', ); if (@attachments) { $body = Courriel::Part::Multipart->new( headers => Courriel::Headers->new, content_type => Courriel::Header::ContentType->new( mime_type => 'multipart/related' ), parts => [ $body, map { $_->{attachment} } @attachments, ], ); } return { html_body => $body }; } { my @spec = ( mime_type => { isa => NonEmptyStr }, charset => { isa => NonEmptyStr, default => 'UTF-8', }, encoding => { isa => NonEmptyStr, default => 'base64', }, content => { isa => StringRef, coerce => 1, }, ); sub _body_part { my ( $mime_type, $charset, $encoding, $content ) = validated_list( \@_, @spec, ); my $ct = Courriel::Header::ContentType->new( mime_type => $mime_type, attributes => { charset => $charset }, ); my $body = Courriel::Part::Single->new( headers => Courriel::Headers->new, content_type => $ct, encoding => $encoding, content => $content, ); return $body; } } sub attach { my %p = @_ == 1 ? ( file => shift ) : @_; return { attachment => $p{file} ? _part_for_file(%p) : _part_for_content(%p) }; } my $flm = File::LibMagic->new; { my @spec = ( file => { isa => NonEmptyStr }, mime_type => { isa => NonEmptyStr, optional => 1 }, filename => { isa => NonEmptyStr, optional => 1 }, content_id => { isa => NonEmptyStr, optional => 1 }, ); sub _part_for_file { my ( $file, $mime_type, $filename, $content_id ) = validated_list( \@_, @spec, ); my $ct = _content_type( $mime_type // $flm->checktype_filename($file) ); my $content = read_file($file); return Courriel::Part::Single->new( headers => _attachment_headers($content_id), content_type => $ct, disposition => _attachment_disposition( $filename // $file ), encoding => 'base64', content => \$content, ); } } { my @spec = ( content => { isa => StringRef, coerce => 1 }, mime_type => { isa => NonEmptyStr, optional => 1 }, filename => { isa => NonEmptyStr, optional => 1 }, content_id => { isa => NonEmptyStr, optional => 1 }, ); sub _part_for_content { my ( $content, $mime_type, $filename, $content_id ) = validated_list( \@_, @spec, ); my $ct = _content_type( $mime_type // $flm->checktype_contents( ${$content} ) ); my $disp = Courriel::Header::Disposition->new( disposition => 'attachment', attributes => { defined $filename ? ( filename => basename($filename) ) : () } ); return Courriel::Part::Single->new( headers => _attachment_headers($content_id), content_type => $ct, disposition => _attachment_disposition($filename), encoding => 'base64', content => $content, ); } } sub _content_type { my $type = shift; return Courriel::Header::ContentType->new( mime_type => 'application/unknown' ) unless defined $type; my ( $mime_type, $attr ) = parse_header_with_attributes($type); return Courriel::Header::ContentType->new( mime_type => 'application/unknown' ) unless defined $mime_type && length $mime_type; return Courriel::Header::ContentType->new( mime_type => $mime_type, attributes => $attr, ); } sub _attachment_headers { my $content_id = shift; my @headers; if ( defined $content_id ) { $content_id = "<$content_id>" unless $content_id =~ /^<[^>]+>$/; push @headers, ( 'Content-ID' => $content_id ); } return Courriel::Headers->new( headers => \@headers ); } sub _attachment_disposition { my $file = shift; return Courriel::Header::Disposition->new( disposition => 'attachment', attributes => { defined $file ? ( filename => basename($file) ) : () } ); } 1; # ABSTRACT: Build emails with sugar __END__ =pod =head1 NAME Courriel::Builder - Build emails with sugar =head1 VERSION version 0.40 =head1 SYNOPSIS use Courriel::Builder; my $email = build_email( subject('An email for you'), from('joe@example.com'), to( 'jane@example.com', 'alice@example.com' ), header( 'X-Generator' => 'MyApp' ), plain_body($plain_text), html_body( $html, attach('path/to/image.jpg'), attach('path/to/other-image.jpg'), ), attach('path/to/spreadsheet.xls'), attach( content => $file_content ), ); =head1 DESCRIPTION This module provides some sugar syntax for emails of all shapes sizes, from simple emails with a plain text body to emails with both plain and html bodies, html with attached images, etc. =encoding utf-8 =head1 API This module exports all of the following functions by default. It uses L under the hood, which means you can easily import the functions with different names. See L for details. =head2 build_email( ... ) This function returns a new L object. It takes the results of all the other functions you call as input. It expects you to pass in a body of some sort, whether text, html, or both, and will throw an error if you don't. It will add Date and Message-ID headers to your email if you don't provide them, ensuring that the email is RFC-compliant. =head2 subject($subject) This sets the subject of the email. It expects a single string. You can pass an empty string, but not C. =head2 from($from) This sets the From header of the email. It expects a single string or L object. =head2 to($from) This sets the To header of the email. It expects a list of string and/or L objects. =head2 cc($from) This sets the Cc header of the email. It expects a list of string and/or L objects. =head2 header( $name => $value ) This sets a header's value. You can call it as many times as you want, and you can call it more than once with the same header name to set multiple values for that header. =head2 plain_body( ... ) This defines a plain text body for the email. You can call it with a single argument, a scalar or reference to a scalar. This creates a text/plain part based on the content you provide in that argument. By default, the charset for the body is UTF-8 and the encoding is base64. You can also call this function with a hash of options. It accepts the following options: =over 4 =item * content The content of the body. This can be a string or scalar reference. =item * charset The charset for the body. This defaults to UTF-8. =item * encoding The encoding for the body. This defaults to base64. Other valid values are quoted-printable, 7bit, and 8bit. It is strongly recommended that you let Courriel handle the transfer encoding for you. =back =head2 html_body( ... ) This accepts the same arguments as the C function. You can I pass in the results of one or more calls to the C function. If you pass in attachments, it creates a multipart/related email part, which lets you refer to images by the Content-ID using the "cid:" URL scheme. =head2 attach( ... ) This function creates an attachment for the email. In the simplest form, you can pass it a single argument, which should be a path to a file on disk. This file will be attached to the email. You can also pass a hash of options. The valid keys are: =over 4 =item * file The file to attach to the email. You can also pass the content explicitly. =item * content The content of the attachment. This can be a string or scalar reference. =item * filename You can set the filename that will be used in the attachment's Content-Disposition header. If you pass a C parameter, that will be used when this isn't provided. If you pass as C parameter, then there will be no filename set for the attachment unless you pass a C parameter as well. =item * mime_type You can explicitly set the mime type for the attachment. If you don't, this function will use L to try to figure out the mime type for the attachment. =item * content_id This will set the Content-ID header for the attachment. If you're creating a HTML body with "cid:" scheme URLs, you'll need to set this for each attachment that the HTML body refers to. The id will be wrapped in angle brackets ("") when set as a header. =back =head1 COOKBOOK Some examples of how to build different types of emails. =head2 Simple Email With Plain Text Body my $email = build_email( subject('An email for you'), from('joe@example.com'), to( 'jane@example.com', 'alice@example.com' ), plain_body($plain_text), ); This creates an email with a single text/plain part. =head2 Simple Email With HTML Body my $email = build_email( subject('An email for you'), from('joe@example.com'), to( 'jane@example.com', 'alice@example.com' ), html_body($html_text), ); This creates an email with a single text/html part. =head2 Email With Both Plain and HTML Bodies my $email = build_email( subject('An email for you'), from('joe@example.com'), to( 'jane@example.com', 'alice@example.com' ), plain_body($plain_text), html_body($html_text), ); This creates an email with this structure: multipart/alternative | |-- text/plain (disposition = inline) |-- text/html (disposition = inline) =head2 Email With Both Plain and HTML Bodies and Inline Images my $email = build_email( subject('An email for you'), from('joe@example.com'), to( 'jane@example.com', 'alice@example.com' ), plain_body($plain_text), html_body( $html_text, attach( file => 'path/to/image1.jpg', content_id => 'image1', ), attach( file => 'path/to/image2.jpg', content_id => 'image2', ), ), ); This creates an email with this structure: multipart/alternative | |-- text/plain (disposition = inline) |-- multipart/related | |-- text/html (disposition = inline) |-- image/jpeg (disposition = attachment, Content-ID = image1) |-- image/jpeg (disposition = attachment, Content-ID = image2) =head2 Email With Both Plain and HTML Bodies and Attachments my $email = build_email( subject('An email for you'), from('joe@example.com'), to( 'jane@example.com', 'alice@example.com' ), plain_body($plain_text), html_body( $html_text, ), attach('path/to/spreadsheet.xls'), attach( content => \$png_image_content ), ); This creates an email with this structure: multipart/mixed | |-- multipart/alternative | | | |-- text/plain (disposition = inline) | |-- text/html (disposition = inline) | |-- application/vnd.ms-excel (disposition = attachment) |-- image/png (disposition = attachment) =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Header.pm0000644000175000017500000002017612653205401017145 0ustar autarchautarchpackage Courriel::Header; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Helpers qw( fold_header ); use Courriel::Types qw( NonEmptyStr Str Streamable ); use Email::Address::List; use Encode qw( encode find_encoding ); use MIME::Base64 qw( encode_base64 ); use MooseX::Params::Validate qw( validated_list ); use Moose; use MooseX::StrictConstructor; with 'Courriel::Role::Streams' => { -exclude => ['stream_to'] }; has name => ( is => 'ro', isa => NonEmptyStr, required => 1, ); has value => ( is => 'ro', isa => Str, required => 1, ); { my @spec = ( charset => { isa => NonEmptyStr, default => 'utf8' }, output => { isa => Streamable, coerce => 1 }, ); sub stream_to { my $self = shift; my ( $charset, $output ) = validated_list( \@_, @spec ); my $string = $self->name; $string .= ': '; $string .= $self->_maybe_encoded_value($charset); $output->( fold_header($string) ); return; } } sub as_string { my $self = shift; my $string = q{}; $self->stream_to( output => $self->_string_output( \$string ), @_ ); return $string; } { # RFC 2047 - An 'encoded-word' MUST NOT be used in a Received header # field. my %never_encode = map { lc $_ => 1 } qw( Received ); my %contains_addresses = map { lc $_ => 1 } qw( CC From To ); # XXX - this really isn't very correct. Only certain types of values (per RFC # 2047) can be encoded, not just any random text. I'm not sure how best to # handle this. If we parsed an email that encoded stuff that shouldn't be # encoded, what should we do? At the very least, we should add some checks to # Courriel::Builder to ensure that people don't try to create an email with # non-ASCII in certain parts of fields (like in email addresses). sub _maybe_encoded_value { my $self = shift; my $charset = shift; return $self->value if $never_encode{ lc $self->name }; return $self->_encoded_address_list($charset) if $contains_addresses{ lc $self->name }; return $self->_encode_string( $self->value, $charset ); } } sub _encoded_address_list { my $self = shift; my $charset = shift; my @elements; my @group; for my $parsed ( Email::Address::List->parse( $self->value ) ) { my $push_to = @group ? \@group : \@elements; ## no critic (ControlStructures::ProhibitCascadingIfElse) if ( $parsed->{type} eq 'group start' ) { @group = $parsed->{value} . ':'; } elsif ( $parsed->{type} eq 'group end' ) { my $group = join ', ', @group; $group .= ';'; push @elements, $group; @group = (); } elsif ( $parsed->{type} eq 'unknown' ) { push @{$push_to}, $self->_encode_string( $parsed->{value}, $charset ); } elsif ( $parsed->{type} eq 'mailbox' ) { push @{$push_to}, $self->_maybe_encoded_address( $parsed->{value}, $charset ); } } return join ', ', @elements; } sub _maybe_encoded_address { my $self = shift; my $address = shift; my $charset = shift; my $encoded = q{}; my $phrase = $address->phrase; if ( defined $phrase && length $phrase ) { my $enc_phrase = $self->_encode_string( $phrase, $charset ); # If the phrase wasn't encoded then we can make it a quoted-word, if # it was encoded then it cannot be wrapped in quotes per RFC 2047. if ( $enc_phrase ne $phrase ) { $encoded .= $enc_phrase; } else { $encoded .= q{"} . $phrase . q{"}; } $encoded .= q{ }; } $encoded .= '<' . $address->address . '>'; my $comment = $address->comment; if ( defined $comment && length $comment ) { $encoded .= '(' . $self->_encode_string( $comment, $charset ) . ')'; } return $encoded; } { my $header_chunk = qr/ (?: ^ | (?[\x21-\x7e]+) # printable ASCII (excluding space, \x20) | (?\S+) # anything that's not space ) (?: (?\s+) | $ ) /x; sub _encode_string { my $self = shift; my $string = shift; my $charset = shift; my @chunks; while ( $string =~ /\G$header_chunk/g ) { push @chunks, {%+}; } my @encoded; for my $i ( 0 .. $#chunks ) { if ( defined $chunks[$i]->{non_ascii} ) { my $to_encode = $chunks[ $i + 1 ] && defined $chunks[ $i + 1 ]{non_ascii} ? $chunks[$i]{non_ascii} . ( $chunks[$i]{ws} // q{} ) : $chunks[$i]{non_ascii}; push @encoded, $self->_mime_encode( $to_encode, $charset ); push @encoded, q{ } if $chunks[ $i + 1 ]; } else { push @encoded, ( $chunks[$i]{ascii} // q{} ) . ( $chunks[$i]{ws} // q{} ); } } return join q{}, @encoded; } } sub _mime_encode { my $self = shift; my $text = shift; my $charset = find_encoding(shift)->mime_name; my $head = '=?' . $charset . '?B?'; my $tail = '?='; my $base_length = 75 - ( length($head) + length($tail) ); # This code is copied from Mail::Message::Field::Full in the Mail-Box # distro. my $real_length = int( $base_length / 4 ) * 3; my @result; my $chunk = q{}; while ( length( my $chr = substr( $text, 0, 1, q{} ) ) ) { my $chr = encode( $charset, $chr, 0 ); if ( length($chunk) + length($chr) > $real_length ) { push @result, $head . encode_base64( $chunk, q{} ) . $tail; $chunk = q{}; } $chunk .= $chr; } push @result, $head . encode_base64( $chunk, q{} ) . $tail if length $chunk; return join q{ }, @result; } __PACKAGE__->meta->make_immutable; 1; # ABSTRACT: A single header's name and value __END__ =pod =head1 NAME Courriel::Header - A single header's name and value =head1 VERSION version 0.40 =head1 SYNOPSIS my $subject = $headers->get('subject'); print $subject->value; =head1 DESCRIPTION This class represents a single header, which consists of a name and value. =encoding utf-8 =head1 API This class supports the following methods: =head1 Courriel::Header->new( ... ) This method requires two attributes, C and C. Both must be strings. The C cannot be empty, but the C can. =head2 $header->name() The header name as passed to the constructor. =head2 $header->value() The header value as passed to the constructor. =head2 $header->as_string( charset => $charset ) Returns the header name and value with any necessary MIME encoding and folding. The C parameter specifies what character set to use for MIME-encoding non-ASCII values. This defaults to "utf8". The charset name must be one recognized by the L module. =head2 $header->stream_to( output => $output, charset => ... ) This method will send the stringified header to the specified output. The output can be a subroutine reference, a filehandle, or an object with a C method. The output may be sent as a single string, as a list of strings, or via multiple calls to the output. See the C method for documentation on the C parameter. =head1 ROLES This class does the C role. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Headers.pm0000644000175000017500000004073712653205401017335 0ustar autarchautarchpackage Courriel::Headers; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Header; use Courriel::Header::ContentType; use Courriel::Header::Disposition; use Courriel::Types qw( ArrayRef Defined HashRef HeaderArray NonEmptyStr Str Streamable StringRef ); use Encode qw( decode ); use MIME::Base64 qw( decode_base64 ); use MIME::QuotedPrint qw( decode_qp ); use MooseX::Params::Validate qw( pos_validated_list validated_list ); use Scalar::Util qw( blessed reftype ); use Moose; use MooseX::StrictConstructor; with 'Courriel::Role::Streams' => { -exclude => ['stream_to'] }; has _headers => ( traits => ['Array'], is => 'ro', isa => HeaderArray, default => sub { [] }, init_arg => 'headers', handles => { headers => 'elements', }, ); # The _key_indices field, along with all the complicated code to # get/add/remove headers below, is necessary because RFC 5322 says: # # However, for the purposes of this specification, header fields SHOULD NOT # be reordered when a message is transported or transformed. More # importantly, the trace header fields and resent header fields MUST NOT be # reordered, and SHOULD be kept in blocks prepended to the message. # # So we store headers as an array ref. When we add additional values for a # header, we will put them after the last header of the same name in the array # ref. If no such header exists yet, then we just put them at the end of the # arrayref. has _key_indices => ( traits => ['Hash'], isa => HashRef [ ArrayRef [NonEmptyStr] ], init_arg => undef, lazy => 1, builder => '_build_key_indices', clearer => '_clear_key_indices', handles => { __key_indices_for => 'get', }, ); override BUILDARGS => sub { my $class = shift; my $p = super(); return $p unless $p->{headers}; # Could this be done as a coercion for the HeaderArray type? Maybe, but # it'd probably need structured types, which seems like as much of a # hassle as just doing this. if ( reftype( $p->{headers} ) eq 'ARRAY' ) { my $headers = $p->{headers}; ## no critic (ControlStructures::ProhibitCStyleForLoops) for ( my $i = 1; $i < @{$headers}; $i += 2 ) { next if blessed( $headers->[ $i - 1 ] ); my $name = $headers->[ $i - 1 ]; next unless defined $name; $headers->[$i] = $class->_inflate_header( $name, $headers->[$i] ); } } elsif ( reftype( $p->{headers} ) eq 'HASH' ) { for my $name ( keys %{ $p->{headers} } ) { next if blessed( $p->{headers}{$name} ); $p->{headers}{$name} = $class->_inflate_header( $name, $p->{headers}{$name} ); } } return $p; }; sub _inflate_header { my $class = shift; my $name = shift; my $value = shift; my ( $header_class, $method ) = lc $name eq 'content-type' ? ( 'Courriel::Header::ContentType', 'new_from_value' ) : lc $name eq 'content-disposition' ? ( 'Courriel::Header::Disposition', 'new_from_value' ) : ( 'Courriel::Header', 'new' ); return $header_class->$method( name => $name, value => $value, ); } sub _build_key_indices { my $self = shift; my $headers = $self->_headers; my %indices; ## no critic (ControlStructures::ProhibitCStyleForLoops) for ( my $i = 0; $i < @{$headers}; $i += 2 ) { push @{ $indices{ lc $headers->[$i] } }, $i + 1; } return \%indices; } { my @spec = ( { isa => NonEmptyStr } ); sub get { my $self = shift; my ($name) = pos_validated_list( \@_, @spec, ); return @{ $self->_headers }[ $self->_key_indices_for($name) ]; } } { my @spec = ( { isa => NonEmptyStr } ); sub get_values { my $self = shift; my ($name) = pos_validated_list( \@_, @spec, ); return map { $_->value } @{ $self->_headers }[ $self->_key_indices_for($name) ]; } } sub _key_indices_for { my $self = shift; my $name = shift; return @{ $self->__key_indices_for( lc $name ) || [] }; } { my @spec = ( { isa => NonEmptyStr }, { isa => Defined }, ); sub add { my $self = shift; my ( $name, $value ) = pos_validated_list( \@_, @spec, ); my $headers = $self->_headers; my $last_index = ( $self->_key_indices_for($name) )[-1]; my $header = blessed($value) && $value->isa('Courriel::Header') ? $value : $self->_inflate_header( $name, $value ); if ($last_index) { splice @{$headers}, $last_index + 1, 0, ( $name => $header ); } else { push @{$headers}, ( $name => $header ); } $self->_clear_key_indices; return; } } { my @spec = ( { isa => NonEmptyStr }, { isa => Defined }, ); # Used to add things like Resent or Received headers ## no critic (Subroutines::ProhibitBuiltinHomonyms) sub unshift { my $self = shift; my ( $name, $value ) = pos_validated_list( \@_, { isa => NonEmptyStr }, ( { isa => Defined } ) x ( @_ - 1 ), MX_PARAMS_VALIDATE_NO_CACHE => 1, ); my $headers = $self->_headers; my $header = blessed($value) && $value->isa('Courriel::Header') ? $value : $self->_inflate_header( $name, $value ); unshift @{$headers}, ( $name => $header ); return; } } { my @spec = ( { isa => NonEmptyStr }, ); sub remove { my $self = shift; my ($name) = pos_validated_list( \@_, @spec, ); my $headers = $self->_headers; for my $idx ( reverse $self->_key_indices_for($name) ) { splice @{$headers}, $idx - 1, 2; } $self->_clear_key_indices; return; } } { my @spec = ( { isa => NonEmptyStr }, { isa => Defined }, ); sub replace { my $self = shift; my ( $name, $value ) = pos_validated_list( \@_, @spec, ); $self->remove($name); $self->add( $name => $value ); return; } } { my $horiz_text = qr/[^\x0a\x0d]/; my $horiz_ws = qr/[ \t]/; my $line_re = qr/ (?: ([^\s:][^:\n\r]*) # a header name : # followed by a colon $horiz_ws* ($horiz_text*) # header value - can be empty ) | $horiz_ws+(\S$horiz_text*)? # continuation line /x; my @spec = ( text => { isa => StringRef, coerce => 1 }, ); sub parse { my $class = shift; my ($text) = validated_list( \@_, @spec, ); my @headers; $class->_maybe_fix_broken_headers($text); while ( ${$text} =~ /\G${line_re}$Courriel::Helpers::LINE_SEP_RE/gc ) { if ( defined $1 ) { push @headers, $1, $2; } else { die 'Header text contains a continuation line before a header name has been seen.' unless @headers; $headers[-1] //= q{}; # RFC 5322 says: # # Runs of FWS, comment, or CFWS that occur between lexical tokens in a # structured header field are semantically interpreted as a single # space character. $headers[-1] .= q{ } if length $headers[-1]; $headers[-1] .= $3 if defined $3; } } my $pos = pos ${$text} // 0; if ( $pos != length ${$text} ) { my @lines = split $Courriel::Helpers::LINE_SEP_RE, substr( ${$text}, 0, $pos ); my $count = ( scalar @lines ) + 1; my $line = ( split $Courriel::Helpers::LINE_SEP_RE, ${$text} ) [ $count - 1 ]; die defined $line ? "Found an unparseable chunk in the header text starting at line $count:\n $line" : 'Could not parse headers at all'; } ## no critic (ControlStructures::ProhibitCStyleForLoops) for ( my $i = 1; $i < @headers; $i += 2 ) { $headers[$i] = $class->_mime_decode( $headers[$i] ); } return $class->new( headers => \@headers ); } } sub _maybe_fix_broken_headers { my $class = shift; my $text = shift; # Some broken email messages have a newline in the headers that isn't # acting as a continuation, it's just an arbitrary line break. See # t/data/stress-test/mbox_mime_applemail_1xb.txt ${$text} =~ s/$Courriel::Helpers::LINE_SEP_RE([^\s:][^:]+$Courriel::Helpers::LINE_SEP_RE)/$1/g; return; } { my @spec = ( output => { isa => Streamable, coerce => 1 }, skip => { isa => ArrayRef [NonEmptyStr], default => [] }, charset => { isa => NonEmptyStr, default => 'utf8' }, ); sub stream_to { my $self = shift; my ( $output, $skip, $charset ) = validated_list( \@_, @spec ); my %skip = map { lc $_ => 1 } @{$skip}; for my $header ( grep { blessed($_) } @{ $self->_headers } ) { next if $skip{ lc $header->name }; $header->stream_to( charset => $charset, output => $output ); } return; } } sub as_string { my $self = shift; my $string = q{}; $self->stream_to( output => $self->_string_output( \$string ), @_ ); return $string; } { my $mime_word = qr/ (?: =\? # begin encoded word (?[-0-9A-Za-z_]+) # charset (encoding) (?:\*[A-Za-z]{1,8}(?:-[A-Za-z]{1,8})*)? # language (RFC 2231) \? (?[QqBb]) # encoding type \? (?.*?) # Base64-encoded contents \?= # end encoded word | (?\S+) ) (?[ \t]+)? /x; sub _mime_decode { my $self = shift; my $text = shift; return $text unless $text =~ /=\?[\w-]+\?[BQ]\?/i; my @chunks; # If a MIME encoded word is followed by _another_ such word, we ignore any # intervening whitespace, otherwise we preserve the whitespace between a # MIME encoded word and an unencoded word. See RFC 2047 for details on # this. while ( $text =~ /\G$mime_word/g ) { if ( defined $+{charset} ) { push @chunks, { content => $self->_decode_one_word( @+{ 'charset', 'encoding', 'content' } ), ws => $+{ws}, is_mime => 1, }; } else { push @chunks, { content => $+{unencoded}, ws => $+{ws}, is_mime => 0, }; } } my $result = q{}; for my $i ( 0 .. $#chunks ) { $result .= $chunks[$i]{content}; $result .= ( $chunks[$i]{ws} // q{} ) unless $chunks[$i]{is_mime} && $chunks[ $i + 1 ] && $chunks[ $i + 1 ]{is_mime}; } return $result; } } sub _decode_one_word { my $self = shift; my $charset = shift; my $encoding = shift; my $content = shift; if ( uc $encoding eq 'B' ) { return decode( $charset, decode_base64($content) ); } else { $content =~ tr/_/ /; return decode( $charset, decode_qp($content) ); } } __PACKAGE__->meta->make_immutable; 1; # ABSTRACT: The headers for an email part __END__ =pod =head1 NAME Courriel::Headers - The headers for an email part =head1 VERSION version 0.40 =head1 SYNOPSIS my $email = Courriel->parse( text => ... ); my $headers = $email->headers; print "$_\n" for $headers->get('Received'); =head1 DESCRIPTION This class represents the headers of an email. Any sub part of an email can have its own headers, so every part has an associated object representing its headers. This class makes no distinction between top-level headers and headers for a sub part. Each individual header name/value pair is represented internally by a L object. Some headers have their own special subclass. These are: =over 4 =item * Content-Type This is stored as a L object. =item * Content-Disposition This is stored as a L object. =back =encoding utf-8 =head1 API This class supports the following methods: =head2 Courriel::Headers->parse( ... ) This method creates a new object by parsing a string. It accepts the following parameters: =over 4 =item * text The text to parse. This can either be a plain scalar or a reference to a scalar. If you pass a reference, the underlying scalar may be modified. =back Header parsing unfolds folded headers, and decodes any MIME-encoded values as described in RFC 2047. Parsing also decodes header attributes encoded as described in RFC 2231. =head2 Courriel::Headers->new( headers => [ ... ] ) This method creates a new object. It accepts one parameter, C, which should be an array reference of header names and values. A given header key can appear multiple times. This object does not (yet, perhaps) enforce RFC restrictions on repetition of certain headers. Header order is preserved, per RFC 5322. =head2 $headers->get($name) Given a header name, this returns a list of the L objects found for the header. Each occurrence of the header is returned as a separate object. =head2 $headers->get_values($name) Given a header name, this returns a list of the string values found for the header. Each occurrence of the header is returned as a separate string. =head2 $headers->add( $name => $value ) Given a header name and value, this adds the headers to the object. If any of the headers already have values in the object, then new values are added after the existing values, rather than at the end of headers. The value can be provided as a string or a L object. =head2 $headers->unshift( $name => $value ) This is like C, but this pushes the headers onto the front of the internal headers array. This is useful if you are adding "Received" headers, which per RFC 5322, should always be added at the I of the headers. The value can be provided as a string or a L object. =head2 $headers->remove($name) Given a header name, this removes all instances of that header from the object. =head2 $headers->replace( $name => $value ) A shortcut for calling C and C. The value can be provided as a string or a L object. =head2 $headers->as_string( skip => ...., charset => ... ) This returns a string representing the headers in the object. The values will be folded and/or MIME-encoded as needed. The C parameter should be an array reference containing the name of headers that should be skipped. This parameter is optional, and the default is to include all headers. The C parameter specifies what character set to use for MIME-encoding non-ASCII values. This defaults to "utf8". The charset name must be one recognized by the L module. MIME encoding is always done using the "B" (Base64) encoding, never the "Q" encoding. =head2 $headers->stream_to( output => $output, skip => ...., charset => ... ) This method will send the stringified headers to the specified output. See the C method for documentation on the C and C parameters. =head1 ROLES This class does the C role. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Role/0000775000175000017500000000000012653205401016314 5ustar autarchautarchCourriel-0.40/lib/Courriel/Role/Streams.pm0000644000175000017500000000142412653205401020267 0ustar autarchautarchpackage Courriel::Role::Streams; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Types qw( Streamable ); use MooseX::Params::Validate qw( validated_list ); use Moose::Role; { my @spec = ( output => { isa => Streamable, coerce => 1 } ); sub stream_to { my $self = shift; my ($output) = validated_list( \@_, @spec, ); $self->_stream_to($output); return; } } sub as_string { my $self = shift; my $string = q{}; $self->stream_to( output => $self->_string_output( \$string ) ); return $string; } sub _string_output { my $self = shift; my $stringref = shift; my $string = q{}; return sub { ${$stringref} .= $_ for @_ }; } 1; Courriel-0.40/lib/Courriel/Role/HeaderWithAttributes.pm0000644000175000017500000000612212653205401022744 0ustar autarchautarchpackage Courriel::Role::HeaderWithAttributes; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::HeaderAttribute; use Courriel::Helpers qw( parse_header_with_attributes ); use Courriel::Types qw( HashRef NonEmptyStr ); use MooseX::Params::Validate qw( pos_validated_list validated_list ); use Scalar::Util qw( blessed reftype ); use MooseX::Role::Parameterized; parameter main_value_key => ( isa => NonEmptyStr, required => 1, ); parameter main_value_method => ( isa => NonEmptyStr, ); has _attributes => ( traits => ['Hash'], is => 'ro', isa => HashRef ['Courriel::HeaderAttribute'], init_arg => 'attributes', default => sub { {} }, handles => { attributes => 'elements', _attribute => 'get', _set_attribute => 'set', _has_attributes => 'count', }, ); around BUILDARGS => sub { my $orig = shift; my $class = shift; my $p = $class->$orig(@_); return $p unless $p->{attributes} && reftype( $p->{attributes} ) eq 'HASH'; for my $name ( keys %{ $p->{attributes} } ) { my $lc_name = lc $name; $p->{attributes}{$lc_name} = delete $p->{attributes}{$name}; next if blessed( $p->{attributes}{$lc_name} ); $p->{attributes}{$lc_name} = Courriel::HeaderAttribute->new( name => $name, value => $p->{attributes}{$name}, ); } return $p; }; sub attribute { my $self = shift; my $key = shift; return unless defined $key; return $self->_attribute( lc $key ); } { my @spec = ( { isa => NonEmptyStr } ); sub attribute_value { my $self = shift; my ($name) = pos_validated_list( \@_, @spec ); my $attr = $self->attribute($name); return $attr ? $attr->value : undef; } } sub _attributes_as_string { my $self = shift; my $attr = $self->_attributes; return join '; ', map { $attr->{$_}->as_string } sort keys %{$attr}; } { my @spec = ( name => { isa => NonEmptyStr, optional => 1 }, value => { isa => NonEmptyStr }, ); role { my $p = shift; my $main_value_key = $p->main_value_key; method new_from_value => sub { my $class = shift; my ( $name, $value ) = validated_list( \@_, @spec ); my ( $main_value, $attributes ) = parse_header_with_attributes($value); my %p = ( value => $value, $main_value_key => $main_value, attributes => $attributes, ); $p{name} = $name if defined $name; return $class->new(%p); }; my $main_value_meth = $p->main_value_method || $p->main_value_key; method as_header_value => sub { my $self = shift; my $string = $self->$main_value_meth; if ( $self->_has_attributes ) { $string .= '; '; $string .= $self->_attributes_as_string; } return $string; }; } } 1; Courriel-0.40/lib/Courriel/Role/Part.pm0000644000175000017500000000360612653205401017563 0ustar autarchautarchpackage Courriel::Role::Part; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Header::ContentType; use Courriel::Header::Disposition; use Courriel::Types qw( NonEmptyStr ); use Moose::Role; with 'Courriel::Role::Streams'; requires qw( _stream_content ); has headers => ( is => 'rw', writer => '_set_headers', does => 'Courriel::Headers', required => 1, ); has container => ( is => 'rw', writer => '_set_container', isa => 'Courriel::Part::Multipart', weak_ref => 1, ); has content_type => ( is => 'ro', isa => 'Courriel::Header::ContentType', lazy => 1, builder => '_build_content_type', predicate => '_has_content_type', handles => [qw( mime_type charset has_charset )], ); after BUILD => sub { my $self = shift; $self->_maybe_set_content_type_in_headers; return; }; after _set_headers => sub { my $self = shift; $self->_maybe_set_content_type_in_headers; return; }; sub _maybe_set_content_type_in_headers { my $self = shift; return unless $self->_has_content_type; $self->headers->replace( 'Content-Type' => $self->content_type ); } ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines) sub _stream_to { my $self = shift; my $output = shift; $self->headers->stream_to( output => $output ); $output->($Courriel::Helpers::CRLF); $self->_stream_content($output); return; } ## use critic; { my $fake_ct = Courriel::Header::ContentType->new_from_value( name => 'Content-Type', value => 'text/plain' ); sub _build_content_type { my $self = shift; my @ct = $self->headers->get('Content-Type'); if ( @ct > 1 ) { die 'This part defines more than one Content-Type header.'; } return $ct[0] // $fake_ct; } } 1; Courriel-0.40/lib/Courriel/Header/0000775000175000017500000000000012653205401016603 5ustar autarchautarchCourriel-0.40/lib/Courriel/Header/ContentType.pm0000644000175000017500000001221012653205401021407 0ustar autarchautarchpackage Courriel::Header::ContentType; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Types qw( Maybe NonEmptyStr ); use Moose; use MooseX::StrictConstructor; extends 'Courriel::Header'; with 'Courriel::Role::HeaderWithAttributes' => { main_value_key => 'mime_type', main_value_method => '_original_mime_type', }; has '+value' => ( required => 0, lazy => 1, builder => 'as_header_value', ); has '+name' => ( default => 'Content-Type', ); has mime_type => ( is => 'ro', isa => NonEmptyStr, required => 1, ); has _original_mime_type => ( is => 'ro', isa => NonEmptyStr, required => 1, ); has charset => ( is => 'ro', isa => Maybe [NonEmptyStr], init_arg => undef, lazy => 1, builder => '_build_charset', ); around BUILDARGS => sub { my $orig = shift; my $class = shift; my $p = $class->$orig(@_); $p->{name} = 'Content-Type' unless exists $p->{name}; return unless defined $p->{mime_type}; $p->{_original_mime_type} = $p->{mime_type}; $p->{mime_type} = lc $p->{mime_type}; return $p; }; sub _build_charset { my $self = shift; return unless exists $self->_attributes()->{charset}; return $self->_attributes()->{charset}->value(); } sub is_binary { my $self = shift; return defined $self->charset() && $self->charset() ne 'binary' ? 0 : 1; } __PACKAGE__->meta()->make_immutable(); 1; # ABSTRACT: The content type for an email part __END__ =pod =head1 NAME Courriel::Header::ContentType - The content type for an email part =head1 VERSION version 0.40 =head1 SYNOPSIS my $ct = $part->content_type(); print $ct->mime_type(); print $ct->charset(); my %attr = $ct->attributes(); while ( my ( $k, $v ) = each %attr ) { print "$k => $v\n"; } =head1 DESCRIPTION This class represents the contents of a "Content-Type" header attached to an email part. Such headers always include a mime type, and may also include additional information such as a charset or other attributes. Here are some typical headers: Content-Type: text/plain; charset=utf-8 Content-Type: multipart/alternative; boundary=abcdefghijk Content-Type: image/jpeg; name="Filename.jpg" =encoding utf-8 =head1 API This class supports the following methods: =head2 Courriel::Header::ContentType->new_from_value( ... ) This takes two parameters, C and C. The C is optional, and defaults to "Content-Type". The C is parsed and split up into the mime type and attributes. =head2 Courriel::Header::ContentType->new( ... ) This method creates a new object. It accepts the following parameters: =over 4 =item * name This defaults to 'Content-Type'. =item * value This is the full header value. =item * mime_type A string like "text/plain" or "multipart/alternative". This is required. =item * attributes A hash reference of attributes from the header, such as a boundary, charset, etc. The keys are attribute names and the values can either be strings or L objects. Values which are strings will be inflated into objects by the constructor. This is optional, and can be an empty hash reference or omitted entirely. =back =head2 $ct->name() The header name, usually "Content-Type". =head2 $ct->value() The raw header value. =head2 $ct->mime_type() Returns the mime type value passed to the constructor. However, this value will be in all lower-case, regardless of the original casing passed to the constructor. =head2 $ct->charset() Returns the charset for the content type, which will be the value found in the C, if one exists. =head2 $ct->attributes() Returns a hash (not a reference) of the attributes passed to the constructor. Attributes are L objects. The keys of the hash are all lower case, though the original casing is preserved in the C returned by the L object. =head2 $ct->is_binary() Returns true unless the attachment looks like text data. Currently, this means that is has a charset defined and the charset is not "binary". =head2 $ct->attribute($key) Given a key, returns the named L object. Obviously, this value can be C if the attribute doesn't exist. Name lookup is case-insensitive. =head2 $ct->attribute_value($key) Given a key, returns the named attribute's value as a string. Obviously, this value can be C if the attribute doesn't exist. Name lookup is case-insensitive. The attribute is a L object. =head2 $ct->as_header_value() Returns the object as a string suitable for a header value (but not folded). Note that this uses the original casing of the mime type as passed to the constructor. =head1 EXTENDS This class extends L. =head1 ROLES This class does the C role. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel/Header/Disposition.pm0000644000175000017500000001421012653205401021441 0ustar autarchautarchpackage Courriel::Header::Disposition; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Types qw( Bool Maybe NonEmptyStr ); use DateTime; use DateTime::Format::Mail; use MooseX::Params::Validate qw( validated_list ); use Moose; use MooseX::StrictConstructor; extends 'Courriel::Header'; with 'Courriel::Role::HeaderWithAttributes' => { main_value_key => 'disposition' }; has '+value' => ( required => 0, lazy => 1, builder => 'as_header_value', ); has disposition => ( is => 'ro', isa => NonEmptyStr, required => 1, ); has is_inline => ( is => 'ro', isa => Bool, init_arg => undef, lazy => 1, default => sub { $_[0]->disposition() ne 'attachment' }, ); has is_attachment => ( is => 'ro', isa => Bool, init_arg => undef, lazy => 1, default => sub { !$_[0]->is_inline() }, ); has filename => ( is => 'ro', isa => Maybe [NonEmptyStr], init_arg => undef, lazy => 1, default => sub { exists $_[0]->_attributes()->{filename} ? $_[0]->_attributes()->{filename}->value() : undef; }, ); { my $parser = DateTime::Format::Mail->new( loose => 1 ); for my $attr (qw( creation_datetime modification_datetime read_datetime )) { ( my $name_in_header = $attr ) =~ s/_/-/g; $name_in_header =~ s/datetime/date/; my $default = sub { my $attr = $_[0]->_attributes()->{$name_in_header}; return unless $attr; my $dt = $parser->parse_datetime( $attr->value() ); $dt->set_time_zone('UTC') if $dt; return $dt; }; has $attr => ( is => 'ro', isa => Maybe ['DateTime'], init_arg => undef, lazy => 1, default => $default, ); } } around BUILDARGS => sub { my $orig = shift; my $class = shift; my $p = $class->$orig(@_); $p->{name} = 'Content-Disposition' unless exists $p->{name}; return $p; }; __PACKAGE__->meta()->make_immutable(); 1; # ABSTRACT: The content disposition for an email part __END__ =pod =head1 NAME Courriel::Header::Disposition - The content disposition for an email part =head1 VERSION version 0.40 =head1 SYNOPSIS my $disp = $part->content_disposition(); print $disp->is_inline(); print $disp->is_attachment(); print $disp->filename(); my %attr = $disp->attributes(); while ( my ( $k, $v ) = each %attr ) { print "$k => $v\n"; } =head1 DESCRIPTION This class represents the contents of a "Content-Disposition" header attached to an email part. Such headers indicate whether or not a part should be considered an attachment or should be displayed to the user directly. This header may also include information about the attachment's filename, creation date, etc. Here are some typical headers: Content-Disposition: inline Content-Disposition: multipart/alternative; boundary=abcdefghijk Content-Disposition: attachment; filename="Filename.jpg" Content-Disposition: attachment; filename="foo-bar.jpg"; creation-date="Tue, 31 May 2011 09:41:13 -0700" =encoding utf-8 =head1 API This class supports the following methods: =head2 Courriel::Header::Disposition->new_from_value( ... ) This takes two parameters, C and C. The C is optional, and defaults to "Content-Disposition". The C is parsed and split up into the disposition and attributes. =head2 Courriel::Header::Disposition->new( ... ) This method creates a new object. It accepts the following parameters: =over 4 =item * name This defaults to 'Content-Type'. =item * value This is the full header value. =item * disposition This should usually either be "inline" or "attachment". In theory, the RFCs allow other values. =item * attributes A hash reference of attributes from the header, such as a filename, creation date, size, etc. The keys are attribute names and the values can either be strings or L objects. Values which are strings will be inflated into objects by the constructor. This is optional, and can be an empty hash reference or omitted entirely. =back =head2 $ct->name() The header name, usually "Content-Disposition". =head2 $ct->value() The raw header value. =head2 $disp->disposition() Returns the disposition value passed to the constructor. =head2 $disp->is_inline() Returns true if the disposition is not equal to "attachment". =head2 $disp->is_attachment() Returns true if the disposition is equal to "attachment". =head2 $disp->filename() Returns the filename found in the attributes, or C. =head2 $disp->creation_datetime(), $disp->last_modified_datetime(), $disp->read_datetime() These methods look for a corresponding attribute ("creation-date", etc.) and return a L object representing that attribute's value, if it exists. =head2 $disp->attributes() Returns a hash (not a reference) of the attributes passed to the constructor. Attributes are L objects. The keys of the hash are all lower case, though the original casing is preserved in the C returned by the L object. =head2 $disp->attribute($key) Given a key, returns the named L object. Obviously, this value can be C if the attribute doesn't exist. Name lookup is case-insensitive. =head2 $disp->attribute_value($key) Given a key, returns the named attribute's value as a string. Obviously, this value can be C if the attribute doesn't exist. Name lookup is case-insensitive. The attribute is a L object. =head2 $disp->as_header_value() Returns the object as a string suitable for a header value (but not folded). =head1 EXTENDS This class extends L. =head1 ROLES This class does the C role. =head1 AUTHOR Dave Rolsky =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/lib/Courriel.pm0000644000175000017500000005175312653205401015762 0ustar autarchautarchpackage Courriel; use 5.10.0; use strict; use warnings; use namespace::autoclean; our $VERSION = '0.40'; use Courriel::Headers; use Courriel::Helpers qw( unique_boundary ); use Courriel::Part::Multipart; use Courriel::Part::Single; use Courriel::Types qw( ArrayRef Bool Headers Maybe Part Str StringRef ); use DateTime; use DateTime::Format::Mail; use DateTime::Format::Natural; use Email::Address; use Encode qw( encode ); use List::AllUtils qw( uniq ); use MooseX::Params::Validate 0.21 qw( validated_list ); use Moose; use MooseX::StrictConstructor; has top_level_part => ( is => 'rw', writer => '_replace_top_level_part', isa => Part, init_arg => 'part', required => 1, handles => [ qw( as_string content_type headers is_multipart stream_to ) ], ); has subject => ( is => 'ro', isa => Maybe [Str], init_arg => undef, lazy => 1, builder => '_build_subject', ); has datetime => ( is => 'ro', isa => 'DateTime', init_arg => undef, lazy => 1, builder => '_build_datetime', ); has _to => ( traits => ['Array'], isa => ArrayRef ['Email::Address'], init_arg => undef, lazy => 1, builder => '_build_to', handles => { to => 'elements', }, ); has _cc => ( traits => ['Array'], isa => ArrayRef ['Email::Address'], init_arg => undef, lazy => 1, builder => '_build_cc', handles => { cc => 'elements', }, ); has from => ( is => 'ro', isa => Maybe ['Email::Address'], init_arg => undef, lazy => 1, builder => '_build_from', ); has _participants => ( traits => ['Array'], isa => ArrayRef ['Email::Address'], init_arg => undef, lazy => 1, builder => '_build_participants', handles => { participants => 'elements', }, ); has _recipients => ( traits => ['Array'], isa => ArrayRef ['Email::Address'], init_arg => undef, lazy => 1, builder => '_build_recipients', handles => { recipients => 'elements', }, ); has plain_body_part => ( is => 'ro', isa => Maybe ['Courriel::Part::Single'], init_arg => undef, lazy => 1, builder => '_build_plain_body_part', ); has html_body_part => ( is => 'ro', isa => Maybe ['Courriel::Part::Single'], init_arg => undef, lazy => 1, builder => '_build_html_body_part', ); sub part_count { my $self = shift; return $self->is_multipart ? $self->top_level_part->part_count : 1; } sub parts { my $self = shift; return $self->is_multipart ? $self->top_level_part->parts : $self->top_level_part; } sub clone_without_attachments { my $self = shift; my $plain_body = $self->plain_body_part; my $html_body = $self->html_body_part; my $headers = $self->headers; if ( $plain_body && $html_body ) { my $ct = Courriel::Header::ContentType->new( mime_type => 'multipart/alternative', attributes => { boundary => unique_boundary }, ); return Courriel->new( part => Courriel::Part::Multipart->new( content_type => $ct, headers => $headers, parts => [ $plain_body, $html_body ], ) ); } elsif ($plain_body) { return Courriel->new( part => Courriel::Part::Single->new( content_type => $plain_body->content_type, headers => $headers, encoding => $plain_body->encoding, encoded_content => $plain_body->encoded_content, ) ); } elsif ($html_body) { return Courriel->new( part => Courriel::Part::Single->new( content_type => $html_body->content_type, headers => $headers, encoding => $html_body->encoding, encoded_content => $html_body->encoded_content, ) ); } die 'Cannot find a text or html body in this email!'; } sub _build_subject { my $self = shift; my $subject = $self->headers->get('Subject'); return $subject ? $subject->value : undef; } { my $mail_parser = DateTime::Format::Mail->new( loose => 1 ); my $natural_parser = DateTime::Format::Natural->new( time_zone => 'UTC' ); sub _build_datetime { my $self = shift; my @possible = ( ( map { $_->value } $self->headers->get('Date') ), ( reverse map { $self->_find_date_received( $_->value ) } $self->headers->get('Received') ), ( map { $_->value } $self->headers->get('Resent-Date') ), ); # Stolen from Email::Date and then modified for my $possible (@possible) { next unless defined $possible && length $possible; my $dt = eval { $mail_parser->parse_datetime($possible) }; unless ($dt) { $dt = $natural_parser->parse_datetime($possible); next unless $natural_parser->success; } $dt->set_time_zone('UTC'); return $dt; } return DateTime->now( time_zone => 'UTC' ); } } # Stolen from Email::Date and modified sub _find_date_received { shift; my $received = shift; return unless defined $received && length $received; $received =~ s/.+;//; return $received; } sub _build_to { my $self = shift; my @addresses = map { Email::Address->parse( $_->value ) } $self->headers->get('To'); return $self->_unique_addresses( \@addresses ); } sub _build_cc { my $self = shift; my @addresses = map { Email::Address->parse( $_->value ) } $self->headers->get('CC'); return $self->_unique_addresses( \@addresses ); } sub _build_from { my $self = shift; my @addresses = Email::Address->parse( map { $_->value } $self->headers->get('From') ); return $addresses[0]; } sub _build_recipients { my $self = shift; my @addresses = ( $self->to, $self->cc ); return $self->_unique_addresses( \@addresses ); } sub _build_participants { my $self = shift; my @addresses = grep {defined} ( $self->from, $self->to, $self->cc ); return $self->_unique_addresses( \@addresses ); } sub _unique_addresses { my $self = shift; my $addresses = shift; my %seen; return [ grep { !$seen{ $_->original }++ } @{$addresses} ]; } sub _build_plain_body_part { my $self = shift; return $self->first_part_matching( sub { $_[0]->mime_type eq 'text/plain' && $_[0]->is_inline; } ); } sub _build_html_body_part { my $self = shift; return $self->first_part_matching( sub { $_[0]->mime_type eq 'text/html' && $_[0]->is_inline; } ); } sub first_part_matching { my $self = shift; my $match = shift; my @parts = $self->top_level_part; ## no critic (ControlStructures::ProhibitCStyleForLoops) for ( my $part = shift @parts; $part; $part = shift @parts ) { return $part if $match->($part); push @parts, $part->parts if $part->is_multipart; } } sub all_parts_matching { my $self = shift; my $match = shift; my @parts = $self->top_level_part; my @match; ## no critic (ControlStructures::ProhibitCStyleForLoops) for ( my $part = shift @parts; $part; $part = shift @parts ) { push @match, $part if $match->($part); push @parts, $part->parts if $part->is_multipart; } return @match; } { my @spec = ( text => { isa => StringRef, coerce => 1 } ); # This is needed for Email::Abstract compatibility but it's a godawful # idea, and even Email::Abstract says not to do this. # # It's much safer to just make a new Courriel object from scratch. sub replace_body { my $self = shift; my ($text) = validated_list( \@_, @spec, ); my $part = Courriel::Part::Single->new( headers => $self->headers, encoded_content => $text, ); $self->_replace_top_level_part($part); return; } } { my @spec = ( text => { isa => StringRef, coerce => 1 }, is_character => { isa => Bool, default => 0 }, ); sub parse { my $class = shift; my ( $text, $is_character ) = validated_list( \@_, @spec, ); if ($is_character) { ${$text} = encode( 'UTF-8', ${$text} ); } return $class->new( part => $class->_parse($text) ); } } sub _parse { my $class = shift; my $text = shift; my ( $sep_idx, $headers ) = $class->_parse_headers($text); substr( ${$text}, 0, $sep_idx, q{} ); return $class->_parse_parts( $text, $headers ); } sub _parse_headers { my $class = shift; my $text = shift; my $header_text; my $sep_idx; # We want to ignore mbox message separators - this is a pretty lax parser, # but we may find broken lines. The key is that it starts with From # followed by space, not a colon. ${$text} =~ s/^From\s+.+$Courriel::Helpers::LINE_SEP_RE//; # Some broken emails may split the From line in an arbitrary spot ${$text} =~ s/^[^:]+$Courriel::Helpers::LINE_SEP_RE//g; if ( ${$text} =~ /^(.+?)($Courriel::Helpers::LINE_SEP_RE)\g{2}/s ) { $header_text = $1 . $2; $sep_idx = ( length $header_text ) + ( length $2 ); } else { return ( 0, Courriel::Headers::->new ); } my $headers = Courriel::Headers::->parse( text => \$header_text, ); return ( $sep_idx, $headers ); } { my $fake_ct = Courriel::Header::ContentType->new_from_value( name => 'Content-Type', value => 'text/plain' ); sub _parse_parts { my $class = shift; my $text = shift; my $headers = shift; my @ct = $headers->get('Content-Type'); if ( @ct > 1 ) { die 'This email defines more than one Content-Type header.'; } my $ct = $ct[0] // $fake_ct; if ( $ct->mime_type !~ /^multipart/i ) { return Courriel::Part::Single->new( headers => $headers, encoded_content => $text, ); } return $class->_parse_multipart( $text, $headers, $ct ); } } sub _parse_multipart { my $class = shift; my $text = shift; my $headers = shift; my $ct = shift; my $boundary = $ct->attribute_value('boundary'); die q{The message's mime type claims this is a multipart message (} . $ct->mime_type . q{) but it does not specify a boundary.} unless defined $boundary && length $boundary; my ( $preamble, $all_parts, $epilogue ) = ${$text} =~ / (.*?) # preamble ^--\Q$boundary\E\s* (.+) # all parts ^--\Q$boundary\E--\s* (.*) # epilogue /smx; my @part_text; if ( defined $all_parts ) { @part_text = split /^--\Q$boundary\E\s*/m, $all_parts; } unless (@part_text) { ${$text} =~ s/^--\Q$boundary\E\s*//m; push @part_text, ${$text}; } return Courriel::Part::Multipart->new( headers => $headers, ( defined $preamble && length $preamble && $preamble =~ /\S/ ? ( preamble => $preamble ) : () ), ( defined $epilogue && length $epilogue && $epilogue =~ /\S/ ? ( epilogue => $epilogue ) : () ), boundary => $boundary, parts => [ map { $class->_parse( \$_ ) } @part_text ], ); } __PACKAGE__->meta->make_immutable; 1; # ABSTRACT: High level email parsing and manipulation __END__ =pod =head1 NAME Courriel - High level email parsing and manipulation =head1 VERSION version 0.40 =head1 SYNOPSIS my $email = Courriel->parse( text => $raw_email ); print $email->subject; print $_->address for $email->participants; print $email->datetime->year; if ( my $part = $email->plain_body_part ) { print $part->content; } =head1 DESCRIPTION This class exists to provide a high level API for working with emails, particular for processing incoming email. It is primarily a wrapper around the other classes in the Courriel distro, especially L, L, and L. If you need lower level information about an email, it should be available from one of these classes. =encoding utf-8 =head1 API This class provides the following methods: =head2 Courriel->parse( text => $raw_email, is_character => 0|1 ) This parses the given text and returns a new Courriel object. The text can be provided as a string or a reference to a string. If you pass a reference, then the scalar underlying the reference I be modified, so don't pass in something you don't want modified. By default, Courriel expects that content passed in text is binary data. This means that it has not been decoded into utf-8 with C or by using a C<:encoding(UTF-8)> IO layer. In practice, this doesn't matter for most emails, since they either contain only ASCII data or they actually do contain binary (non-character) data. However, if an email is using the 8bit Content-Transfer-Encoding, then this does matter. If the email has already been decoded, you must set C to a true value. It's safest to simply pass binary data to Courriel and let it handle decoding internally. =head2 $email->parts() Returns an array (not a reference) of the parts this email contains. =head2 $email->part_count() Returns the number of parts this email contains. =head2 $email->is_multipart() Returns true if the top-level part is a multipart part, false otherwise. =head2 $email->top_level_part() Returns the actual top level part for the object. You're probably better off just calling C<< $email->parts() >> most of the time, since when the email is multipart, the top level part is just a container. =head2 $email->subject() Returns the email's Subject header value, or C if it doesn't have one. =head2 $email->datetime() Returns a L object for the email. The DateTime object is always in the "UTC" time zone. This uses the Date header by default one. Otherwise it looks at the date in each Received header, and then it looks for a Resent-Date header. If none of these exists, it just returns C<< DateTime->now() >>. =head2 $email->from() This returns a single L object based on the From header of the email. If the email has no From header or if the From header is broken, it returns C. =head2 $email->participants() This returns a list of L objects, one for each unique participant in the email. This includes any address in the From, To, or CC headers. Just like with the From header, broken addresses will not be included. =head2 $email->recipients() This returns a list of L objects, one for each unique recipient in the email. This includes any address in the To or CC headers. Just like with the From header, broken addresses will not be included. =head2 $email->to() This returns a list of L objects, one for each unique address in the To header. Just like with the From header, broken addresses will not be included. =head2 $email->cc() This returns a list of L objects, one for each unique address in the CC header. Just like with the From header, broken addresses will not be included. =head2 $email->plain_body_part() This returns the first L object in the email with a mime type of "text/plain" and an inline disposition, if one exists. =head2 $email->html_body_part() This returns the first L object in the email with a mime type of "text/html" and an inline disposition, if one exists. =head2 $email->clone_without_attachments() Returns a new Courriel object that only contains inline parts from the original email, effectively removing all attachments. =head2 $email->first_part_matching( sub { ... } ) Given a subroutine reference, this method calls that subroutine for each part in the email, in a depth-first search. The subroutine receives the part as its only argument. If it returns true, this method returns that part. =head2 $email->all_parts_matching( sub { ... } ) Given a subroutine reference, this method calls that subroutine for each part in the email, in a depth-first search. The subroutine receives the part as its only argument. If it returns true, this method includes that part. This method returns all of the parts that match the subroutine. =head2 $email->content_type() Returns the L object associated with the email. =head2 $email->headers() Returns the L object for this email. =head2 $email->stream_to( output => $output ) This method will send the stringified email to the specified output. The output can be a subroutine reference, a filehandle, or an object with a C method. The output may be sent as a single string, as a list of strings, or via multiple calls to the output. For large emails, streaming can be much more memory efficient than generating a single string in memory. =head2 $email->as_string() Returns the email as a string, along with its headers. Lines will be terminated with "\r\n". =head1 ROBUSTNESS PRINCIPLE Courriel aims to respect the common Internet robustness principle (aka Postel's law). Courriel is conservative in the output it generates, and liberal in what it accepts. When parsing, the goal is to never die and always return as much information as possible. Any input that causes the C<< Courriel->parse() >> to die means there's a bug in the parser. Please report these bugs. Conversely, Courriel aims to respect all relevant RFCs in its output, except when it preserves the original data in a parsed email. If you're using L to create emails from scratch, any output that isn't RFC-compliant is a bug. =head1 FUTURE PLANS This release is still rough, and I have some plans for additional features: =head2 More methods for walking all parts Some more methods for walking/collecting multiple parts would be useful. =head2 More? Stay tuned for details. =head1 WHY DID I WRITE THIS MODULE? There a lot of email modules/distros on CPAN. Why didn't I use/fix one of them? =over 4 =item * L This one probably does everything this module does and more, but it's really, really big and complicated, forcing the end user to make a lot of choices just to get started. If you need it, it's great, but I generally find it to be too much module for me. =item * L and L These are surprisingly B simple. They suffer from a problematic API (too high level in some spots, too low in others), and a poor separation of concerns. I've hacked on these enough to know that I can never make them do what I want. =item * Everything Else There's a lot of other email modules on CPAN, but none of them really seem any better than the ones mentioned above. =back =head1 CREDITS This module rips some chunks of code from a few other places, notably several of the Email suite modules. =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 DONATIONS If you'd like to thank me for the work I've done on this module, please consider making a "donation" to me via PayPal. I spend a lot of free time creating free software, and would appreciate any support you'd care to offer. Please note that B in order for me to continue working on this particular software. I will continue to do so, inasmuch as I have in the past, for as long as it interests me. Similarly, a donation made in this way will probably not make me work on this software much more, unless I get so many donations that I can consider working on free software full time, which seems unlikely at best. To donate, log into PayPal and send money to autarch@urth.org or use the button on this page: L =head1 AUTHOR Dave Rolsky =head1 CONTRIBUTORS =for stopwords Gregory Oschwald Ricardo Signes Zbigniew Łukasiak =over 4 =item * Gregory Oschwald =item * Ricardo Signes =item * Zbigniew Łukasiak =back =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut Courriel-0.40/META.json0000644000175000017500000007375212653205401014516 0ustar autarchautarch{ "abstract" : "High level email parsing and manipulation", "author" : [ "Dave Rolsky " ], "dynamic_config" : 0, "generated_by" : "Dist::Zilla version 5.043, CPAN::Meta::Converter version 2.150005", "license" : [ "artistic_2" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "Courriel", "prereqs" : { "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "develop" : { "requires" : { "Code::TidyAll" : "0.24", "File::Spec" : "0", "IO::Handle" : "0", "IPC::Open3" : "0", "Perl::Critic" : "1.123", "Perl::Tidy" : "20140711", "Pod::Coverage::Moose" : "0", "Pod::Coverage::TrustPod" : "0", "Test::CPAN::Changes" : "0.19", "Test::CPAN::Meta::JSON" : "0.16", "Test::Code::TidyAll" : "0.24", "Test::Mojibake" : "0", "Test::More" : "0.88", "Test::Pod" : "1.41", "Test::Pod::Coverage" : "1.08", "Test::Pod::LinkCheck" : "0", "Test::Pod::No404s" : "0", "Test::Spelling" : "0.12", "Test::Version" : "1" } }, "runtime" : { "requires" : { "Carp" : "0", "DateTime" : "0", "DateTime::Format::Mail" : "0", "DateTime::Format::Natural" : "0", "Devel::PartialDump" : "0", "Email::Abstract::Plugin" : "0", "Email::Address" : "0", "Email::Address::List" : "0", "Email::MIME::Encodings" : "0", "Email::MessageID" : "0", "Encode" : "0", "Exporter" : "0", "File::Basename" : "0", "File::LibMagic" : "0", "File::Slurp::Tiny" : "0", "List::AllUtils" : "0", "List::MoreUtils" : "0.28", "MIME::Base64" : "0", "MIME::QuotedPrint" : "0", "Moose" : "0", "Moose::Role" : "0", "MooseX::Params::Validate" : "0.21", "MooseX::Role::Parameterized" : "0", "MooseX::StrictConstructor" : "0", "MooseX::Types" : "0", "MooseX::Types::Combine" : "0", "MooseX::Types::Common::String" : "0", "MooseX::Types::Moose" : "0", "Scalar::Util" : "0", "Sub::Exporter" : "0", "namespace::autoclean" : "0", "parent" : "0", "perl" : "v5.10.0", "strict" : "0", "warnings" : "0" } }, "test" : { "recommends" : { "CPAN::Meta" : "2.120900", "Email::Sender" : "0", "Path::Class" : "0" }, "requires" : { "ExtUtils::MakeMaker" : "0", "File::Spec" : "0", "Sys::Hostname" : "0", "Test::Differences" : "0", "Test::Fatal" : "0", "Test::More" : "0.96", "Test::Requires" : "0", "utf8" : "0" } } }, "provides" : { "Courriel" : { "file" : "lib/Courriel.pm", "version" : "0.40" }, "Courriel::Builder" : { "file" : "lib/Courriel/Builder.pm", "version" : "0.40" }, "Courriel::Header" : { "file" : "lib/Courriel/Header.pm", "version" : "0.40" }, "Courriel::Header::ContentType" : { "file" : "lib/Courriel/Header/ContentType.pm", "version" : "0.40" }, "Courriel::Header::Disposition" : { "file" : "lib/Courriel/Header/Disposition.pm", "version" : "0.40" }, "Courriel::HeaderAttribute" : { "file" : "lib/Courriel/HeaderAttribute.pm", "version" : "0.40" }, "Courriel::Headers" : { "file" : "lib/Courriel/Headers.pm", "version" : "0.40" }, "Courriel::Helpers" : { "file" : "lib/Courriel/Helpers.pm", "version" : "0.40" }, "Courriel::Part::Multipart" : { "file" : "lib/Courriel/Part/Multipart.pm", "version" : "0.40" }, "Courriel::Part::Single" : { "file" : "lib/Courriel/Part/Single.pm", "version" : "0.40" }, "Courriel::Role::HeaderWithAttributes" : { "file" : "lib/Courriel/Role/HeaderWithAttributes.pm", "version" : "0.40" }, "Courriel::Role::Part" : { "file" : "lib/Courriel/Role/Part.pm", "version" : "0.40" }, "Courriel::Role::Streams" : { "file" : "lib/Courriel/Role/Streams.pm", "version" : "0.40" }, "Courriel::Types" : { "file" : "lib/Courriel/Types.pm", "version" : "0.40" }, "Courriel::Types::Internal" : { "file" : "lib/Courriel/Types/Internal.pm", "version" : "0.40" }, "Email::Abstract::Courriel" : { "file" : "lib/Email/Abstract/Courriel.pm", "version" : "0.40" } }, "release_status" : "stable", "resources" : { "bugtracker" : { "mailto" : "bug-courriel@rt.cpan.org", "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=Courriel" }, "homepage" : "http://metacpan.org/release/Courriel", "repository" : { "type" : "git", "url" : "git://github.com/autarch/Courriel.git", "web" : "https://github.com/autarch/Courriel" } }, "version" : "0.40", "x_Dist_Zilla" : { "perl" : { "version" : "5.022001" }, "plugins" : [ { "class" : "Dist::Zilla::Plugin::MakeMaker", "config" : { "Dist::Zilla::Role::TestRunner" : { "default_jobs" : 1 } }, "name" : "@DROLSKY/MakeMaker", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Authority", "name" : "@DROLSKY/Authority", "version" : "1.009" }, { "class" : "Dist::Zilla::Plugin::AutoPrereqs", "name" : "@DROLSKY/AutoPrereqs", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::CopyFilesFromBuild", "name" : "@DROLSKY/CopyFilesFromBuild", "version" : "0.151680" }, { "class" : "Dist::Zilla::Plugin::Git::GatherDir", "config" : { "Dist::Zilla::Plugin::GatherDir" : { "exclude_filename" : [ "Build.PL", "LICENSE", "Makefile.PL", "README.md", "cpanfile" ], "exclude_match" : [], "follow_symlinks" : 0, "include_dotfiles" : 0, "prefix" : "", "prune_directory" : [], "root" : "." }, "Dist::Zilla::Plugin::Git::GatherDir" : { "include_untracked" : 0 } }, "name" : "@DROLSKY/Git::GatherDir", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::GitHub::Meta", "name" : "@DROLSKY/GitHub::Meta", "version" : "0.42" }, { "class" : "Dist::Zilla::Plugin::GitHub::Update", "config" : { "Dist::Zilla::Plugin::GitHub::Update" : { "metacpan" : 1 } }, "name" : "@DROLSKY/GitHub::Update", "version" : "0.42" }, { "class" : "Dist::Zilla::Plugin::MetaResources", "name" : "@DROLSKY/MetaResources", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::MetaProvides::Package", "config" : { "Dist::Zilla::Plugin::MetaProvides::Package" : { "finder_objects" : [ { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : "@DROLSKY/MetaProvides::Package/AUTOVIV/:InstallModulesPM", "version" : "5.043" } ] }, "Dist::Zilla::Role::MetaProvider::Provider" : { "inherit_missing" : "1", "inherit_version" : "1", "meta_noindex" : "1" } }, "name" : "@DROLSKY/MetaProvides::Package", "version" : "2.003001" }, { "class" : "Dist::Zilla::Plugin::NextRelease", "name" : "@DROLSKY/NextRelease", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Prereqs", "config" : { "Dist::Zilla::Plugin::Prereqs" : { "phase" : "test", "type" : "requires" } }, "name" : "@DROLSKY/Test::More with subtest", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Prereqs", "config" : { "Dist::Zilla::Plugin::Prereqs" : { "phase" : "develop", "type" : "requires" } }, "name" : "@DROLSKY/Modules for use with tidyall", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::PromptIfStale", "config" : { "Dist::Zilla::Plugin::PromptIfStale" : { "check_all_plugins" : 1, "check_all_prereqs" : 1, "modules" : [], "phase" : "release", "skip" : [ "Dist::Zilla::Plugin::DROLSKY::Contributors", "Dist::Zilla::Plugin::DROLSKY::License", "Dist::Zilla::Plugin::DROLSKY::TidyAll", "Dist::Zilla::Plugin::DROLSKY::VersionProvider" ] } }, "name" : "@DROLSKY/PromptIfStale", "version" : "0.047" }, { "class" : "Dist::Zilla::Plugin::ReadmeAnyFromPod", "config" : { "Dist::Zilla::Role::FileWatcher" : { "version" : "0.006" } }, "name" : "@DROLSKY/README.md in build", "version" : "0.150250" }, { "class" : "Dist::Zilla::Plugin::ReadmeAnyFromPod", "config" : { "Dist::Zilla::Role::FileWatcher" : { "version" : "0.006" } }, "name" : "@DROLSKY/README.md in root", "version" : "0.150250" }, { "class" : "Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable", "name" : "@DROLSKY/Test::Pod::Coverage::Configurable", "version" : "0.05" }, { "class" : "Dist::Zilla::Plugin::Test::PodSpelling", "config" : { "Dist::Zilla::Plugin::Test::PodSpelling" : { "directories" : [], "spell_cmd" : "", "stopwords" : [ "API", "CPAN", "Courriel", "DROLSKY", "DROLSKY's", "DateTime", "Multipart", "PayPal", "PayPal", "Postel", "Rolsky", "Rolsky's", "UTC", "UTF", "ascii", "attribute's", "cid", "distro", "filename", "html", "inline", "lookup", "multipart", "utf", "zh" ], "wordlist" : "Pod::Wordlist" } }, "name" : "@DROLSKY/Test::PodSpelling", "version" : "2.007000" }, { "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs", "name" : "@DROLSKY/Test::ReportPrereqs", "version" : "0.021" }, { "class" : "Dist::Zilla::Plugin::Test::Version", "name" : "@DROLSKY/Test::Version", "version" : "1.05" }, { "class" : "Dist::Zilla::Plugin::ManifestSkip", "name" : "@DROLSKY/ManifestSkip", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::MetaYAML", "name" : "@DROLSKY/MetaYAML", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::License", "name" : "@DROLSKY/License", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::ExtraTests", "name" : "@DROLSKY/ExtraTests", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::ExecDir", "name" : "@DROLSKY/ExecDir", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::ShareDir", "name" : "@DROLSKY/ShareDir", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Manifest", "name" : "@DROLSKY/Manifest", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::CheckVersionIncrement", "name" : "@DROLSKY/CheckVersionIncrement", "version" : "0.121750" }, { "class" : "Dist::Zilla::Plugin::TestRelease", "name" : "@DROLSKY/TestRelease", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::ConfirmRelease", "name" : "@DROLSKY/ConfirmRelease", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::UploadToCPAN", "name" : "@DROLSKY/UploadToCPAN", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed", "name" : "@DROLSKY/CheckPrereqsIndexed", "version" : "0.017" }, { "class" : "Dist::Zilla::Plugin::CPANFile", "name" : "@DROLSKY/CPANFile", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::DROLSKY::Contributors", "name" : "@DROLSKY/DROLSKY::Contributors", "version" : "0.41" }, { "class" : "Dist::Zilla::Plugin::DROLSKY::License", "name" : "@DROLSKY/DROLSKY::License", "version" : "0.41" }, { "class" : "Dist::Zilla::Plugin::DROLSKY::TidyAll", "name" : "@DROLSKY/DROLSKY::TidyAll", "version" : "0.41" }, { "class" : "Dist::Zilla::Plugin::DROLSKY::VersionProvider", "name" : "@DROLSKY/DROLSKY::VersionProvider", "version" : "0.41" }, { "class" : "Dist::Zilla::Plugin::DROLSKY::Git::CheckFor::CorrectBranch", "config" : { "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." } }, "name" : "@DROLSKY/DROLSKY::Git::CheckFor::CorrectBranch", "version" : "0.41" }, { "class" : "Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts", "config" : { "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." } }, "name" : "@DROLSKY/Git::CheckFor::MergeConflicts", "version" : "0.013" }, { "class" : "Dist::Zilla::Plugin::Git::Contributors", "config" : { "Dist::Zilla::Plugin::Git::Contributors" : { "include_authors" : 0, "include_releaser" : 1, "order_by" : "name", "paths" : [ "." ] } }, "name" : "@DROLSKY/Git::Contributors", "version" : "0.018" }, { "class" : "Dist::Zilla::Plugin::InstallGuide", "name" : "@DROLSKY/InstallGuide", "version" : "1.200006" }, { "class" : "Dist::Zilla::Plugin::Meta::Contributors", "name" : "@DROLSKY/Meta::Contributors", "version" : "0.002" }, { "class" : "Dist::Zilla::Plugin::MetaConfig", "name" : "@DROLSKY/MetaConfig", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::MetaJSON", "name" : "@DROLSKY/MetaJSON", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::SurgicalPodWeaver", "config" : { "Dist::Zilla::Plugin::PodWeaver" : { "finder" : [ ":InstallModules", ":ExecFiles" ], "plugins" : [ { "class" : "Pod::Weaver::Plugin::EnsurePod5", "name" : "@CorePrep/EnsurePod5", "version" : "4.012" }, { "class" : "Pod::Weaver::Plugin::H1Nester", "name" : "@CorePrep/H1Nester", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Name", "name" : "Name", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Version", "name" : "Version", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Region", "name" : "prelude", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Generic", "name" : "SYNOPSIS", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Generic", "name" : "DESCRIPTION", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Leftovers", "name" : "Leftovers", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Region", "name" : "postlude", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Authors", "name" : "Authors", "version" : "4.012" }, { "class" : "Pod::Weaver::Section::Contributors", "name" : "Contributors", "version" : "0.009" }, { "class" : "Pod::Weaver::Section::Legal", "name" : "Legal", "version" : "4.012" } ] } }, "name" : "@DROLSKY/SurgicalPodWeaver", "version" : "0.0023" }, { "class" : "Dist::Zilla::Plugin::MojibakeTests", "name" : "@DROLSKY/MojibakeTests", "version" : "0.8" }, { "class" : "Dist::Zilla::Plugin::PodSyntaxTests", "name" : "@DROLSKY/PodSyntaxTests", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Test::CPAN::Changes", "name" : "@DROLSKY/Test::CPAN::Changes", "version" : "0.009" }, { "class" : "Dist::Zilla::Plugin::Test::CPAN::Meta::JSON", "name" : "@DROLSKY/Test::CPAN::Meta::JSON", "version" : "0.004" }, { "class" : "Dist::Zilla::Plugin::Test::Portability", "name" : "@DROLSKY/Test::Portability", "version" : "2.000006" }, { "class" : "Dist::Zilla::Plugin::Test::TidyAll", "name" : "@DROLSKY/Test::TidyAll", "version" : "0.01" }, { "class" : "Dist::Zilla::Plugin::Test::Compile", "config" : { "Dist::Zilla::Plugin::Test::Compile" : { "bail_out_on_fail" : "0", "fail_on_warning" : "author", "fake_home" : 0, "filename" : "xt/author/00-compile.t", "module_finder" : [ ":InstallModules" ], "needs_display" : 0, "phase" : "develop", "script_finder" : [ ":PerlExecFiles" ], "skips" : [] } }, "name" : "@DROLSKY/Test::Compile", "version" : "2.054" }, { "class" : "Dist::Zilla::Plugin::Git::Check", "config" : { "Dist::Zilla::Plugin::Git::Check" : { "untracked_files" : "die" }, "Dist::Zilla::Role::Git::DirtyFiles" : { "allow_dirty" : [ "Build.PL", "CONTRIBUTING.md", "Changes", "LICENSE", "Makefile.PL", "README.md", "cpanfile" ], "allow_dirty_match" : [], "changelog" : "Changes" }, "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." } }, "name" : "@DROLSKY/Git::Check", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::Git::Commit", "config" : { "Dist::Zilla::Plugin::Git::Commit" : { "add_files_in" : [], "commit_msg" : "v%v%n%n%c" }, "Dist::Zilla::Role::Git::DirtyFiles" : { "allow_dirty" : [ "Build.PL", "CONTRIBUTING.md", "Changes", "LICENSE", "Makefile.PL", "README.md", "cpanfile" ], "allow_dirty_match" : [], "changelog" : "Changes" }, "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." }, "Dist::Zilla::Role::Git::StringFormatter" : { "time_zone" : "local" } }, "name" : "@DROLSKY/commit generated files", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::Git::Tag", "config" : { "Dist::Zilla::Plugin::Git::Tag" : { "branch" : null, "changelog" : "Changes", "signed" : 0, "tag" : "v0.40", "tag_format" : "v%v", "tag_message" : "v%v" }, "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." }, "Dist::Zilla::Role::Git::StringFormatter" : { "time_zone" : "local" } }, "name" : "@DROLSKY/Git::Tag", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::Git::Push", "config" : { "Dist::Zilla::Plugin::Git::Push" : { "push_to" : [ "origin" ], "remotes_must_exist" : 1 }, "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." } }, "name" : "@DROLSKY/Git::Push", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::BumpVersionAfterRelease", "config" : { "Dist::Zilla::Plugin::BumpVersionAfterRelease" : { "finders" : [ ":ExecFiles", ":InstallModules" ], "global" : 0, "munge_makefile_pl" : 1 } }, "name" : "@DROLSKY/BumpVersionAfterRelease", "version" : "0.013" }, { "class" : "Dist::Zilla::Plugin::Git::Commit", "config" : { "Dist::Zilla::Plugin::Git::Commit" : { "add_files_in" : [], "commit_msg" : "Bump version after release" }, "Dist::Zilla::Role::Git::DirtyFiles" : { "allow_dirty" : [ "Changes", "dist.ini" ], "allow_dirty_match" : [ "(?^:.+)" ], "changelog" : "Changes" }, "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." }, "Dist::Zilla::Role::Git::StringFormatter" : { "time_zone" : "local" } }, "name" : "@DROLSKY/commit version bump", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::Git::Push", "config" : { "Dist::Zilla::Plugin::Git::Push" : { "push_to" : [ "origin" ], "remotes_must_exist" : 1 }, "Dist::Zilla::Role::Git::Repo" : { "repo_root" : "." } }, "name" : "@DROLSKY/push version bump", "version" : "2.036" }, { "class" : "Dist::Zilla::Plugin::Test::Pod::LinkCheck", "name" : "@DROLSKY/Test::Pod::LinkCheck", "version" : "1.002" }, { "class" : "Dist::Zilla::Plugin::Test::Pod::No404s", "name" : "@DROLSKY/Test::Pod::No404s", "version" : "1.002" }, { "class" : "Dist::Zilla::Plugin::Encoding", "name" : "Encoding", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Prereqs", "config" : { "Dist::Zilla::Plugin::Prereqs" : { "phase" : "runtime", "type" : "requires" } }, "name" : "Prereqs", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Prereqs", "config" : { "Dist::Zilla::Plugin::Prereqs" : { "phase" : "test", "type" : "recommends" } }, "name" : "TestRecommends", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::Prereqs", "config" : { "Dist::Zilla::Plugin::Prereqs" : { "phase" : "develop", "type" : "requires" } }, "name" : "DevelopRequires", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":InstallModules", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":IncModules", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":TestFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":ExtraTestFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":ExecFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":PerlExecFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":ShareFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":MainModule", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":AllFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : ":NoFiles", "version" : "5.043" }, { "class" : "Dist::Zilla::Plugin::FinderCode", "name" : "@DROLSKY/MetaProvides::Package/AUTOVIV/:InstallModulesPM", "version" : "5.043" } ], "zilla" : { "class" : "Dist::Zilla::Dist::Builder", "config" : { "is_trial" : "0" }, "version" : "5.043" } }, "x_authority" : "cpan:DROLSKY", "x_contributors" : [ "Gregory Oschwald ", "Ricardo Signes ", "Zbigniew Łukasiak " ] } Courriel-0.40/tidyall.ini0000644000175000017500000000073212653205401015224 0ustar autarchautarch[PerlTidy] select = **/*.{pl,pm,t,psgi} ignore = t/00-* ignore = t/author-* ignore = t/release-* ignore = blib/**/* ignore = .build/**/* ignore = Courriel-*/**/* argv = --profile=$ROOT/perltidyrc [PerlCritic] select = **/*.{pl,pm,t,psgi} ignore = t/00-* ignore = t/author-* ignore = t/release-* ignore = blib/**/* ignore = .build/**/* ignore = Courriel-*/**/* argv = --profile $ROOT/perlcriticrc --program-extensions .pl --program-extensions .t --program-extensions .psgi Courriel-0.40/Changes0000644000175000017500000003251712653205401014362 0ustar autarchautarch0.40 2016-01-30 - Fixed the stringification of some headers with regards to encoding. The Received header should never be encoded (and thus should never contain non-ASCII). - Fixed headers which contain email addresses (To, From, CC) so that email addresses are properly encoded (I think). The phrase and comment portions of the address can contain encoded-words, but the address itself should never be encoded. Note that per RFC6531 addresses may contain UTF-8, but the MTA must support the SMTPUTF8 extension in order for the mail to be delivered. As of this release, SMTPUTF8 support does not appear to be very widespread, so I would strongly discourage the use of UTF-8 in email addresses! 0.39 2015-08-04 - Changed Email::Abstract::Courriel's ->get_body() method to return the entire email as a string, making it equivalent to -as_string(). This is confusing, but looking at the few instances of code in Email::Transport that call ->get_body(), it seems like that's what this method is expected to do. Reported by Greg Oschwald. RT #106176. 0.38 2015-08-04 - Somewhat screwy release now deleted from PAUSE. 0.37 2015-02-26 - Fixed a test failure when MooseX::Params::Validate 0.21+ is installed. Reported by Slaven Rezic. RT #102382. 0.36 2014-08-15 - Trying to build an email with a header that started with a space caused the header value to be dropped entirely from the generated email. Patch by Greg Oschwald. PR #2. 0.35 2014-05-12 - Replaced all uses of File::Slurp with File::Slurp::Tiny. See RT #95479 for the initial bug report and discussion on why File::Slurp should not be used. 0.34 2014-05-02 - More test fixes - relax the date parsing more. 0.33 2014-04-19 - Fixed tests so they pass with the most recent DateTime::Format::Mail (0.400) as well as older versions. 0.32 2014-04-19 - Courriel parsing is now more liberal and will accept an email with mixed line endings (some newline, some CRLF, etc.). Apparently this happens in the wild (of course it does). Reported by Joseph Crotty. RT #94837. 0.31 2013-04-03 [MISC] - Removed the "this is very alpha" warning from the docs. It's really not very alpha any more. 0.30 2012-08-20 [API CHANGES] - Courriel::Builder no longer exports a bcc() subroutine. Creating Bcc headers in emails does not make any sense whatsoever. See https://metacpan.org/module/Email::Sender::Manual::QuickStart#Hey-wheres-my-Bcc-support- for an explanation of why there is no such thing as a Bcc header. 0.29 2012-03-07 [BUG FIXES] - Courriel now allows an email to have an empty subject when parsing, as does Courriel::Builder. Based on a patch from Zbigniew Łukasiak. 0.28 2012-02-01 [BUG FIXES] - Header attribute names need to be looked up case-insensitively, according to the spec. The original casing is preserved in the Courriel::HeaderAttribute object's name(), method, but looking up an attribute by name on a Courriel::Header object now accepts any casing for the name. 0.27 2011-09-24 [ENHANCEMENTS] - All objects which can stringify now support a ->stream_to API as well. This lets you stream their string output to a sub ref, filehandle, or an object with a ->print() method. If you are dealing with large emails, this API may be more efficient than generating a single string in memory. [API CHANGES] - Renamed the Header->as_header_string and HeaderAttribute->as_header_string methods to as_string, so that all objects have the same stringification API. 0.26 2011-09-19 [BUG FIXES] - Add missing prereq for MooseX::Role::Parameterized. Reported by zby. 0.25 2011-09-15 [BUG FIXES] - When a header value contained any non-ASCII content, Courriel would mistakenly MIME encode the whole value. In some cases, this is okay, but for some header fields it is wrong. For example, when a field contains an email address the actual address portion must be unencoded. 0.24 2011-09-13 [ENHANCEMENTS] - The is_binary flag has been replaced with an is_character flag. This flag defaults to false. Suggested by zby. 0.23 2011-09-13 [ENHANCEMENTS] - Courriel->parse now accepts an is_binary flag so you can pass decoded (utf-8) data as the email text. However, it's probably smarter to simply pass binary data to Courriel and let it do the decoding. The issue was brought up by zby. 0.22 2011-09-13 [BUG FIXES] - Require List::MoreUtils 0.28+, as tests fail with earlier versions. - Added missing prereq on File::Slurp. 0.21 2011-09-12 [API CHANGES] - The ->get_attribute() method for Courriel::ContentType and ::Disposition objects was replaced by ->attribute in 0.20. [ENHANCEMENTS] - Added a new ->get_values() method to Courriel::Headers. This lets you get the header string values directly. - Added a new ->attribute_value() for Courriel::Header::ContentType and ::Disposition. This lets you get the attribute's string value, if the attribute exists. Suggested by zby. [BUG FIXES] - The previous release documented a method ->get_attribute() for Courriel::Header::ContentType and ::Disposition objects. This method was removed in 0.20 and replaced with a method named ->attribute(). 0.20 2011-09-11 [API CHANGES] - The way headers are represented has been changed quite a bit internally. Read on for details. All headers are now represented as Courriel::Header objects instead of plain strings. This means that calling $headers->get('Foo') returns objects. To get the value, you need to call ->value on the individual objects. See Courriel::Header for the new class for headers. - As a corrolary, the Courriel::ContentType and Courriel::Disposition classes have been renamed to Courriel::Header::ContentType and Courriel::Header::Disposition. They are both now subclasses of Courriel::Header. The APIs of these classes have remained mostly the same, except for attribute handling (see below). The old classes are still shipped in the distro, but they die when loaded. This avoids leaving behind old modules which no longer work with newer versions of Courriel. Methods which returned the old object now return the new one. The Courriel::Headers class will return the appropriate object when the header is fetched with $headers->get(). - Header attributes for the Content-Type and Content-Disposition object are now represented as Courriel::HeaderAttribute objects. This is necessary because these attributes may contain information about their character set and language, per RFC2231. [ENHANCEMENTS] - Header attributes with character set and language data per RFC2231 are now parsed properly. Reported by zby. RT #70801. - Header attribute parsing is much laxer and will not die on bad attributes syntax (in most cases). It simply stops parsing and ignores bad data. 0.19 2011-08-21 - Fixed some test failures with older versions of Test::More, which stringify objects passed to is() rather than using their overloading. Reported by Maximilian Gaß. RT #70395. - The Courriel::Disposition methods which return DateTime objects now explicitly set the time zone of the objects to UTC before returning it. 0.18 2011-08-20 - More improvements in handling broken email based on jwang's corpus of broken messages. - Courriel tries a lot harder to find a date for the email. It now looks at all the Received headers, and it also uses DateTime::Format::Natural to parse dates if DateTime::Format::Mail fails. - Courriel handles the charset "unknown-8bit" (by ignoring it and treating it as ASCII). 0.17 2011-08-19 - Email parsing is now much more flexible, and throws fewer exceptions. Ultimately, it's likely that Courriel will never throw an exception from parsing, since email in the wild is often broken, and it's better to return something than just give up. Thanks to jwang of grokbase.com for providing a corpus of broken messages to test against. - The Courriel->plain_body_part() and ->html_body_part() methods ignore the case of an attachment's mime type, per RFC 2045. - The Courriel::ContentType->mime_type() method always returns a value in lower case, but it preserves the original casing when constructing a header value. 0.16 2011-07-21 - Add Courriel->from(), ->to(), and ->cc() methods. - Skip another test which may fail on other people's machines, as File::LibMagic does not return consistent results on all machines. 0.15 2011-06-28 - Skip a test which may fail on other people's machines, as File::LibMagic does not return consistent results on all machines. 0.14 2011-06-25 - An email part with non-text content would still be treated as character data rather than binary data, and its Content-Type header would end up with a charset of us-ascii. This has been fixed, and now you must explicitly ask for a charset in the Content-Type header when creating a Courriel::ContentType object. Note that plain and html body parts created via Courriel::Builder are unaffected, since these always default to UTF-8 as the charset. Reported by ico. RT #69085. - Added Courriel::ContentType->has_charset() and Courriel::ContentType->is_binary() methods. 0.13 2011-06-20 - A multipart email built with Courriel::Builder would have a broken Content-Type header, missing the required boundary attribute. Reported by ico. RT #68694. - If you explicitly passed unencoded content when creating a part (which happens when using Courriel::Builder), that content would be modified so it had CRLF line endings. Now, such content is left untouched. Reported by ico. RT #68695. - When passing encoded content to the Courriel::Part::Single constructor, the constructor used to modify the content so it had CRLF line endings. Now it is left alone. - Note that if you're passing raw content to the Single constructor _and_ setting the transfer encoding to 7bit, 8bit, or binary, then you'll end up with a noncomformant email. However, by default all raw content is base64 encoded. It is strongly recommended that you pass raw content and let Courriel take care of the transfer encoding. 0.12 2011-06-07 [BUG FIXES] - The value returned by Courriel::Part::Single->content() was not decoded to Perl's native utf-8 character set. Similarly, when encoding content for transfer, it was not first transformed to raw bytes. 0.11 2011-06-07 [BUG FIXES] - Courriel::Builder now adds a "MIME-Version: 1.0" header to all emails it creates unless you explicitly set this header, which you probably shouldn't, since the only valid value is "1.0". This is a required header for MIME emails per RFC2045. 0.10 2011-06-07 [BUG FIXES] - When parsing an email, the encoding attribute for parts was not set correctly, and ended up defaulting to 8bit for all parts. Now the encoding is set based on the part's Content-Transfer-Encoding header. 0.09 2011-06-06 [NEW FEATURES] - This distro now ships a plugin for Email::Abstract, meaning you can use Courriel with Email::Sender. 0.08 2011-06-06 [API CHANGES] - The content() and encoded_content() methods for Courriel::Part::Single now return strings, rather than references. This makes the typical use simpler. You can still get the reference directly by calling content_ref() and encoded_content_ref(). [BUG FIXES] - Make sure that any Content-ID header set via Courriel::Builder is formatted properly (the id value should be wrapped in angle brackets). 0.07 2011-06-06 - Some tests were failing because File::LibMagic may return slightly different results on different systems (application/x-perl versus text/x-perl). 0.06 2011-06-05 - Add missing test prereq on File::Slurp. - The clone_without_attachments() method could end up setting the wrong encoding when creating a new single part email. 0.05 2011-06-04 - The clone_without_attachments() method would die when calling on an email that contained both plain and html inline parts. 0.04 2011-06-04 - Add missing prereq on File::LibMagic (needed since 0.02). 0.03 2011-06-04 - The encoding parameter is now always set in a part's headers. 0.02 2011-06-04 - Added all_parts_matching() method to Courriel class. - Added clone_without_attachments() method to Courriel class. - The Courriel::Part::Single attribute raw_content has been renamed as encoded_content. - The text_body_part() method is now called plain_body_part(). - The add() and unshift() methods in Courriel::Headers now accept only one value. - Added Courriel::Headers->replace as a convenience method. - A header with attributes (like Content-Type) can escape values inside a quoted string, like value="foo \" bar". Courriel wasn't unescaping these values. - It is now possible to pass a Courriel::Disposition object explicitly when constructing a Courriel::Part::Single object. The docs said this was possible in 0.01, but the parameter was just ignored. - If a part is created with an explicit content_type and/or disposition object, the part's headers will be updated so that the Content-Type and Content-Disposition match the given object. - The boundary for a Multipart part and the boundary in its ContentType's attributes will always be the same. - All classes now use MooseX::StrictConstructor. - Some hacks to make it possible for Courriel to play nice with Email::Abstract. - Fixed some small doc errors. 0.01 2011-05-31 - First release upon an unsuspecting world. Courriel-0.40/MANIFEST0000644000175000017500000000747312653205401014223 0ustar autarchautarch# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.043. Changes INSTALL LICENSE MANIFEST META.json META.yml Makefile.PL README.md benchmarks/vs-email-mime cpanfile dist.ini eg/sendgrid lib/Courriel.pm lib/Courriel/Builder.pm lib/Courriel/Header.pm lib/Courriel/Header/ContentType.pm lib/Courriel/Header/Disposition.pm lib/Courriel/HeaderAttribute.pm lib/Courriel/Headers.pm lib/Courriel/Helpers.pm lib/Courriel/Part/Multipart.pm lib/Courriel/Part/Single.pm lib/Courriel/Role/HeaderWithAttributes.pm lib/Courriel/Role/Part.pm lib/Courriel/Role/Streams.pm lib/Courriel/Types.pm lib/Courriel/Types/Internal.pm lib/Email/Abstract/Courriel.pm perlcriticrc perltidyrc t/00-report-prereqs.dd t/00-report-prereqs.t t/Builder.t t/ContentType.t t/Courriel.t t/Email-Sender.t t/HeaderAttribute.t t/Headers.t t/Part-Multipart.t t/Part-Single.t t/author-00-compile.t t/author-mojibake.t t/author-pod-spell.t t/author-pod-syntax.t t/author-test-version.t t/data/office.jpg t/data/stress-test/mbox_antivirus.txt t/data/stress-test/mbox_bad_date_email.txt t/data/stress-test/mbox_bad_from.txt t/data/stress-test/mbox_combox6709_error.txt t/data/stress-test/mbox_date_encoded.txt t/data/stress-test/mbox_delivered_to.txt t/data/stress-test/mbox_excessive-bounces.txt t/data/stress-test/mbox_gmane_entities.txt t/data/stress-test/mbox_headers_many.txt t/data/stress-test/mbox_local_from.txt t/data/stress-test/mbox_mime_applemail_1x.txt t/data/stress-test/mbox_mime_applemail_1xb.txt t/data/stress-test/mbox_mime_applemail_3x.txt t/data/stress-test/mbox_mime_auto-error-msg.txt t/data/stress-test/mbox_mime_boundary.txt t/data/stress-test/mbox_mime_boundary_2.txt t/data/stress-test/mbox_mime_boundary_3.txt t/data/stress-test/mbox_mime_boundary_angle_1x.txt t/data/stress-test/mbox_mime_missing-abuse.txt t/data/stress-test/mbox_mime_nested.txt t/data/stress-test/mbox_mime_nested_2.txt t/data/stress-test/mbox_mime_nested_from.txt t/data/stress-test/mbox_mime_partial-tomcat-failure.txt t/data/stress-test/mbox_mime_video_tmobile_1.txt t/data/stress-test/mbox_mime_video_verizon_1.txt t/data/stress-test/mbox_mime_virus-alert-headers.txt t/data/stress-test/mbox_mime_virus-kwf-scanner.txt t/data/stress-test/mbox_mime_virus-mcafee-virusscan.txt t/data/stress-test/mbox_mime_virus-mcgraw-hill.txt t/data/stress-test/mbox_mime_yahoo-auto-response-cn.txt t/data/stress-test/mbox_mime_yahoo-auto-response.txt t/data/stress-test/mbox_mmqp_1.txt t/data/stress-test/mbox_msgid_embedded-quotes.txt t/data/stress-test/mbox_msgid_hidden.txt t/data/stress-test/mbox_msgid_invalid_exchange-6-5.txt t/data/stress-test/mbox_msgid_missing_1.txt t/data/stress-test/mbox_msgid_missing_2.txt t/data/stress-test/mbox_msgid_missing_netscape-3-5.txt t/data/stress-test/mbox_msgid_missing_outlook2003-11.txt t/data/stress-test/mbox_msgid_novell-groupwise-7.txt t/data/stress-test/mbox_multiple_reply.txt t/data/stress-test/mbox_mutt_2.txt t/data/stress-test/mbox_nntp_references_split.txt t/data/stress-test/mbox_nonmime_html.txt t/data/stress-test/mbox_perl_nntp_orig.txt t/data/stress-test/mbox_piper2mbox_attach.txt t/data/stress-test/mbox_piper2mbox_attach1.txt t/data/stress-test/mbox_received_date.txt t/data/stress-test/mbox_references.txt t/data/stress-test/mbox_references_long.txt t/data/stress-test/mbox_spam.txt t/data/stress-test/mbox_texthtmlcomment.txt t/data/stress-test/mbox_tmp_list_post.txt t/data/stress-test/mbox_ubuntu_image1.txt t/data/stress-test/mbox_unknown8bit.txt t/data/stress-test/mbox_utf8.txt t/data/stress-test/mbox_utf8_2.txt t/data/stress-test/mixed_header_line_endings.txt t/data/stress-test/nntp_references_split.txt t/data/stress-test/test_date_realistic.eml t/release-cpan-changes.t t/release-meta-json.t t/release-pod-coverage.t t/release-pod-linkcheck.t t/release-pod-no404s.t t/release-portability.t t/release-tidyall.t t/stress.t t/weird-input.t tidyall.ini weaver.ini Courriel-0.40/perlcriticrc0000644000175000017500000000270312653205401015471 0ustar autarchautarchseverity = 3 verbose = 11 theme = core + pbp + bugs + maintenance + cosmetic + complexity + security + tests + moose exclude = Subroutines::ProhibitCallsToUndeclaredSubs [BuiltinFunctions::ProhibitStringySplit] severity = 3 [CodeLayout::RequireTrailingCommas] severity = 3 [ControlStructures::ProhibitCStyleForLoops] severity = 3 [InputOutput::RequireCheckedSyscalls] functions = :builtins exclude_functions = sleep severity = 3 [RegularExpressions::ProhibitComplexRegexes] max_characters = 200 [RegularExpressions::ProhibitUnusualDelimiters] severity = 3 [Subroutines::ProhibitUnusedPrivateSubroutines] private_name_regex = _(?!build)\w+ [TestingAndDebugging::ProhibitNoWarnings] allow = redefine [ValuesAndExpressions::ProhibitEmptyQuotes] severity = 3 [ValuesAndExpressions::ProhibitInterpolationOfLiterals] severity = 3 [ValuesAndExpressions::RequireUpperCaseHeredocTerminator] severity = 3 [Variables::ProhibitPackageVars] add_packages = Carp Test::Builder [-Subroutines::RequireFinalReturn] [-ErrorHandling::RequireCarping] # No need for /xsm everywhere [-RegularExpressions::RequireDotMatchAnything] [-RegularExpressions::RequireExtendedFormatting] [-RegularExpressions::RequireLineBoundaryMatching] # http://stackoverflow.com/questions/2275317/why-does-perlcritic-dislike-using-shift-to-populate-subroutine-variables [-Subroutines::RequireArgUnpacking] # "use v5.14" is more readable than "use 5.014" [-ValuesAndExpressions::ProhibitVersionStrings] Courriel-0.40/INSTALL0000644000175000017500000000163112653205401014111 0ustar autarchautarchThis is the Perl distribution Courriel. Installing Courriel is straightforward. ## Installation with cpanm If you have cpanm, you only need one line: % cpanm Courriel If you are installing into a system-wide directory, you may need to pass the "-S" flag to cpanm, which uses sudo to install the module: % cpanm -S Courriel ## Installing with the CPAN shell Alternatively, if your CPAN shell is set up, you should just be able to do: % cpan Courriel ## Manual installation As a last resort, you can manually install it. Download the tarball, untar it, then build it: % perl Makefile.PL % make && make test Then install it: % make install If you are installing into a system-wide directory, you may need to run: % sudo make install ## Documentation Courriel documentation is available as POD. You can run perldoc from a shell to read the documentation: % perldoc Courriel Courriel-0.40/README.md0000644000175000017500000002204312653205401014337 0ustar autarchautarchNAME Courriel - High level email parsing and manipulation VERSION version 0.40 SYNOPSIS my $email = Courriel->parse( text => $raw_email ); print $email->subject; print $_->address for $email->participants; print $email->datetime->year; if ( my $part = $email->plain_body_part ) { print $part->content; } DESCRIPTION This class exists to provide a high level API for working with emails, particular for processing incoming email. It is primarily a wrapper around the other classes in the Courriel distro, especially Courriel::Headers, Courriel::Part::Single, and Courriel::Part::Multipart. If you need lower level information about an email, it should be available from one of these classes. API This class provides the following methods: Courriel->parse( text => $raw_email, is_character => 0|1 ) This parses the given text and returns a new Courriel object. The text can be provided as a string or a reference to a string. If you pass a reference, then the scalar underlying the reference will be modified, so don't pass in something you don't want modified. By default, Courriel expects that content passed in text is binary data. This means that it has not been decoded into utf-8 with Encode::decode() or by using a :encoding(UTF-8) IO layer. In practice, this doesn't matter for most emails, since they either contain only ASCII data or they actually do contain binary (non-character) data. However, if an email is using the 8bit Content-Transfer-Encoding, then this does matter. If the email has already been decoded, you must set is_character to a true value. It's safest to simply pass binary data to Courriel and let it handle decoding internally. $email->parts() Returns an array (not a reference) of the parts this email contains. $email->part_count() Returns the number of parts this email contains. $email->is_multipart() Returns true if the top-level part is a multipart part, false otherwise. $email->top_level_part() Returns the actual top level part for the object. You're probably better off just calling $email->parts() most of the time, since when the email is multipart, the top level part is just a container. $email->subject() Returns the email's Subject header value, or undef if it doesn't have one. $email->datetime() Returns a DateTime object for the email. The DateTime object is always in the "UTC" time zone. This uses the Date header by default one. Otherwise it looks at the date in each Received header, and then it looks for a Resent-Date header. If none of these exists, it just returns DateTime->now(). $email->from() This returns a single Email::Address object based on the From header of the email. If the email has no From header or if the From header is broken, it returns undef. $email->participants() This returns a list of Email::Address objects, one for each unique participant in the email. This includes any address in the From, To, or CC headers. Just like with the From header, broken addresses will not be included. $email->recipients() This returns a list of Email::Address objects, one for each unique recipient in the email. This includes any address in the To or CC headers. Just like with the From header, broken addresses will not be included. $email->to() This returns a list of Email::Address objects, one for each unique address in the To header. Just like with the From header, broken addresses will not be included. $email->cc() This returns a list of Email::Address objects, one for each unique address in the CC header. Just like with the From header, broken addresses will not be included. $email->plain_body_part() This returns the first Courriel::Part::Single object in the email with a mime type of "text/plain" and an inline disposition, if one exists. $email->html_body_part() This returns the first Courriel::Part::Single object in the email with a mime type of "text/html" and an inline disposition, if one exists. $email->clone_without_attachments() Returns a new Courriel object that only contains inline parts from the original email, effectively removing all attachments. $email->first_part_matching( sub { ... } ) Given a subroutine reference, this method calls that subroutine for each part in the email, in a depth-first search. The subroutine receives the part as its only argument. If it returns true, this method returns that part. $email->all_parts_matching( sub { ... } ) Given a subroutine reference, this method calls that subroutine for each part in the email, in a depth-first search. The subroutine receives the part as its only argument. If it returns true, this method includes that part. This method returns all of the parts that match the subroutine. $email->content_type() Returns the Courriel::Header::ContentType object associated with the email. $email->headers() Returns the Courriel::Headers object for this email. $email->stream_to( output => $output ) This method will send the stringified email to the specified output. The output can be a subroutine reference, a filehandle, or an object with a print() method. The output may be sent as a single string, as a list of strings, or via multiple calls to the output. For large emails, streaming can be much more memory efficient than generating a single string in memory. $email->as_string() Returns the email as a string, along with its headers. Lines will be terminated with "\r\n". ROBUSTNESS PRINCIPLE Courriel aims to respect the common Internet robustness principle (aka Postel's law). Courriel is conservative in the output it generates, and liberal in what it accepts. When parsing, the goal is to never die and always return as much information as possible. Any input that causes the Courriel->parse() to die means there's a bug in the parser. Please report these bugs. Conversely, Courriel aims to respect all relevant RFCs in its output, except when it preserves the original data in a parsed email. If you're using Courriel::Builder to create emails from scratch, any output that isn't RFC-compliant is a bug. FUTURE PLANS This release is still rough, and I have some plans for additional features: More methods for walking all parts Some more methods for walking/collecting multiple parts would be useful. More? Stay tuned for details. WHY DID I WRITE THIS MODULE? There a lot of email modules/distros on CPAN. Why didn't I use/fix one of them? * Mail::Box This one probably does everything this module does and more, but it's really, really big and complicated, forcing the end user to make a lot of choices just to get started. If you need it, it's great, but I generally find it to be too much module for me. * Email::Simple and Email::MIME These are surprisingly not simple. They suffer from a problematic API (too high level in some spots, too low in others), and a poor separation of concerns. I've hacked on these enough to know that I can never make them do what I want. * Everything Else There's a lot of other email modules on CPAN, but none of them really seem any better than the ones mentioned above. CREDITS This module rips some chunks of code from a few other places, notably several of the Email suite modules. BUGS Please report any bugs or feature requests to bug-courriel@rt.cpan.org, or through the web interface at http://rt.cpan.org. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. DONATIONS If you'd like to thank me for the work I've done on this module, please consider making a "donation" to me via PayPal. I spend a lot of free time creating free software, and would appreciate any support you'd care to offer. Please note that I am not suggesting that you must do this in order for me to continue working on this particular software. I will continue to do so, inasmuch as I have in the past, for as long as it interests me. Similarly, a donation made in this way will probably not make me work on this software much more, unless I get so many donations that I can consider working on free software full time, which seems unlikely at best. To donate, log into PayPal and send money to autarch@urth.org or use the button on this page: http://www.urth.org/~autarch/fs-donation.html AUTHOR Dave Rolsky CONTRIBUTORS * Gregory Oschwald * Ricardo Signes * Zbigniew Łukasiak COPYRIGHT AND LICENSE This software is Copyright (c) 2016 by Dave Rolsky. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible)