<a>タグの href 属性に「mailto:」を用いるとクリック時に送り先が設定された状態で標準のメーラーが立ち上がります。
パラメータとして subject を使うと件名が設定され、body を使うと本文を設定できます。
書式としては「mailto:送信先アドレス?subject=件名&body=本文」という形になりますが、
リンク内に日本語などのマルチバイト文字が含まれていてはいけないため、URLエンコードという処理を行い、
URL として正しくする必要があります。
PHP にはそういった場合 urlencode() や rawurlencode() などの関数が用意されています。
どちらも同じ役割ですが、urlencode() はスペースを「+」として変換し(RFC 1738)、
rawurlencode() はスペースを「%20」として変換する(RFC 3986)などの変換方式の違いが有ります。
メールリンクの場合は rawurlencode() の方を使用します。(より正確には RFC 6068 に従う必要がありますが実用範囲では互換性があります。)
また、subject や body, cc など複数のパラメータを用いる場合は http_build_query() を
使うと綺麗に書くことが出来ます。これは連想配列の形で複数のパラメータを受け取り、URLエンコードした状態でリンクを出力する為の関数です。
標準では urlencode() と同じ RFC 1738 による変換が行われますが、第4引数に PHP_QUERY_RFC3986 を
使うことで rawurlencode() と同じ RFC 3986 での変換を行うことが出来ます。
加えて第3引数を「&」とすると区切り文字の「&」自体もエスケープすることが出来ます。
<?php $body = <<<EOD 一行目 二行目 三行目 EOD; $query = http_build_query([ 'subject' => 'ここに件名が入ります', 'body' => preg_replace('/\R/', "\r\n", $body) ], null, '&', PHP_QUERY_RFC3986); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>mailto test</title> </head> <body> <a href="mailto:email@example.com?<?php echo $query;?>">Email</a> </body> </html>
本文などで改行を行う場合は改行コードとして「\r\n」(CR+LF)を用います。これは変換すると「%0D%0A」として表されます。
上記サンプルでは preg_replace() によって統一しています。
Similar Posts:
- [PHP]GDで作った画像をファイル化せずに直接<img>タグで表示する
- [PHP]HTMLフォームで検索条件を解除するリンクを作る
- [PHP]DOM, XPathを使ったスクレイピング(HTMLのタグ内容取得)
- [PHP]Laravelを使ったメールフォームの作り方
- [PHP]PDOを使ったMySQLデータベースへの接続と基本操作
- [PHP]Atom 1.0形式のフィードを作成するライブラリ
- [PHP]Symfonyを使ったメールフォームの作り方
- [PHP]背景の明るさを基準に見やすい文字色を組み合わせる(YUV輝度)