メールリンクの作り方
リンクの href を mailto: とアドレスで始めます。クリックすると、読み手のメールアプリでそのアドレス宛ての新規メッセージが開きます。
プレビューは他のアプリを開きません。ここでリンクをクリックすると、そのリンクが開くアドレスが表示されます。実際のページでは、1 つ目は新規メールを開き、2 つ目はスマートフォンで電話をかけます。
アドレスそのものをリンクテキストにしましょう。メールアプリを設定していない読み手 (ブラウザで Web メールを使うパソコンではよくあります) でもコピーできます。「メールを送る」とだけ書かれたリンクでは、読み手は手詰まりになります。
件名、本文、cc、bcc
mailto リンクではメッセージの他の部分も入力できます。URL のクエリ文字列と同じように、? の後にパラメータを追加し、& でつなぎます。
| パラメータ | 入力される部分 | 例 |
|---|---|---|
subject | 件名 | ?subject=Order%20question |
body | 本文 | &body=Hi%20there |
cc | CC の宛先 | &cc=sales@example.com |
bcc | BCC の宛先 | &bcc=log@example.com |
複数の宛先はアドレスの部分にカンマ区切りで書きます: mailto:ana@example.com,bob@example.com。
値は URL エンコードする必要があります。空白は %20、改行は %0D%0A、& は %26、? は %3F です。この例のスクリプトは各リンクをデコードし、メールアプリが受け取る内容を表示します。
件名 Order #123 は Order%20%23123 と書く必要があります。# をそのまま書くと URL がそこで終わり、本文が失われます。空白に + を使うのもやめましょう。mailto リンクでは + は文字どおりのプラス記号で、多くのメールアプリでそのまま表示されます。
JavaScript で mailto リンクを組み立てる
手作業のエンコードは間違いが起きやすいものです。encodeURIComponent が代わりにやってくれます。入力欄に入力すると、下のリンクが更新されます。
encodeURIComponent は & を %26 に、改行を %0A に変換します。replace で改行をメールが想定する %0D%0A の組にしています。アドレスの部分は入力したままにしましょう。そこでは @ と , はエンコードせずに使えます。
tel: と sms: の電話リンク
tel: はタップで電話をかけるリンクを作ります。href には国番号付きで空白なしの番号を書き、表示するテキストは好きな形式で構いません。
tel:+442079460958はどの国からでも使えます。tel:02079460958のような国内の番号は、その国の中からしかかけられません。- 区切りにハイフンは使えます (
tel:+1-555-123-4567)。空白は形式に含まれないので、hrefには入れないでください。 sms:はメッセージアプリを開きます。?body=でメッセージを入れる方法は多くのアプリで使えますが、対応がまちまちなので頼らないようにしましょう。- パソコンでは、
tel:は通話アプリ (FaceTime やソフトフォンなど) がインストールされていればそれを開き、なければ何もしません。
iPhone の Safari は、普通のテキストの電話番号を自動でリンクにします。注文番号などがそれで崩れる場合は、<meta name="format-detection" content="telephone=no"> で無効にしましょう。
スパムとメールアドレス
mailto リンクのアドレスは、ページをダウンロードするボットなら誰でも読めます。hello [at] example [dot] com と書いたり JavaScript でアドレスを組み立てたりする工夫で単純な収集ツールは防げますが、リンクも使いにくくなります。HTML のフォーム で解説している問い合わせフォームなら、アドレスをページに一切載せずに済みます。多くのサイトでは、受信箱に優れたスパムフィルターを付けるほうが簡単な解決策です。
<form action="mailto:..."> は避けましょう。読み手のメールアプリに依存し、入力内容が読みにくい URL エンコードの形で送られ、送信されたかどうかも確認できません。
よくある間違い
mailto:を忘れる。href="hello@example.com"は、アドレスと同じ名前のページへの相対リンクになります。- 件名や本文の空白や
#をエンコードしない。 値は%20、%23、またはencodeURIComponentでエンコードしましょう。 - 空白に
+を使う。 プラス記号として表示されます。 &の代わりに 2 つ目の?を使う。?の後に続くのは最初のパラメータだけで、残りは&でつなぎます。- テキストが「メールを送る」だけ。 Web メールの利用者がコピーできるものが残りません。
tel:に国内の電話番号を書く。 国番号を含めましょう。
よくある質問
HTML でメールリンクを作るには?
href が mailto: とアドレスで始まるリンクを使います: <a href="mailto:hello@example.com">hello@example.com</a>。クリックすると、読み手の既定のメールアプリで新規メッセージが開きます。
mailto リンクに件名を付けるには?
? の後にクエリパラメータとして追加します: mailto:hello@example.com?subject=Order%20question。空白は %20 にエンコードし、パラメータを増やすときは ?subject=Hi&body=Hello のように & でつなぎます。
mailto リンクで複数の宛先に送るには?
アドレスをカンマで区切ります: mailto:ana@example.com,bob@example.com。コピーには cc= と bcc= パラメータを使います: mailto:ana@example.com?cc=bob@example.com&bcc=cy@example.com。
HTML で電話番号をタップできるようにするには?
番号を国際形式で書いた tel: リンクを使います: <a href="tel:+15551234567">+1 555 123 4567</a>。スマートフォンでは電話がかかり、パソコンでは通話アプリがインストールされていればそれが開きます。
mailto リンクをクリックしても何も起きないのはなぜですか?
リンクは既定のメールアプリにアドレスを渡すだけです。Web メールを使うパソコンではよくあることですが、読み手がメールアプリを設定していないと、役に立つことは何も起きません。コピーできるように、アドレスをリンクテキストとして表示しましょう。