mailtoの使い方

[参考記事] PHPでHTMLメールを送る方法
[参考記事] mb_send_mailでCCやBCCを指定する 表示名を指定する
[参考記事] mail関数やmb_send_mail関数でReturn-Pathを設定する方法
[参考記事] PCからデコメールを送るときの仕様
[参考記事] mailto本文での改行 ドコモのN、Pで送信に失敗します
[参考記事] 携帯サイトでのmailtoの使い方

mailtoをリンクとして使う

<a href="mailto:test@example.com">メールを送る</a>

タイトルを指定する

<a href="mailto:test@example.com?subject=title">メールを送る</a>

タイトルと本文を指定する

<a href="mailto:test@example.com?subject=title&body=contents">メールを送る</a>
属性用途
subjectタイトル(件名)
body本文
ccCC(同報)
bccBCC(匿名同報)

メールアドレスを指定しない

<a href="mailto:?subject=title&body=contents">メールを送る</a>

mailtoをフォームとして使う

この方法はブラウザによって実装がさまざまなのでお勧めできません。

<form method="post" action="mailto:test@example.com?subject=title&body=contents">
<input type="text" name="comment" value="" />
<input type="submit" value="メールを送る" />
</form>

methodにGETを指定するとURL後に値が付与されて送信されますが、POSTを指定すると送信リクエストのヘッダーの中に値が付与されて送信されます。
このためGETは文字数が多いときにはURLが長くなります。
しかしメール送信については、ブラウザ内で処理され同じ端末のメールソフトに送られるためあまりこの動作を意識する必要はないと思います。

ではGETでもPOSTでもどちらでもよいのかとなると、そうではありません。
<form>は標準では送信内容をapplication/x-www-form-urlencoded形式で送ることになっています。

application/x-www-form-urlencoded形式は送信内容をURLエンコードで送信するため、受信側ではこの送信内容を読むことができない場合があります。
受信側でもメッセージが読めるように送るには、text/plain形式やmultipart/form-data形式で送信するとよいです。
HTML 4.0 仕様書では、この送信形式の指定(enctypeの指定)ができるのはmethod="post"とされています。

<form>をtext/plain形式で指定する方法

<form method="post" action="mailto:test@example.com" enctype="text/plain">

<form>をmultipart/form-data形式で指定する方法

<form method="post" action="mailto:test@example.com" enctype="multipart/form-data">

multipart/form-data形式は、RFC1867で提案され、RFC2388で更新されたものです。
RFC2070にも記載されています。

挙動はメーラーではなくブラウザによって異なります。

Internet Explorer 6
フォーム要素があると直接送信されます。
フォーム要素がないと、新規メール画面が出ます。
getなら常に、新規メール画面が出るが、タイトルが文字化けすることがあります。
subjectがないと『 Microsoft Internet Explorer から投稿されたフォーム 』というタイトルになります。

Firefox
常に新規メール画面が出ます。

下記はIEで送信した場合の内容です。

指定なし(application/x-www-form-urlencoded形式)
body内容も送信されます。

comment=%83e%83X%83g

enctype="text/plain"
body内容は送信されません。

comment=テスト

enctype="multipart/form-data"
body内容も送信されます。

-----------------------------7d9cb220254
Content-Disposition: form-data; name="comment"

テスト
-----------------------------7d9cb220254--

関連記事

スポンサーリンク

symfonyのORマッパ(Propel、Doctrine)

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る