はじめに
携帯端末の内部コードは、docomo、au、SoftBankいずれもShift-JISです。
パソコンからインターネットで、CGI(PHP)でメール送信する方法は、大きく分けると「mail関数」とマルチバイトに対応の「mb_send_mail関数」の2種類あります。
「mail関数」を使い、docomoガラケー携帯へメール送信する場合は、メール送信するAP(HTMLおよびPHPなど)のソースコーダは、SHIFT-JISで作成します。
ただし、エンコード変換を行ってメールの送信が可能な「mb_send_mail関数」を使う場合は、ソースコーダはUTF-8で作成します。
また、メール本文の形式には、文書のみで作成された一般的な「テキストメール」と、画像の挿入や文字加工で見た目を整えたHTMLで作成された「HTMLメール」があります。
本ページは、PHPの「mail関数」および「mb_send_mail関数」を使用して、docomoガラゲーまたはスマホ携帯へのテキストメールおよびHTMLメール送信方法についてその4例(下表参照)について説明します。
- スマホ本体内「パソコンなどのメール受信設定」
なお、パソコンからスマホへメールを送信する場合は、スマホ本体内の「メール設定」を変更する必要があります。
設定方法は、「パソコンなどのメール受信設定」について、「拒否」する を「受信」する に変更します。
設定変更は、最寄りのドコモショップに依頼すると良いでしょう。 - 送信元メールアドレス(From)(パソコン側)
Fromメールアドレスは、PHP送信メールアプリの収容ドメインのメールアドレスであること。
例えば、PHP送信メールアプリのURLが、http://urbanqee.com/mail/php-keitai-sendmail.php の場合、
FROMメールアドレスはつぎの形式です。
【例】xxxx@urbanqee.com (xxxxは任意) - メールの送信管理
メールは、PHPを使用してパソコンから送信するため、送信メールの管理をPHPで独自に作り込みが必要です。 - メールの受信管理
前項2で作成したメールアドレスで、使用ドメイン(例、urbanqee.com)内にメールアカウントを作成し、 フリーのメールソフトなど(例 EdMax)で受信管理を行うと良いでしょう。PHP送信メールの動作イメージを下図に示します。
(図)PHP送信メールの動作イメージ
mail関数およびmb_send_mail関数のPHPマニュアルは以下を参照してください。
- mail関数:https://www.php.net/manual/ja/function.mail.php
- mb_send_mail関数:https://www.php.net/manual/ja/function.mb-send-mail.php
項 番 | PHP送信メール名(ページ内リンク) | ソースコード | PHP関数 | テキストメール HTMLメール | 応用機能 | 備 考 |
例1 | PHP送信メール01 携帯テキストメール mail関数/SHIFT-JIS | SHIFT-JIS | テキストメール | |||
例2 | PHP送信メール06 携帯HTMLメール mail関数/SHIFT-JIS | SHIFT-JIS | HTMLメール | |||
例3 | PHP送信メール02 携帯テキストメール mb_send_mail関数/UTF-8 | UTF-8 | mb_send_mail | テキストメール | ||
例4 | PHP送信メール07 携帯HTMLメール mb_send_mail関数/UTF-8 | UTF-8 | mb_send_mail | HTMLメール | ||
記事 | 【注】4例は、メールを送信する機能のみで、他の機能はありません。 |
1.PHP送信メール01 携帯テキストメール - mail関数 SHIFT-JIS
・呼び出し方 - メールを送信します
- 送信先アドレス(to)
メールを送信したい宛先アドレス。
複数の宛先にメールを送信する場合は、コンマ区切りで複数のアドレスを指定(入力)します。
(例)"to1@example.com,to2@example.com,to3@example.com" - 件名(subject)
メールの件名は1行あたりの文字制限の半角78文字まで入力できます(下メール本文を参照)。 - メール本文(message)
メールの本文。
本文メッセージの改行コードは CRLF (\r\n) となります。各行の長さは 70 文字を超えては いけません。 改行も含めた文字列を代入できますが、一行あたりの長さは70文字未満でなければなりません。そのため日本語の場合は35文字以下になります。 - 追加ヘッダー(headers) (オプション)
メールヘッダーの後に追加挿入されます。
通常、これには追加のヘッダ(From、Cc、Bcc)のために用いられます。メールを送信する際には、必ず Fromヘッダーが含まれていなければなりません。
PHP7.2.0以降はstring型とarray型どちらでも使用できます。それ以前はstring型のみになります。
複数のヘッダを追加する場合は CRLF(\r\n)で区切ります。
「From」ヘッダーは、php.iniでデフォルト値を指定している場合は、省略することができます。
Fromメールアドレスは、PHP送信メールアプリの収容ドメインのメールアドレスであること。
【例】xxxx@urbanqee.com
<?php
//PHP送信メール01 携帯テキストメール - mail関数/SHIFT-JIS
$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message']; // nl2br($_POST['content']);
$headers = "From: ". $_POST['from'];
if(mail($to, $subject, $message,$headers)){
echo mb_convert_encoding("メールを送信しました", "UTF-8", "SJIS"); //PHPソースコードがSHIFT-JISの場合
} else {
echo mb_convert_encoding("メールの送信に失敗しました", "UTF-8", "SJIS"); //PHPソースコードがSHIFT-JISの場合
}
?>
(2) メール送信する入力フォームHTMLサンプル
入力フォームの操作において、メールの本文は、入力フォームの本文(textarea)に入力します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="SHIFT-JIS" />
<title>PHP送信メール01 TEXTメール基本-mail関数/UTF-8</title>
</head>
<body>
<h2>PHP送信メール01 TEXTメール基本-mail関数/UTF-8</h2>
<form action="php-sendmail-example1.php" method="post">
<table>
<tr><td>差出人(From)</td><td><input type="text" name="from" value="" placeholder="例: 山田<xxxxx@vvvvv.com>"></td></tr>
<tr><td>送信先(To)</td><td><input type="text" name="to"></td></tr>
<tr><td>件名</td><td><input type="text" name="subject"></td></tr>
<tr><td>本文</td><td><textarea name="message" cols="50" rows="5">
PHP送信メール1 TEXTメール基本-mail関数/UTF-8
■特殊文字(環境依存文字)テスト
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
㈱ ㌔ 髙 Ⅷ ㌫ ㎏ ㍼
侍ジャパン14年ぶり3度目の世界一!
WBC史上初 二刀流で活躍の大谷翔平が大会MVP獲得!
【2023 WORLD BASEBALL CLASSIC? 決勝ハイライト】
3月22日 アメリカ 2 - 3 日本
</textarea></td></tr>
<tr><td></td><td><input type="submit" name="send" value="送信"></td></tr>
</table>
</form>
</body>
</html>
(3)メール送信確認結果
メール送信確認結果は、日本語を含むFromアドレス名称、件名および特殊文字を含む本文などは、正しく表示されます。
項番 | 送信内容 | @yahoo.co.jp | @outlook.jp | @gmail.com | 携帯@docomo.ne.jp | 備 考 |
1 | Fromアドレス名称 | OK | ||||
2 | 件名 | OK | ||||
3 | 本文(テキスト) (特殊文字含む) | OK | ||||
4 | その他 | |||||
記事 |
2.PHP送信メール06 携帯HTMLメール - mail関数 SHIFT-JIS
・呼び出し方 - メールを送信します
- 送信先アドレス(to)
メールを送信したい宛先アドレス。
複数の宛先にメールを送信する場合は、コンマ区切りで複数のアドレスを指定(入力)します。
(例)"to1@example.com,to2@example.com,to3@example.com" - 件名(subject)
件名は1行あたりの文字制限の半角78文字まで入力できます(下メール本文を参照)。
ただし、outlookメールの場合、全角18/半角36文字以内です(オーバーの場合文字化け)。 - メール本文(message)
メールの本文。
本文メッセージの改行コードは CRLF (\r\n) となります。各行の長さは 70 文字を超えては いけません。 改行も含めた文字列を代入できますが、一行あたりの長さは70文字未満でなければなりません。そのため日本語の場合は35文字以下になります。 - 追加ヘッダー(headers) (オプション)
メールヘッダーの後に追加挿入されます。
通常、これには追加のヘッダ(From、Cc、Bcc)のために用いられます。メールを送信する際には、必ず Fromヘッダーが含まれていなければなりません。
PHP7.2.0以降はstring型とarray型どちらでも使用できます。それ以前はstring型のみになります。
複数のヘッダを追加する場合は CRLF(\r\n)で区切ります。
「From」ヘッダーは、php.iniでデフォルト値を指定している場合は、省略することができます。
Fromメールアドレスは、PHP送信メールアプリの収容ドメインのメールアドレスであること。
【例】xxxx@urbanqee.com
(1) mail関数を使用して、携帯HTMLメールを送信するPHPサンプル
<?php
//PHP送信メール06 携帯HTMLメール - mail関数/SHIFT-JIS
$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message']; //nl2br($_POST['message']);
$headers = "From:" . $_POST['from'];
$headers .= "\r\n";
$headers .= "Content-type: text/html; charset=SHIFT-JIS";
//メール起動
if(mail($to, $subject, $message, $headers)){
echo mb_convert_encoding("メールを送信しました", "UTF-8", "SJIS"); //PHPソースコードがSHIFT-JISの場合
} else {
echo mb_convert_encoding("メールの送信に失敗しました", "UTF-8", "SJIS"); //PHPソースコードがSHIFT-JISの場合
}
?>
(2) メール送信する入力フォームHTMLサンプル
入力フォームの操作において、HTMLメール本文(HTML)全体を、入力フォームの本文(textarea)に入力(貼り付け)します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="SHIFT-JIS">
<title>PHP送信メール06 携帯HTMLメール - mail関数/SHIFT-JIS</title>
</head>
<body>
<h1>PHP送信メール06 携帯HTMLメール基本-mail関数/SHIFT-JIS</h1>
<form action="php-sendmail-example2.php" method="post">
<table id="form">
<th></th>
<td style="font-size:20px;font-Weight:bold">
</td>
</tr>
<th>差出人メールアドレス(From)</th>
<td>
<input type="text" name="from" size="35" value="" placeholder="(例) 山田太郎<xxxxx@vvvvv.com>"><br>
</td>
</tr>
<th>宛先メールアドレス(To)</th>
<td>
<input type="text" name="to" size="35" value=""><br>
</td>
</tr>
<th>件名</th>
<td>
<input type="text" name="subject" size="55" value="PHP送信メール6 HTMLメール基本"><br>
</td>
</tr>
<tr>
<th>本文</th>
<td><textarea name="message" rows="7" cols="60">
ここに、HTMLメール本文(HTML)を貼り付けます
</textarea></td>
</tr>
<tr>
<th></th>
<td> <input type="submit" value="送信"> <input type="reset" value="リセット">
</td>
</tr>
</table>
</form>
</body>
</html>
<html>
<head><!--PHP送信メール06 携帯HTMLメール -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=SHIFT-JIS">
</head>
<body>
<h3>○○ドメインからのお知らせ<br>
(2023年1月18日)</h3>
<br>
<img src="画像URL" title="画像">
<span>😀</span>日頃より○○ドメインを<br>
ご利用いただき誠にありがとうございます。<br>
<a href="https://www.○○.com/">https://www.○○.com/</a>
<br>
<h3>【 重要 】2023年2月ドメイン価格についてのお知らせ</h3>
大変恐縮ではございますが、先日お知らせいたしました通り、2023年2月1日(水)からドメイン価格の変更を行わせていただくこととなりました。
価格変更に関する経緯につきましては「ドメインご契約のお手続き時の「サービス維持調整費」導入に関するご案内」をご覧ください。
<table>
<tr><td>①変更日</td><td>2023年2月1日(水)</td></tr>
<tr><td>②対象手続き</td><td>ドメインの登録・更新・移管手続き)</td></tr>
<tr><td>③対象TLD</td><td>全TLD)</td></tr>
<tr><td>④内容</td><td>詳細は、下記の価格表をご覧ください。)</td></tr>
</table>
<p>■ ドメイン価格改定一覧<br>
<a href="https://www.○○.com/2023/0118/xxxxx.pdf">PDF</a>
</p>
</body>
</html>
(3)メール送信確認結果
メール送信確認結果は、日本語を含むFromアドレス名称、件名および特殊文字(例:①)や絵文字アイコン(例:😀)を含め本文など、正しく表示されます。 ただし、本文内の画像は表示されません。
項番 | 送信内容 | @yahoo.co.jp | @outlook.jp | @gmail.com | 携帯@docomo.ne.jp | 備 考 |
1 | Fromアドレス名称 | OK | ||||
2 | 件名 | OK | ||||
3 | 本文 (絵文字アイコン/特殊文字含む) | OK | ||||
4 | 本文内画像 | 表示せず | ||||
記事 |
3.PHP送信メール02 携帯テキストメール - mb_send_mail関数 UTF-8
・呼び出し方 - メールを送信します
- 送信先アドレス(to)
メールを送信したい宛先アドレス。
複数の宛先にメールを送信する場合は、コンマ区切りで複数のアドレスを指定(入力)します。
(例)"to1@example.com,to2@example.com,to3@example.com" - 件名(subject)
件名は1行あたりの文字制限の半角78文字まで入力できます(下メール本文を参照)。
ただし、outlookメールの場合、全角18/半角36文字以内です(オーバーの場合文字化け)。 - メール本文(message)
メールの本文。
本文メッセージの改行コードは CRLF (\r\n) となります。各行の長さは 70 文字を超えては いけません。 改行も含めた文字列を代入できますが、一行あたりの長さは70文字未満でなければなりません。そのため日本語の場合は35文字以下になります。 - 追加ヘッダー(headers) (オプション)
メールヘッダーの後に追加挿入されます。
通常、これには追加のヘッダ(From、Cc、Bcc)のために用いられます。メールを送信する際には、必ず Fromヘッダーが含まれていなければなりません。
PHP7.2.0以降はstring型とarray型どちらでも使用できます。それ以前はstring型のみになります。
複数のヘッダを追加する場合は CRLF(\r\n)で区切ります。
「From」ヘッダーは、php.iniでデフォルト値を指定している場合は、省略することができます。
Fromメールアドレスは、PHP送信メールアプリの収容ドメインのメールアドレスであること。
【例】xxxx@urbanqee.com
(1)mb_send_mail関数を使用して、携帯テキストメールを送信するPHPサンプル
<?php
//PHP送信メール02 TEXTメール基本-mb_send_mail関数/UTF-8
mb_language("Japanese"); //mb_send_mail 用
mb_internal_encoding("UTF-8"); //mb_send_mail 用
$fr = $_POST['from']; // 送信者名称<aaaaa@yahoo.jp> 形式
$to = $_POST['to']; // 宛先
$subject = $_POST['subject'];
$message = $_POST['message'];
$fromarr = explode("<",$_POST['from']);
$fromname = mb_encode_mimeheader($fromarr[0],"iso-2022-jp"); //携帯文字化け解消 OK
$from = $fromname . "<" . $fromarr[1];
$message = mb_convert_encoding($message, 'ISO-2022-JP-ms', 'UTF-8'); //特殊文字①などNGの場合mb_convert_encoding
//ヘッダー
$headers = "From: ". $from ."\r\n";
if(mb_send_mail($to, $subject, $message,$headers)){
echo "メールを送信しました";
} else {
echo "メールの送信に失敗しました";
}
?>
(2) メール送信する入力フォームHTMLサンプル
入力フォームの操作において、メールの本文を入力フォームの本文(textarea)に入力します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP送信メール02 TEXTメール基本-mb_send_mail関数/UTF-8</title>
</head>
<body>
<h2>PHP送信メール02 TEXTメール基本-mb_send_mail関数/UTF-8</h2>
<form action="php-sendmail-example2.php" method="post">
<table>
<tr><td>差出人(From)</td><td><input type="text" name="from"> 例:山田<yamada@yamada.co.jp></td></tr>
<tr><td>送信先(To)</td><td><input type="text" name="to"></td></tr>
<tr><td>タイトル</td><td><input type="text" name="subject"></td></tr>
<tr><td>本文</td><td><textarea name="message" cols="50" rows="5">
PHP送信メール2 TEXTメール基本-mb_send_mail関数/UTF-8
■特殊文字(環境依存文字)テスト
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
㈱ ㌔ 髙 Ⅷ ㌫ ㎏ ㍼
侍ジャパン14年ぶり3度目の世界一!
WBC史上初 二刀流で活躍の大谷翔平が大会MVP獲得!
【2023 WORLD BASEBALL CLASSIC 決勝ハイライト】
3月22日 アメリカ 2 - 3 日本
</textarea></td></tr>
<tr><td></td><td><input type="submit" name="send" value="送信"></td></tr>
</form>
</body>
</html>
(3)メール送信確認結果
メール送信確認結果は、日本語を含むFromアドレス名称、件名および特殊文字(例:①)や絵文字アイコン(例:😀)を含め本文など、正しく表示されます。
項番 | 送信内容 | @yahoo.co.jp | @outlook.jp | @gmail.com | 携帯@docomo.ne.jp | 備 考 |
1 | Fromアドレス名称 | OK | ||||
2 | 件名 | OK | ||||
3 | 本文 (絵文字アイコン/特殊文字含む) | OK | ||||
4 | その他 | |||||
記事 |
4.PHP送信メール07 携帯HTMLメール - mb_send_mail関数 UTF-8
・呼び出し方 - メールを送信します
- 送信先アドレス(to)
メールを送信したい宛先アドレス。
複数の宛先にメールを送信する場合は、コンマ区切りで複数のアドレスを指定(入力)します。
(例)"to1@example.com,to2@example.com,to3@example.com" - 件名(subject)
件名は1行あたりの文字制限の半角78文字まで入力できます(下メール本文を参照)。
ただし、outlookメールの場合、全角18/半角36文字以内です(オーバーの場合文字化け)。 - メール本文(message)
メールの本文。
本文メッセージの改行コードは CRLF (\r\n) となります。各行の長さは 70 文字を超えては いけません。 改行も含めた文字列を代入できますが、一行あたりの長さは70文字未満でなければなりません。そのため日本語の場合は35文字以下になります。 - 追加ヘッダー(headers) (オプション)
メールヘッダーの後に追加挿入されます。
通常、これには追加のヘッダ(From、Cc、Bcc)のために用いられます。メールを送信する際には、必ず Fromヘッダーが含まれていなければなりません。
PHP7.2.0以降はstring型とarray型どちらでも使用できます。それ以前はstring型のみになります。
複数のヘッダを追加する場合は CRLF(\r\n)で区切ります。
「From」ヘッダーは、php.iniでデフォルト値を指定している場合は、省略することができます。
Fromメールアドレスは、PHP送信メールアプリの収容ドメインのメールアドレスであること。
【例】xxxx@urbanqee.com
(1) mail関数を使用して、携帯HTMLメールを送信するPHPサンプル
<?php
//PHP送信メール07 携帯HTMLメール-mb_send_mail関数/UTF-8
//mb_language("Japanese"); //mb_send_mail関数の場合 HTMLメールの場合不要
//mb_internal_encoding("UTF-8"); //mb_send_mail関数の場合 HTMLメールの場合不要
$to = $_POST['to'];
$from = $_POST['from'];;
$name = $_POST['name'];
$subject = $_POST['subject'];
$message = $_POST['message']; // nl2br($_POST['message'])は、2行改行される
//ヘッダー
$name2 = mb_encode_mimeheader($name,"iso-2022-jp"); //携帯 OK
$headers = "From:" . $name2 . "<" .$from . ">" . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8';
//メール送信
if (mb_send_mail($to, $subject, $message, $headers)) {
echo 'メールを送信しました';
} else {
echo 'メールの送信に失敗しました';
}
?>
(2) メール送信する入力フォームHTMLサンプル
入力フォームの操作において、HTMLメール本文(HTML)全体を、入力フォームの本文(textarea)に入力(貼り付け)します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP送信メール07 携帯HTMLメール-mb_send_mail関数/UTF-8</title>
</head>
<body>
<form action="php-sendmail-example7.php" method="post">
<table id="form">
<th></th>
<td style="font-size:20px;font-Weight:bold">PHP送信メール07 携帯HTMLメール-mb_send_mail関数/UTF-8
</td>
</tr>
<th>差出人名称</th>
<td>
<input type="text" name="name" size="35" value="アーバンキュウ東京"><br>
</td>
</tr>
<th>差出人メールアドレス(From)</th>
<td>
<input type="text" name="from" size="35" value=""><br>
</td>
</tr>
<th>宛先メールアドレス(To)</th>
<td>
<input type="text" name="to" size="35" value=""><br>
</td>
</tr>
<th>件名</th>
<td>
<input type="text" name="subject" size="35" value="PHP送信メール7 携帯HTMLメール mb_send_mail"><br>
</td>
</tr>
<tr>
<th></th>
<td><textarea name="message" rows="7" cols="55"></textarea></td>
</tr>
</table>
<p class="btn">
<input type="submit" value="送信">
<input type="reset" value="リセット">
</p>
</form>
</body>
</html>
<html>
<head><!--PHP送信メール 携帯HTMLメール -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=SHIFT-JIS">
</head>
<body>
<h3>○○ドメインからのお知らせ<br>
(2023年1月18日)</h3>
<br>
<img src="画像URL" title="画像">
<span>😀</span>日頃より○○ドメインを<br>
ご利用いただき誠にありがとうございます。<br>
<a href="https://www.○○.com/">https://www.○○.com/</a>
<br>
<h3>【 重要 】2023年2月ドメイン価格についてのお知らせ</h3>
大変恐縮ではございますが、先日お知らせいたしました通り、2023年2月1日(水)からドメイン価格の変更を行わせていただくこととなりました。
価格変更に関する経緯につきましては「ドメインご契約のお手続き時の「サービス維持調整費」導入に関するご案内」をご覧ください。
<table>
<tr><td>①変更日</td><td>2023年2月1日(水)</td></tr>
<tr><td>②対象手続き</td><td>ドメインの登録・更新・移管手続き)</td></tr>
<tr><td>③対象TLD</td><td>全TLD)</td></tr>
<tr><td>④内容</td><td>詳細は、下記の価格表をご覧ください。)</td></tr>
</table>
<p>■ ドメイン価格改定一覧<br>
<a href="https://www.○○.com/2023/0118/xxxxx.pdf">PDF</a>
</p>
</body>
</html>
(3)メール送信確認結果
メール送信確認結果は、日本語を含むFromアドレス名称、件名および特殊文字(例:①)や絵文字アイコン(例:😀)を含め本文など、正しく表示されます。 ただし、本文内の画像が表示されません。
項番 | 送信内容 | @yahoo.co.jp | @outlook.jp | @gmail.com | 携帯@docomo.ne.jp | 備 考 |
1 | Fromアドレス名称 | OK | ||||
2 | 件名 | OK | ||||
3 | 本文 (絵文字アイコン/特殊文字含む) | OK | ||||
4 | 本文内画像 | 表示せず | ||||
記事 |
- ▼ サイト内関連リンク
- ・PHP送信メール テキストメール 基本編3例 ・応用編2例
- ・PHP送信メール HTMLメール 基本編2例・応用編1例
- ・PHP送信メール docomoガラケー携帯メール TEXT/HTMLメール4例(本ページ)