AuditMessage.pm   [plain text]


# Mail::SpamAssassin::AuditMessage - interface to Mail::Audit message text
package Mail::SpamAssassin::AuditMessage;

use strict;
use bytes;
use Carp;

use Mail::SpamAssassin::NoMailAudit;
use Mail::SpamAssassin::Message;

use vars qw{
  @ISA
};

@ISA = qw(Mail::SpamAssassin::Message);

###########################################################################

sub new {
  my $class = shift;
  my $self = $class->SUPER::new(@_);
  $self->{headers_pristine} = $self->get_all_headers();
  $self;
}

sub create_new {
  my ($self, @args) = @_;
  return Mail::SpamAssassin::NoMailAudit->new(@args);
}

sub put_header {
  my ($self, $hdr, $text) = @_;
  $self->{mail_object}->put_header ($hdr, $text);
}

sub delete_header {
  my ($self, $hdr) = @_;
  $self->{mail_object}->{obj}->head->delete ($hdr);
}

sub get_all_headers {
  my ($self) = @_;
  $self->{mail_object}->header();
}

sub get_pristine {
  my ($self) = @_;
  return join ('', $self->{headers_pristine}, "\n",
		 @{ $self->get_body() });
}

sub replace_original_message {
  my ($self, $data) = @_;

  my $textarray;
  if (ref $data eq 'ARRAY') {
    $textarray = $data;
  } elsif (ref $data eq 'GLOB') {
    if (defined fileno $data) {
      $textarray = [ <$data> ];
    }
  }

  # now split into [ headerline, ... ] and [ bodyline, ... ]
  my $heads = [ ];
  my $line;
  while (defined ($line = shift @{$textarray})) {
    last if ($line =~ /^$/);
    push (@{$heads}, $line);
  }

  $self->{mail_object}->head->empty;
  $self->{mail_object}->head->header ($heads);

  # take another copy of this
  $self->{headers_pristine} = $self->get_all_headers();

  $self->replace_body ($textarray);
}

1;