tuto:ipasserelle:mail:corriger_la_casse_des_entetes_sogo

Corriger la casse des entêtes SOGo

SOGo ajoute les entêtes des mails tout en minuscules. À priori, ce n'est pas interdit par les RFC, mais par convention, les entêtes commencent généralement par des majuscules. Certains serveurs (gmail ?) placent quasi systématiquement ce type de mail dans les spams. Un bug est ouvert chez SOGo: http://sogo.nu/bugs/view.php?id=1047

En attendant qu'il soit réglé, voilà un petit plugin qpsmtpd qui permet de ré-écrire ces entêtes

#!/usr/bin/perl -wT
=head1 NAME
 
fix_headers_case
 
=head1 DESCRIPTION
 
SOGo adds lower case headers, which some mail servers do not like.
This plugin just rewrite them to have the first letter uppercase
 
=head1 AUTHOR
 
Daniel Berteaud <daniel@firewall-services.com>
 
=head1 LICENSE
 
MIT
 
 
=cut
 
 
sub register {
  my ($self, $qp, %arg) = @_;
  $self->register_hook("data_post", "fix_headers_case");
}
 
 
sub fix_headers_case {
  my ($self, $transaction) = @_;
  my $mailer = $self->get_header($transaction,'User-Agent') or return DECLINED;
  $mailer =~ m/^SOGoMail/ or return DECLINED;
  $self->log(LOGINFO, "SOGo mailer detected, going to fix headers case");
  foreach my $header (qw/From To Cc Subject Message-ID Content-Type Date Content-Length Content-Transfer-Encoding/){
    my $value = $self->get_header($transaction,$header) or return DECLINED;
    $self->set_header($transaction, $header, $value);
  }
  return DECLINED;
}
 
sub get_header {
  my ($self, $transaction, $header) = @_;
  my $ret  = $transaction->header->get($header) or return;
  return $ret;
}
 
sub set_header {
    my ($self, $transaction, $header, $value) = @_;
    my $ret = $transaction->header->delete($header) or return;
    $ret = $transaction->header->add($header, $value) or return;
    return $ret;
}
  • tuto/ipasserelle/mail/corriger_la_casse_des_entetes_sogo.txt
  • Dernière modification: 08/06/2016 11:35
  • de dani