用 Google 搜尋:

無聊人的無聊故事

WordPress Mail 補完計劃

— by C.H.Weng @ 6:16 下午

緣起

由於目前各家郵件軟體與網頁郵件系統對 UTF-8 編碼的郵件普遍都沒有辦法處理得很好,導致由 WordPress 發出的通知郵件很容易出現亂碼的情況,雖然不是什麼大問題,但總還是希望能修正這樣的不完美。

在研究了幾天後,我整理了兩個目前比較常用的解決方式,各有各的優缺點,雖然還沒辦法做到 100% 完美,但是至少已經有不錯的改善了!

原理介紹

修正 header 與 subject

第一個方法,就是修正郵件本身的 headersubject 以及內容,使大多數的郵件軟體與網頁可以正確讀取。

這方法雖然不錯,但是因為考慮到還有一些系統沒有完全支援 UTF-8,容易產生一些預期之外的狀況。因此,除非你很執著一定要採用 UTF-8 編碼,不然不建議用這個方式修正。

由於不易掌握送到 wp_mail 這個函式的資料型式,因此這個方法可能還有一些盲點存在。不過至少 WordPress 本身用到關於寄信的功能、以及 WP-DB-BackupSpam 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 啦!不過我懶…覺得這樣就很夠用了……

共有 7 條評論

  1. 正為了這個問題在苦惱
    結果就在您這裡看到了這篇文章
    馬上回去試試

    不過,我要如何才能知道「伺服器本身必須有 iconv 功能」?

  2. 我在 WordPress 歡樂正體中文交流所的討論串有回文了,等到有討論出一個結果之後,我再來更新這篇文章。

  3. [...] WordPress Mail 補完計劃 [...]

  4. 請問一下唷,升級到 wp 2.1 之後,似乎就運作不太正常... 是否有更新版本的hack?

  5. 是哪邊不正常?

    我自己用 WordPress 2.1.2,目前沒遇到什麼問題喔。

  6. [...] 看来,这问题HostMonster的管理员一时间也解决不了,只好寻找一下将双字节字符转化为单字节传送的方法了。网上简单查了一下,说这方面问题的还真不少。尝试过無聊人的無聊故事的WordPress Mail 補完計劃,说的方法都不适合我现在遇到的情况;又尝试了WordPress歡樂正體中文交流所中介绍的一种方法,居然导致了程序报错;还尝试了用Socket发送电子邮件,但代码复杂,不适合在Woedpress上修改,于是也放弃了; [...]

  7. Options » Miscellaneous”中,將“Use legacy my-hacks.php file support
    沒有看到此選項,發出來的留言還是亂碼,請大大幫忙
    謝謝!

發表評論

(必須輸入。)
(必須輸入,但不會公開。)
(選擇性輸入、公開資訊。)

不可以 使用 HTML 標籤;你 可以 使用 BBCode 標籤。
目前支援的標籤: b color email i img size strong u url。

Comment Preview
↑Meta↑
↑Authors↑
↓Search↓
↑Categories↑
↑Recent Posts↑
↓Most Popular Posts↓
↑Recent Comments↑
↓Recent Trackbacks↓
↓Archives↓
↓Themes↓
Powered by WordPress™
Valid RSS & Atom Feed