#!/usr/local/bin/perl =head1 NAME B - summarize headers and MIME structure of email messages =head1 SYNOPSIS B I =head1 DESCRIPTION Print From, To, Date, and Subject header fields along with a summary of the MIME structure of the email message in each file. =cut use strict; use warnings; use v5.14; use DateTime::Format::Mail; use Email::MIME; my @fields = ('From', 'To', 'Subject'); sub say_header { my $message = shift; my $field = shift; for my $value ($message->header($field)) { say "$field: $value"; } } sub say_date { my $message = shift; my $parser = DateTime::Format::Mail->new(loose => 1); my $any_valid = 0; my $last; for my $value ($message->header('date')) { my $dt = eval { $parser->parse_datetime($value) }; if ($@) { warn("$@"); $last = $value; next; } $dt->set_time_zone('local'); say 'Date: ', $parser->format_datetime($dt); } if (!$any_valid && $last) { say "Date: $last"; } } MAIN: { my $errors = 0; for my $fn (@ARGV) { say $fn; my $fp; if (!open($fp, $fn)) { $errors++; warn("open($fn): $!"); next; } my $text = join('', (<$fp>)); my $parsed = Email::MIME->new($text); for my $field (@fields) { say_header($parsed, $field); } say_date($parsed); say $parsed->debug_structure; } exit($errors); }