Преглед на файлове

Workarounds for Russian Apache and charsets/attachments problem.

graf25 преди 24 години
родител
ревизия
e238014635
променени са 2 файла, в които са добавени 32 реда и са изтрити 2 реда
  1. 3 1
      doc/README.russian_apache
  2. 29 1
      src/compose.php

+ 3 - 1
doc/README.russian_apache

@@ -1,4 +1,4 @@
-HOW TO CONFIGURE SQUIRREL-MAIL WITH RUSSIAN APACHE
+HOW TO CONFIGURE SQUIRRELMAIL WITH RUSSIAN APACHE
 --------------------------------------------------
 
 This text is available in Russian at 
@@ -8,6 +8,8 @@ http://www.mricon.com/SM/russian_apache.html
 NOTE: Russian Apache will recode all attachments, even if they
 are binary, thus corrupting them. To fix this problem, refer to
 Russian Apache FAQ: http://apache.lexa.ru/faq.html#5
+Turn multipart form recoding off in your apache config. If you
+don't, you're in for mucho trouble.
 *****
  
 This howto is for people who are using Russian Apache and

+ 29 - 1
src/compose.php

@@ -385,7 +385,35 @@
          $attachments[$localfilename] = $HTTP_POST_FILES['attachfile']['name'];
       }
     }
-
+  
+   function SqConvertRussianCharsets(){
+    //
+    // This function is here because Russian Apache is a bastard when it comes to
+    // attachments. The solution is to turn off attachment recoding for multipart
+    // forms and do it manually.
+    // See graf@relhum.org for support.
+    //
+    global $CHARSET, $SOURCE_CHARSET, $send_to, $send_to_cc, $send_to_bcc, $subject, $body;
+    $charset_ary = array("koi8-r" => "k",
+   			 "windows-1251" => "w",
+			 "ibm866" => "a",
+			 "ISO-8859-5" => "i");
+    $body = convert_cyr_string($body, $charset_ary[$CHARSET], $charset_ary[$SOURCE_CHARSET]);
+    $send_to = convert_cyr_string($send_to, $charset_ary[$CHARSET], $charset_ary[$SOURCE_CHARSET]);
+    $send_to_cc = convert_cyr_string($send_to_cc, $charset_ary[$CHARSET], $charset_ary[$SOURCE_CHARSET]);
+    $send_to_bcc = convert_cyr_string($send_to_bcc, $charset_ary[$CHARSET], $charset_ary[$SOURCE_CHARSET]);
+    $subject = convert_cyr_string($subject, $charset_ary[$CHARSET], $charset_ary[$SOURCE_CHARSET]);
+   } // end SqConvertRussianCharsets()
+   
+   // Russian Apache sets $CHARSET. See if this is Russian Apache.
+   // If so, check if the source charset (koi8-r) is different from the 
+   // one submitted by the browser. If so, recode the parts of the form
+   // to the needed format so SM can proceed and not mangle the cyrillic
+   // input.
+   // See graf@relhum.org for support.
+   //
+   if ($CHARSET && $CHARSET != $SOURCE_CHARSET) SqConvertRussianCharsets();
+   
    if (!isset($mailbox) || $mailbox == "" || ($mailbox == "None"))
       $mailbox = "INBOX";