原本是在 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
評論
我是使用 gmail 搭配 SugarCRM ,在閱讀信件的時候,信件內容是 Big5 編碼,但是 gmail 傳回給 PHP imap 相關函式的內容中,附加檔案檔名卻改用 GB2312 編譯,而 SugarCRM 在解析檔名時有透過 mb_convert_encoding() 轉換編碼,但是將 GB2312 轉換為 UTF-8 好像有問題,必須要改用 GBK 才能夠看到正常的文字,當然,我沒有仔細去各種編碼的編碼表裡面釐清問題,只做了個簡單的修正。
在 modules/InboundEmail/InboundEmail.php 找到 handleEncodedFilename() 這個方法,找到這一行 在它之前加點東西:
然後感覺就好多了
另外,因為信件在閱讀時都會快取到檔案,所以如果舊信件還是遇到同樣問題,記得刪除 cache/modules/Emails/(一串英文數字組合成的資料夾名稱,這是 uuid) 整個資料夾後重新讀取郵件
http://bugs.php.net/bug.php?id=50153
http://www.sugarcrm.com/forums/showthread.php?p=193442
這真的是 RC 嘛?...
Very nice, and sound to me.