Bug 21874: Fix encoding of cart and list email subjects
authorKatrin Fischer <katrin.fischer@bsz-bw.de>
Fri, 23 Nov 2018 10:30:49 +0000 (11:30 +0100)
committerJesse Maseto <jesse@bywatersolution.com>
Thu, 13 Dec 2018 17:17:44 +0000 (17:17 +0000)
The subject of the cart and list emails is not correctly
encoded and displays incorrectly in some email clients.

To test:

Lists:
- Create a list, name it using umlauts or other diacritics
  Example:  Jugendbücher (books for youths in German)
- Add some items to your list
- Email yourself the list
- Verify that the email subject is broken

Cart:
- Install another language with non-latin characters like Greek
- Fill the cart with some titles
- Send yourself the cart
- Verify that the email subject is broken

Note: Some email clients display correctly, others not.
      It's known to be incorrect in Outlook and web.de,
      displaying nicely in Thunderbird.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Tested all four scripts by manipulating the cart text too in templates.
Follow-up handles intranet sendshelf.

Note: I asked Katrin to remove the encode UTF-8 statements, since we
convert to MIME and the subject line should never be UTF-8.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit e40bb00ab8da87c8c5d6e660de928d24b887df17)

Signed-off-by: Jesse Maseto <jesse@bywatersolution.com>

basket/sendbasket.pl
opac/opac-sendbasket.pl
opac/opac-sendshelf.pl
virtualshelves/sendshelf.pl

index 5bf0f3b..a4bbe16 100755 (executable)
@@ -112,7 +112,7 @@ if ( $email_add ) {
     if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) {
         $mail{subject} = $1;
         $mail{subject} =~ s|\n?(.*)\n?|$1|;
-        $mail{subject} = Encode::encode("UTF-8", $mail{subject});
+        $mail{subject} = encode('MIME-Header',$mail{subject});
     }
     else { $mail{'subject'} = "no subject"; }
 
index 0f84f04..bb8ec05 100755 (executable)
@@ -130,7 +130,7 @@ if ( $email_add ) {
     if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) {
         $mail{subject} = $1;
         $mail{subject} =~ s|\n?(.*)\n?|$1|;
-        $mail{subject} = Encode::encode("UTF-8", $mail{subject});
+        $mail{subject} = encode('MIME-Header',$mail{subject});
     }
     else { $mail{'subject'} = "no subject"; }
 
index 9c8fdd2..1a88671 100755 (executable)
@@ -131,7 +131,7 @@ if ( $email ) {
         $mail{subject} =~ s|\n?(.*)\n?|$1|;
     }
     else { $mail{'subject'} = "no subject"; }
-    $mail{subject} = Encode::encode("UTF-8", $mail{subject});
+    $mail{subject} = encode('MIME-Header', $mail{subject});
 
     my $email_header = "";
     if ( $template_res =~ /<HEADER>(.*)<END_HEADER>/s ) {
index 996c2f7..08a3ac1 100755 (executable)
@@ -113,7 +113,7 @@ if ($email) {
 
     # Analysing information and getting mail properties
     if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) {
-        $mail{'subject'} = Encode::encode("UTF-8", $1);
+        $mail{'subject'} = encode('MIME-Header', $1);
         $mail{subject} =~ s|\n?(.*)\n?|$1|;
     }
     else { $mail{'subject'} = "no subject"; }