緣起
由於目前各家郵件軟體與網頁郵件系統對 UTF-8 編碼的郵件普遍都沒有辦法處理得很好,導致由 WordPress 發出的通知郵件很容易出現亂碼的情況,雖然不是什麼大問題,但總還是希望能修正這樣的不完美。
在研究了幾天後,我整理了兩個目前比較常用的解決方式,各有各的優缺點,雖然還沒辦法做到 100% 完美,但是至少已經有不錯的改善了!
原理介紹
修正 header 與 subject
第一個方法,就是修正 header 與 subject,使大多數的郵件軟體與網頁可以正確讀取。
這方法雖然不錯,但是因為考慮到還有一些系統沒有完全支援 UTF-8,容易產生一些預期之外的狀況。因此,除非你很執著一定要採用 UTF-8 編碼,不然不建議用這個方式修正。
由於不易掌握送到 wp_mail 這個函式的資料型式,因此這個方法,我只用來改 wp_notify_postauthor--一個用來通知有新 comment、trackback 以及 pingback 的函式。
至於用到 wp_mail 函式的其他部分,像是忘記密碼時的重設密碼郵件、以及安裝 WordPress 時寄給管理員的通知信,還有某些 plugin(WP-DB-Backup 與 Spam Karma 2 等等)因為用到的情況較少,所以就沒有做修正了。
將信件轉為 Big5 編碼
這是詢問過一些前輩所得到的心得。
目前常見的各大論壇,為求最大相容性,就算論壇本身是 UTF-8 編碼,在寄發郵件的時候,還是將郵件內容轉成 Big5 編碼來寄送。
這方法較前一個的相容性好上許多,缺點就是沒辦法兼顧到 UTF-8 多語系並存的特色,而且伺服器本身必須有 iconv 功能,才能進行轉換。
使用這個方法比較沒有第一個方法的顧慮,所以我直接對 wp_mail 函式下手,這樣處理過後,凡是藉由這個函式送出的郵件,就全部都是 Big5 編碼的形式了。
實作方法
剛開始接觸 WordPress 的時候,我也老愛對主程式的 code 動手動腳,不過幾次不大不小的升級與系統轉換下來,發現這樣實在是太累人了!不僅事倍功半,還很容易有漏改的情況出現。
後來我發現 WordPress 裡提供 my-hacks.php 這個檔案,讓使用者可以自訂某些函式。當然前提是主程式必須有寫成允許你自己重寫這個函式,而很幸運地,我想改的 wp_notify_postauthor 和 wp_mail 都在支援之列!
對了,在修改前,你當然必須得先啟用 my-hacks.php。方法是到控制台的“Options » Miscellaneous”中,將“Use legacy my-hacks.php file support”打勾後確定。
接著,就是要編輯 my-hacks.php 這個檔案了。這個檔案應該要放在 WordPress 的主目錄下,如果沒有這個檔案的話,自己新建一個就可以了。
如果你想採用第一種做法,請下載 wp-mail2utf8.txt,將內容複製到 my-hacks.php 後存檔。
如果你想用第二種做法,請下載 wp-mail2big5.txt,將內容複製到 my-hacks.php 後存檔。再次強調,使用這個方法,必須要有 iconv 功能才可以,如果沒有的話將不會進行任何轉換動作!
改好以後就大功告成了,發個郵件試試看吧!
p.s. 其實這個功能可以寫成 plugin 啦!不過我懶…覺得這樣就很夠用了……