altere o ID da mensagem no sendmail

1

Determinamos que um software externo gera e-mails com o mesmo campo Message-ID . Este software usa sendmail para realizar o envio real.

Como não é muito fácil para nós alterar o software externo para corrigir o bug, eu gostaria de saber se é possível fazer com que sendmail ignore o dado Message-ID e gere um novo?

EXTRA-INFO:

Encontrei alguma documentação confirmando meus medos:

Header flags only control header insertion . If a header is received in the input, it is passed to the output, regardless of the flag settings.

Consulte link , seção 10.5.7 Definindo cabeçalhos de e-mail

    
por chahuistle 15.08.2012 / 16:59

1 resposta

1

se você estiver aberto a usar um MTA diferente ou pelo menos um MTA intermediário, dê uma olhada no qpsmtpd. Atualmente, uso o qpsmtpd para converter e-mails de entrada uuencoded de alguns aplicativos herdados que usamos para MIME.

aqui está o que eu uso, que é uma versão modificada do plugin tnef2mime (então, por favor, ignore qualquer extra e referências a tnef2mime). isso pode ser facilmente modificado para remover o cabeçalho de id de mensagem existente e adicionar um novo.

#!/usr/bin/perl -wT

use MIME::Parser;
use MIME::Entity;
use MIME::Head;
use File::MMagic;
use Convert::TNEF;

my $parser;
my $ent;
my $tmpdir='/var/spool/qpsmtpd';
my $count=0;
my $foundtnef=0;
my (@attachments, @blocked, @tnefs);

sub register {
  my ($self, $qp, %arg) = @_;
  $self->register_hook("data_post", "tnef2mime");
}

sub tnef2mime ( $$ )
        {
        my ($self, $transaction) = @_;
        # new Parser Object
        $parser = new MIME::Parser;
        # temp output directory
        $parser->output_under( $tmpdir );
        $parser->extract_uuencode(1);

        # read message body
        open BFN, $transaction->body_filename();
        $ent = $parser->parse(\*BFN);
        close BFN;

        my $founduu = $ent->parts && !$transaction->header->get('MIME-Version');

        if( $founduu )
                {
                $transaction->header->add('MIME-Version', "1.0" );
                my $xac = "UUENCODE -> MIME";
                $self->log(LOGDEBUG, "uuencoded attachment converted to MIME" );
                $transaction->header->add('X-TNEF2MIME-Plugin', $xac );

                # fix content-type header
                $transaction->header->delete('Content-Type');
                $transaction->header->add('Content-Type', $ent->head->get('Content-Type'));

                # write converted message body
                open BFN, ">" . $transaction->body_filename();
                $ent->print(\*BFN);
                close BFN;

                }


        my $output_dir = $parser->output_dir;

        opendir( DIR, $output_dir ) or die "Could not open temporary output dir $output_dir: $!\n";
        while( defined( my $file = readdir( DIR ) ) )
                {
                next if $file =~ /^\.\.?$/;
                $file =~ s/(^.*$)//;
                $file = $1;
                unlink( "$output_dir/$file" );
                }
        closedir( DIR );
        rmdir( $output_dir );

        return DECLINED;
        }
    
por 15.08.2012 / 17:39