HTML の <a> タグを使用して、メールを送信する際に件名 (Subject) と本文を自動挿入する事が出来る。テンプレートの目的で使用しているのをしばしば見かけることがある。
<a href="mailto:your-address@domain?subject=件名&body=本文">メール</a>
<a href="mailto:reg@domain?subject=ID845727506992&body=このまま編集しないで送信すれば登録が完了します。">登録メール</a>
登録を完了するには以下のリンクからメールを送信してください。
登録メール (実在しないアドレスなので本当に送信しないように / このサイトが EUC なんで多分化けますが)
互換性についてなのだが、元々は Netscape Navigator の拡張機能であり RFC によって標準化されているものではない。しかし、かなり昔からあった小技なので (たしか 1998 年頃に買った本には既に載ってたような気がする) そこそこの対応は期待しても良いだろう。
メジャーどころの現行バージョンは対応済みなのでシェア比で見れば相当高いだろう (まぁそれでも未対応ブラウザ/メーラー向けの配慮があるに越したことはない)。手元で確認出来たものと、公式サイトにサポート情報が載ってるものをリストアップしてみた。
-
Mozilla Thunderbird
-
Microsoft Outlook (Outlook Express)
-
Lotus Notes
-
Becky!
-
DoCoMo (i-mode)
-
au (ezweb)
-
Tu-Ka (ezweb)
日本語を扱う場合に URL エンコードが必須かかどうかもちょっとずつ違うようだ。
システム開発では、受信時に処理を振り分ける目的でこの機能を検討しているかもしれない。そういう用途ならメールアドレスのほうに ID を埋め込んでしまった方がクライアント側の互換性は心配する必要がないし、意図しない変更 (何せ Subject や本文だし) のリスクは少なくなる。
<a href="reg845727506992@domain">登録完了</a>
メールサーバ側では reg~ から始まるアドレス宛てのメールを特定のプログラムに渡すよう設定するだけで済む。ただしこれには qmail や postfix のような拡張アドレスに対応した MTA が必要になる。sendmail で構築した既存のシステムを変更しないで対応するのは、残念ながら無理なようだ。
前からやろうと思ってたオレサマ・サイト Blog 更新日付の自動表示にやっと対応した。 Ajax を使用して JavaScript から RSS を読み込み、最新記事の日付を表示させている。IE6 と Firefox 1.x で動作確認済み。詳しくは HTML ソース参照。
とはいえ実は大事な部分をごまかしている。セキュリティ制限のため JavaScript からは Blog を運営しているサイトと直接通信できない。こればかりは仕方が無いので、自宅のサーバで毎時 0 分に各 Blog の RSS を取得してオレサマ・サイトにアップロードしている。あればあったで何かと便利な自宅サーバである。
構造的には URL の先が動的な XML を生成するサーブレットなどでも良いから、何かとネタに使えそうな小技である。とはいえ strict data typing のない言語でアレコレ DOM をインスペクトするのはサンダルで屋久島を縦走するに等しい。項目を細分化して送信する必要があるなら、ぶっちゃけ対象要素の ID と innerHTML の値を XML にしてサーバから落とす ─ つまり Ajax を単なるバイパス機能として使用するくらいが勢いが良いだろう。
06.06.09 追記
知り合いからの障害報告で 8日→0日、9日→1日、8月→0月、9月→1月、になってしまうバグを修正。parseInt() に渡す数字の頭が 0 から始まっていると ("08" とか) 8 進数表現と解釈されるのをすっかり忘れてました。
最近よく耳にするようになった Ajax (Asynchronous JavaScript and XML)。ブラウザを画面遷移させないで表示内容を入れ替える ─ 要は JavaScript が裏でこっそり通信しますよ、という技法だ (技術ではないな)。Google Maps での地図スクロールだとか、Google Suggest でのキーワード候補表示などを見ると画面の切り替えなしで実現出来ているのが分かる。
入力と結果表示がシームレスに繋がるので使い勝手は格段に向上するわけだが、いかんせんベースの技術が JavaScript である。業務アプリケーションのような特性のシステムであまり凝ったことをするなら、ポータビリティ、対障害性、メンテナンス性などの面でのデメリットの方が大きいだろう (さすがに 「全画面 Ajax で」 ってのは意味が無いのでないだろうが)。
通信結果の XML を参照して条件分岐したり、値を個別のセルに表示したりもできるのだが、JavaScript でそれをやり始めると設計が発散してしまうのは想像に難くない。システム開発で使うなら、画面内の特定領域 (<div> 要素で囲んだ部分) をサーバから取り出した HTML で丸ごと置き換える、といった単純な利用にとどめるのが良いだろう (6 年前にアプレットで似たようなデモ作った記憶が蘇る)。
使い所はどこだろうか? 裏で通信、ということは表の目的が別にあるわけで、つまりオプション機能とかツール、入力補助と言った用途に向いている。画面入力中に裏で新着のお知らせを確認、なんて技だな (クライアントプル技術なのでサーバからのイベント通知は不可)。 Yahoo! 翻訳などがやってるようなポーリング用途は転送量を増やさない意味でも良いかもしれない。
まぁそんな Web 開発向けの Tip 的な小技なのだが、どうも Google 先生が使ってるってんでキーワード付けて焚き付けようって感じが否めない。きっと 「ま た か!」 と思ったエンジニアも多いだろう (だいたい Ajax って名前付けた Jesse James Garrett 氏自体 Google と関係ないし)。
2000 年頃の IT バブル期じゃないんだから、こういう情報キーワード先行な仕掛け方はもうとっくに飽きられてるのにまだ気づいてないのかね。こと最近のは既存の技術・手法・文化にアリガタイ名前付けただけの粗悪品が多いし (少なくとも以前は理論、集大成、改良、あるいは新しい切り口などが付属してた)。「Web2.0」 なんてのはネーミングがいかにも過ぎて笑える。
ここ fc2 ブログもそうなのだが、最近ブラウザで簡易 HTML エディタが機能しているのを目にする機会が増えた。文字の編集だけなら以下のような属性指定だけで簡単に出来るのだ。
<div contenteditable="true"> |
contenteditable 属性は Internet Explorer 5.5 以降でサポートされている。この実行結果は以下の通り。
Internet Explorer だけでなく Firefox もサポートしたい場合は designMode 属性を使えば良い。こちらはページ全体が編集対象になるので、編集領域は iframe として使用する。見た感じ IE 限定なら contenteditable の方が楽そう。
ただ標準で用意されているのは純粋な文字編集機能だけなので、強調・斜体・フォント変更・サイズ変更・リンク・画像貼り付けなど、一通りの編集に対応するなら JavaScript でかなりの作りこみが必要だ。
これで HTML エディタ作ったらとんでもなく大変だろうと思っていたのだが、世の中には根性ある人も居るものだな。世界は広い。
HTTP の Content-MD5 ヘッダを調べるついでに、RFC 1864 The Content-MD5 Header Field の翻訳を完了。4ページ程度だったのでわりかしちゃっちゃと終わった。128bit 固定の Base64 符号化で OK と。
ちょっともったいぶった感のある文章でした。RFC 読んでると結構書いてる人の癖が見えるね。何人かが書いてる場合は同じドキュメントでもセクションによって癖が違ったりとか。