SugarCRM 5.5 RC4 寄出亂碼信件的暫時性修正

原本是在 5.5 RC3 發現這個問題,不過後來升級到 RC4 這個問題還是沒有被解決,所以就自己試著去把蟲子挖出來,下面是一點記錄:

1. 先從介面上找到寄發信件的按鈕,確認按鈕點選後會觸發這個方法 SUGAR.email2.composeLayout.sendEmail(1, false);
2. 透過 PDT 搜尋整個目錄,確定這個方法定義在 "modules/Emails/javascript/EmailUI.js"
3. 在 js 方法中確認內容準備好之後會將它送到帶有 &emailUIAction=sendEmail 參數的網址
4. 透過 PDT 搜尋整個目錄,確定這個方法定義在 "modules/Emails/EmailUIAjax.php"
5. 確認信件會透過 Email::email2Send() 寄出
6. 發現問題出在 include/phpmailer/class.phpmailer.php 的 CreateHeader()

接著解決的方式,就是找到 class.phpmailer.php 1339 行的下面這段程式
$encoded = preg_replace('/^(.*)$/m', \" =?\".$this->CharSet.\"?$encoding?\\1?=\", $encoded); 
$encoded = trim(str_replace(\"\n\", $this->LE, $encoded));

在它前面加上
$encoded = str_replace(array(\"\r\", \"\n\"), array('', ''), $encoded);

問題就暫時修正了

這個問題是因為信件的 header 區塊中不接受多行的數值,而程式也不知道是哪一段出了問題把段落塞了進去,所以就在它實際編碼前把段落符號給拿掉。

也把這個問題丟到官方討論區了:
http://www.sugarcrm.com/forums/showthread.php?p=191746

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=4652

評論

  • edited 十一月 2009
    還有另外一個問題,在收信的時候發現附加檔案的檔名會變亂碼,不過不是很確定問題的確切原因

    我是使用 gmail 搭配 SugarCRM ,在閱讀信件的時候,信件內容是 Big5 編碼,但是 gmail 傳回給 PHP imap 相關函式的內容中,附加檔案檔名卻改用 GB2312 編譯,而 SugarCRM 在解析檔名時有透過 mb_convert_encoding() 轉換編碼,但是將 GB2312 轉換為 UTF-8 好像有問題,必須要改用 GBK 才能夠看到正常的文字,當然,我沒有仔細去各種編碼的編碼表裡面釐清問題,只做了個簡單的修正。

    在 modules/InboundEmail/InboundEmail.php 找到 handleEncodedFilename() 這個方法,找到這一行
    return (strtolower($encoding) == 'utf-8') ? $name : mb_convert_encoding($name, 'UTF-8', $encoding);

    在它之前加點東西:
    if($encoding == 'GB2312') {
    $encoding = 'GBK';
    }
    return (strtolower($encoding) == 'utf-8') ? $name : mb_convert_encoding($name, 'UTF-8', $encoding);


    然後感覺就好多了 ;)

    另外,因為信件在閱讀時都會快取到檔案,所以如果舊信件還是遇到同樣問題,記得刪除 cache/modules/Emails/(一串英文數字組合成的資料夾名稱,這是 uuid) 整個資料夾後重新讀取郵件
  • edited 十一月 2009
    把這個問題也丟到 PHP 官方網站了:
    http://bugs.php.net/bug.php?id=50153
  • edited 十一月 2009
    恩,搜尋功能也爛掉了...
    http://www.sugarcrm.com/forums/showthread.php?p=193442

    這真的是 RC 嘛?...
  • edited 四月 2011
    Hi guys;
    Very nice, and sound to me.
Sign In or Register to comment.