App-MonM
view release on metacpan or search on metacpan
lib/App/MonM/Message.pm view on Meta::CPAN
# Add X-Recipient
$self->{recipient} = $recipient;
$email->header_str_set("X-Recipient" => $recipient);
# Done
$self->email($email);
return $self;
}
sub email {
my $self = shift;
my $v = shift;
$self->{email} = $v if defined $v;
return $self->{email};
}
sub error {
my $self = shift;
my $v = shift;
$self->{error} = $v if defined $v;
return $self->{error};
}
sub msgid {
my $self = shift;
return $self->{msgid};
}
sub genId {
my $self = shift;
my @arr = @_;
unshift @arr, $$;
my $text = join("|", @arr);
my $t = time;
my $short = $t & 0x7FFFFF;
my $fnv = $self->{fnv32a}->digest($text) & 0xFFFFFFFF;
my $salt = join '', map {; $CHARS[rand @CHARS] } (0..6);
my $u = exists $UNIQCNT{$t} ? ++$UNIQCNT{$t} : (%UNIQCNT = ($t => 0))[1];
# hex(SHORT_TIME) . hex(TIME_UNIQ_CNT) . SALT . hex(FNV32a)
return sprintf("%x%x%s%x",$short, $u, $salt, $fnv);
}
sub save {
my $self = shift;
my $file = shift;
$self->error("");
unless ($file) {
$self->error("No file specified");
return;
}
my $email = $self->email;
unless ($email) {
$self->error("No email object found");
return;
}
my $fh = IO::File->new($file, "w");
unless (defined $fh) {
$self->error("Can't write file $file: $!");
return;
}
$fh->binmode(); # ':raw:utf8'
$fh->print($email->as_string);
undef $fh;
return 1;
}
sub load {
my $self = shift;
my $file = shift;
$self->error("");
unless ($file) {
$self->error("No file specified");
return;
}
unless (-e $file) {
$self->error("No file found: $file");
return;
}
my $size = -s $file;
unless ($size) {
$self->error("The file is empty: $file");
return;
}
# Load file
my $fh = IO::File->new($file, "r");
unless (defined $fh) {
$self->error("Can't load file $file: $!");
return;
}
$fh->binmode(':raw:utf8');
my $buf;
read $fh, $buf, $size; # File::Slurp in a nutshell
undef $fh;
# Set email object
my $email = Email::MIME->new($buf);
$self->email($email);
my $to = $email->header("To");
# Add X-Recipient
my $recipient = $email->header("X-Recipient") || $to || USERNAME;
$self->{recipient} = $recipient;
# Add X-Message-ID
my $msgid = $email->header("X-Message-ID");
unless ($msgid) {
my $subject = $email->header("Subject");
$msgid = $self->genId($to, $subject);
$email->header_str_set("X-Message-ID" => $msgid);
}
$self->{msgid} = $msgid;
return $self;
}
sub recipient {
my $self = shift;
return $self->{recipient};
}
sub to {
my $self = shift;
my $val = $self->email->header("To");
return $val;
}
sub from {
my $self = shift;
my $val = $self->email->header("From");
return $val;
}
sub subject {
my $self = shift;
my $val = $self->email->header("Subject");
return $val;
}
sub body {
my $self = shift;
my $val = $self->email->body;
return $val;
}
1;
__END__
( run in 0.862 second using v1.01-cache-2.11-cpan-39bf76dae61 )