Email::Store::Header - plugin to Email::Store to parse and save message headers


Email-Store-Header documentation Contained in the Email-Store-Header distribution.

Index


Code Index:

NAME

Top

Email::Store::Header - plugin to Email::Store to parse and save message headers

VERSION

Top

This document describes Email::Store::Header version 0.0.3

SYNOPSIS

Top

    use Email::Store::Header;

  


DESCRIPTION

Top

Sometimes it's useful to parse and store message headers. This is a plugin to Email::Store to do just that.

INTERFACE

Top

on_store

Email::Store extension function to parse and store message headers.

on_store_order

Plugin magic for Email::Store

DIAGNOSTICS

Top

None listed.

CONFIGURATION AND ENVIRONMENT

Top

Email::Store::Header requires no configuration files or environment variables.

DEPENDENCIES

Top

Email::Store
Mail::Header

INCOMPATIBILITIES

Top

None reported.

BUGS AND LIMITATIONS

Top

No bugs have been reported.

Please report any bugs or feature requests to bug-email-store-header@rt.cpan.org, or through the web interface at http://rt.cpan.org.

SEE ALSO

Top

Email::Store, Mail::Header

AUTHOR

Top

Chisel Wright <cpan@herlpacker.co.uk>

LICENCE AND COPYRIGHT

Top

DISCLAIMER OF WARRANTY

Top

BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.


Email-Store-Header documentation Contained in the Email-Store-Header distribution.

package Email::Store::Header;

use warnings;
use strict;
use Carp;

use version; our $VERSION = qv('0.0.4');

# Other recommended modules (uncomment to use):
#  use IO::Prompt;
#  use Perl6::Export;
#  use Perl6::Slurp;
#  use Perl6::Say;

use Mail::Header;
use base qw{ Email::Store::DBI };


# Module implementation here
__PACKAGE__->table('header');
__PACKAGE__->columns( All => qw[ id mail header value ] );
__PACKAGE__->has_a(mail => 'Email::Store::Mail');
Email::Store::Mail->has_many(headers => 'Email::Store::Header');

sub on_store {
    my ($class, $mail) = @_;

    my $rfc822      = $mail->message;
    my @lines       = split m{ \n }x, $rfc822;
    my $head        = new Mail::Header \@lines;

    # Remove any header line that, other than the tag, only contains whitespace
    $head->cleanup;

    my @tags        = $head->tags;
    my $head_hash   = $head->header_hashref;

    # loop through all the tags and store them
    foreach my $tag (@tags) {
        # get a list of all instances of $tag in the mail header
        my $tag_value = $head_hash->{ $tag };

        if ('ARRAY' eq ref($tag_value)) {
            # loop through the list
            foreach my $value (@$tag_value) {
                chomp $value;

                $class->_store_header(
                    $mail,
                    $tag,
                    $value,
                );
            }
        }
        else {
            # it's just a scalar
            chomp $tag_value;
            $class->_store_header(
                $mail,
                $tag,
                $tag_value,
            );
        }
    }

    undef $mail->{simple}; # Invalidate cache
    $mail->update;
}

sub on_store_order { 1 };


sub _store_header {
    my ($class, $mail, $header, $value) = @_;

    $class->create(
        {
            mail    =>  $mail->id,
            header  =>  $header,
            value   =>  $value,
        }
    );
}



1; # Magic true value required at end of module

__END__

__DATA__
CREATE TABLE IF NOT EXISTS header (
    id INTEGER auto_increment NOT NULL PRIMARY KEY,
    mail text NOT NULL,
    header text NOT NULL,
    value text NOT NULL
);