1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
# This code is part of Perl distribution Mail-Message version 3.019.
# The POD got stripped from this file by OODoc version 3.05.
# For contributors see file ChangeLog.
# This software is copyright (c) 2001-2025 by Mark Overmeer.
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
# SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
package Mail::Message::Convert::MailInternet;{
our $VERSION = '3.019';
}
use base 'Mail::Message::Convert';
use strict;
use warnings;
use Mail::Internet ();
use Mail::Header ();
use Carp;
use Mail::Message ();
use Mail::Message::Head::Complete ();
use Mail::Message::Body::Lines ();
#--------------------
sub export($@)
{ my ($thing, $message) = (shift, shift);
$message->isa('Mail::Message')
or croak "Export message must be a Mail::Message, but is a ".(ref $message).".";
my $mi_head = Mail::Header->new;
foreach my $field ($message->head->orderedFields)
{ $mi_head->add($field->Name, scalar $field->foldedBody);
}
Mail::Internet->new(Header => $mi_head, Body => [ $message->body->lines ], @_);
}
my @pref_order = qw/From To Cc Subject Date In-Reply-To References Content-Type/;
sub from($@)
{ my ($thing, $mi) = (shift, shift);
$mi->isa('Mail::Internet')
or croak "Converting from Mail::Internet but got a ".(ref $mi).'.';
my $head = Mail::Message::Head::Complete->new;
my $body = Mail::Message::Body::Lines->new(data => [ @{$mi->body} ]);
my $mi_head = $mi->head;
# The tags of Mail::Header are unordered, but we prefer some ordering.
my %tags = map {lc $_ => ucfirst $_} $mi_head->tags;
my @tags;
foreach (@pref_order)
{ push @tags, $_ if delete $tags{lc $_};
}
push @tags, sort values %tags;
foreach my $name (@tags)
{ $head->add($name, $_) for $mi_head->get($name);
}
Mail::Message->new(head => $head, body => $body, @_);
}
1;
|