瀏覽代碼

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 
 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
 NOTE: Russian Apache will recode all attachments, even if they
 are binary, thus corrupting them. To fix this problem, refer to
 are binary, thus corrupting them. To fix this problem, refer to
 Russian Apache FAQ: http://apache.lexa.ru/faq.html#5
 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
 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'];
          $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"))
    if (!isset($mailbox) || $mailbox == "" || ($mailbox == "None"))
       $mailbox = "INBOX";
       $mailbox = "INBOX";