WP email 的標題亂碼

其實這個問題困擾我很久了,以前一直以為人是 Becky 殺的,結果我錯怪了。

WP 可以啟用「當有人發表留言的時候使用電子郵件通知」這個功能,不過通知信件寄到我的 Email 信箱後,我用 Becky 收下來內文正常,但是標題跟來源卻是亂碼。由於我如果設定把通知信件寄到 Gmail 的話看是正常的,我一直以為是 Becky 設定的問題。只是無論我再怎麼設定,WP寄過來的信,其標題顯示還是亂碼。

今天火大了,乾脆把 WP 寄出來的信 source 挖出來看,再翻進去 WP source 裡找到pluggable-functions.php 裡的 wp_mail() 。原來是 WP 要寄信的時候沒有對 from/to/subject 等欄位做處理,我錯怪 Becky了。

既然人是 WP 殺的,那就簡單了。先找找有沒有人發明好現成的輪子,果然有:

quakemachine » Blog Archive » UTF-8 Mail Header Fix Plugin For WordPress

不過這個 Plugin一方面只處理了 subject 欄位,對於 from 並沒有處理,而且原程式的做法是取代原有的 wp_mail function,我覺得不夠彈性。於是又翻了一下。

在 WP 1.5.2 之後新增了 comment_notification_subject / comment_notification_headers 等幾個 filter,可以用來寫 plugin,不過在我的 1.5.2 上作者竟然是這樣放:

$message_headers = apply_filters(‘comment_notification_headers’, $message_headers);

$message_headers = “MIME-Version: 1.0\n"
. “$from\n"
. “Content-Type: text/plain; charset=\"" . get_settings(‘blog_charset’) . “\"\n";

@wp_mail($user->user_email, $subject, $notify_message, $message_headers);

apply_filters 的位置放錯了…… -.-

所以等未來WP 2.0 Release時我再改寫吧(應該快了:p)。

在這之前,我就先拿 AvP 的版本改一改,一樣是直接卡掉 wp_mail,不過改用另一種寫法,以後要改成 filter type 的plugin 時比較快。

來去 UTF-8 Mail Header Fix Plugin(PipperL version)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

%d 位部落客按了讚: