用 HTML mailto 屬性指定標題與信件內容

這幾天在為一個活動網頁做按鈕。成本不高,沒有後台程式,而且是設計給行動裝置用的網頁。按鈕的目的是要能寄信,然後指定信件的標題與內容。沒有後台程式,幾乎就代表只能用 HTML 的 mailto 來達成目標。「mailto」指定收件者是沒有問題的,不過要指定信件標題和內容,因為從來沒試過,就來查查看。

查了一兩天的資料(並沒有很認真),先是發現可以用 <form> 跟 <input> 與 mailto 屬性來寄送郵件及內容。但是因為 <input> 傳送的格式是以「變數名稱=內容」這樣的方式,和要帶入活動文案的方式不符。後來發現這個很棒的網頁,裡面有關於如何帶入標題與內容的解說。簡單說明如下。

其實和 HTML 接收變數的 GET 方式一樣,mailto 可以接收以「?」和「&」連接的參數(第一個變數用「?」接下來的變數都用「&」),格式為「mailto:abc@mail.com?變數1=變數1的值&變數2=變數2的值&變數3=變數3的值」。可指定的變數(看起來)包含某些郵件標頭(header)的屬性,所以像 cc、bcc、subject 都可以用,要帶入內容的話則可用 body。所以我想帶入標題和內容的話,語法就是:
「mailto:abc@mail.com?subject=我是標題&body=我是內容」
另外,在 RFC 文件中有指出 mailto 裡不允許 8 位元字元,原本以為要帶入中文字的話得想辦法用 Base64 編碼,不過測試之後發現 iPhone 和 Chrome 上面都可以正常帶入中文字。目前還不確定是不是所有環境都可以,總之就這樣囉。

<form> 和 <a>
因為剛開始搜尋到的是 <form> 的用法,所以在實作時我也是以 <form> 來實作,結果在 iPhone 上實際跑的時候發現內容沒有帶入,整個是空的。原本以為是 iPhone 的關係(電腦中的 Chrome 和 Firefox 都正常),後來查到蘋果的說明文件也是一樣的語法,證明應該有支援沒錯。查了一會後,我才後知後覺的發現,蘋果網頁中用的是連結而非表單。果然換用 <a> 之後 iPhone 就能正常帶入內容的資料了。我想應該是 iPhone 接收 <form> 的時候內容只接受 <input> 等表單元件的值,所以即使有指定 body,在 Mail 中還是不會帶入內容。

額外參考資料
蘋果說明文件中有關於 mailto 的 RFC 文件連結:RFC 2368

留言

這個網誌中的熱門文章

Unix 重新導向跟 2>&1

薰衣草茶實驗中...