- my $data = $doc->get_data;
- $data = $enc_utf8->decode($data);
- my ($mid, $subj, $from, $date) = split(/\n/, $data);
- bless {
- doc => $doc,
- mid => $mid,
- subject => $subj,
- date => $date,
- from_name => $from,
- }, $class;
-}
-
-sub subject {
+ my $self = bless { doc => $doc }, $class;
+ $self->load_expand;
+}
+
+# :bytes and :lines metadata in RFC 3977
+sub bytes ($) { $_[0]->{bytes} }
+sub lines ($) { $_[0]->{lines} }
+sub num ($) { $_[0]->{num} ||= _get_term_val($_[0], 'XNUM', qr/\AXNUM/) }
+
+sub __hdr ($$) {
+ my ($self, $field) = @_;
+ my $val = $self->{$field};
+ return $val if defined $val;
+
+ my $mime = $self->{mime} or return;
+ $val = $mime->header($field);
+ $val = '' unless defined $val;
+ $val =~ tr/\n/ /;
+ $val =~ tr/\r//d;
+ $self->{$field} = $val;
+}
+
+sub subject ($) { __hdr($_[0], 'subject') }
+sub to ($) { __hdr($_[0], 'to') }
+sub cc ($) { __hdr($_[0], 'cc') }
+
+# no strftime, that is locale-dependent and not for RFC822
+my @DoW = qw(Sun Mon Tue Wed Thu Fri Sat);
+my @MoY = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
+
+sub date ($) {