可用以下方式解決,以下範例指定編碼為 utf8
ini_set("SMTP", "127.0.0.1"); ini_set("smtp_port","25"); $to = "bb@example.com";//收件人 $subject = '=?utf-8?B?' . base64_encode("信件主題") . '?='; $body = "信件內容...信件內容..."; $body = chunk_split(base64_encode($body)); $from = '=?utf-8?B?' . base64_encode("寄件人名稱") . '?=' . '<aa@example.com>';//寄件人 $headers = "From: {$from}\r\n" . "Reply-To: {$from}\r\n" . "MIME-Version: 1.0\r\n" . "Content-type: text/plain; charset=utf-8\r\n" . "Content-Transfer-Encoding: base64\r\n"; mail($to, $subject, $body, $headers);說明:
- 第 5、8、12 行指定文字編碼為utf8
- 第 7 行 「chunk_split(base64_encode($body))」用來將信件內容太長的行,切成小段(換行),因為傳輸協定限制每行最多只能傳輸998個字符 (RFC 2822)。
(曾經看過某線上表單,表單內容可隨意增加,但後端處理mail的程式,沒將信件內容做適當的換行處理,將內容全部合併成一行,導致當內容太多時,會被截斷。) - 參考:
http://tools.ietf.org/html/rfc2822#section-2.1.1
http://php.net/manual/en/function.chunk-split.php
http://www.php.net/manual/en/function.mail.php
http://vawlog.blogspot.com/2007/04/blog-post_3854.html
沒有留言:
張貼留言