Hello Developers!

I've made some changes in Kernel/System/PostMaster.pm for online
encoding of incoming email messages into default charset.


I also added parameter $Self->{"EmailForceCharsetEncoding"} = 1; in
Config.pm . If EmailForceCharsetEncoding=0 the online encoding
switches off.

Here is diff (with otrs-2.1.4)
diff -Naur PostMaster.pm.orig PostMaster.pm
--- PostMaster.pm.orig  2006-12-20 11:57:27.000000000 +0200
+++ PostMaster.pm       2006-12-22 15:57:06.000000000 +0200
@@ -98,7 +98,6 @@
   my %Param = @_;
   # ConfigObject section / get params
   my $GetParam = $Self->GetEmailParams();
-
   # check if follow up
   my ($Tn, $TicketID) = $Self->CheckFollowUp(%{$GetParam});

@@ -140,6 +139,8 @@
      );
      return 1;
  }
+
+
  # ----------------------
  # ticket section
  # ----------------------
@@ -442,9 +443,55 @@
   }
   # get body
   $GetParam{'Body'} = $Self->{ParseObject}->GetMessageBody();
+
+#######################################################
+# WITHOUT EMAIL ENCODING
+
+    # get content type
+    #$GetParam{'Content-Type'} = $Self->{ParseObject}->GetReturnContentType();
+    #$GetParam{'Charset'} = $Self->{ParseObject}->GetReturnCharset();
+
+#######################################################
+# DO EMAIL ENCODING INTO DefaultCharset (in Config.pm)
+
   # get content type
-    $GetParam{'Content-Type'} = $Self->{ParseObject}->GetReturnContentType();
-    $GetParam{'Charset'} = $Self->{ParseObject}->GetReturnCharset();
+    my $SrcContentType = $Self->{ParseObject}->GetReturnContentType();
+    my $SrcCharSet = $Self->{ParseObject}->GetReturnCharset();
+
+    if ( $SrcCharSet =~ /.*/ &&
$Self->{ConfigObject}->Get('EmailForceCharsetEncoding') ) {
+       my $DstCharSet = $Self->{ConfigObject}->Get('DefaultCharset');
+
+       if ($Self->{Debug} > 0) {
+           print "Old CharSet: ".$SrcCharSet."\n"."New CharSet:
".$DstCharSet." \n";
+           # get Content-Transfer-Encoding
+           my $CTEncoding = $Self->{ParseObject}->GetParam(WHAT =>
'Content-Transfer-Encoding');
+           print "Content-Transfer-Encoding: ".$CTEncoding." \n";
+           }
+
+       if ( $SrcCharSet ne /$DstCharSet/i ) {
+           # Encode Body, Subject, From, To
+           Encode::from_to( $GetParam{'Body'}, $SrcCharSet, $DstCharSet );
+           Encode::from_to( $GetParam{'Subject'}, $SrcCharSet, $DstCharSet );
+            Encode::from_to( $GetParam{'From'}, $SrcCharSet, $DstCharSet );
+           Encode::from_to( $GetParam{'To'}, $SrcCharSet, $DstCharSet );
+
+           my $DstContentType = $SrcContentType;
+           $DstContentType =~ s/$SrcCharSet/$DstCharSet/ ;
+
+           if ($Self->{Debug} > 0) { print "New ContentType:
".$DstContentType." \n"; }
+
+           # change ContentType
+           $GetParam{'Content-Type'} = $DstContentType;
+
+       }
+    }
+    else {
+       $GetParam{'Content-Type'} = $SrcContentType;
+       $GetParam{'Charset'} = $SrcCharSet;
+    }
+
+#######################################################
+
   return \%GetParam;
}




I think this feature could be usefull for other OTRS users.


Best Regards,
Robert Oliynichenko
OS Consulting
tel.+38 (044) 426-10-20
_______________________________________________
OTRS mailing list: dev - Webpage: http://otrs.org/
Archive: http://lists.otrs.org/pipermail/dev
To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

Reply via email to