sendmail は使用できません。sakura 等、自分で借りているサーバーで動くはずです。また、このような URL を用意しておけば、Android 等のメール送信用の API としてテストに使う事ができます。
❶ さくらインターネット、サーバコントロールパネル
( 作成直後は、容量制限が 200M なので 2M 程度に変更しておきます )
❷ Gmail の GUI( メールヘッダ等を確認するのに役立ちます )
❸ メーセージソースの一部
To: =?ISO-2022-JP?B?GyRCMDhAaBsoQg==?= <??????????@gmail.com>
Subject: =?ISO-2022-JP?B?GyRCJWEhPCVrJE4lPyUkJUgbKEI=?=
=?ISO-2022-JP?B?GyRCJWskSCRKJGokXiQ5GyhCKGxpZ2h0Ym94KQ==?=
From: =?ISO-2022-JP?B?GyRCO2QbKEI=?= <phpuser@??????????.sakura.ne.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
$BK\J8$r(B
$BAw?.$7$^$9(B
$B%+%J(B
$B%+%J(B
▼ ここからが本題です
PHP でメール処理をする場合、いろいろなキャラクタセットが入り組んで来るので注意が必要です。
ここではだいたいですが、このようになっています。
❶ 入力 HTML : EUC-JP
❷ PHP のソース : UTF-8
❸ PHP の内部エンコーディング : UTF-8
❹ メール内 : iso-2022-jp( 但しヘッダ内はBASE64変換 )
▼ mailtest.php
<?
header( "Content-Type: text/html; Charset=utf-8" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
foreach( $_POST as $Key => $Value ) {
$_POST[$Key] = str_replace("\\\\", "\\", $Value );
$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}
// ************************************************************************
// unix では、sendmail を使用します。
// 通常、この URL から信頼されているメールアドレス前提にしているので、
// セキュリティ情報は送る事ができません
// window 環境でもそれは同様なので、同一サーバーにメールサーバー
// を用意するか、COM+basp21でセキュリティ情報を使って送信する必要があります
// ************************************************************************
// mb_send_mail() は、e-mail をエンコードする際にこの設定を使用します
// ※ subject と body のみ
mb_language( "ja" );
mb_internal_encoding("utf-8");
// *********************************************************
// 使用するメールアドレス
// ※ $from_address は、この PHP があるサーバが
// ※ 管理しているメールサーバーのアドレスです
// ※ gmail に送ると、ヘッダーのソースを簡単に確認できます
// *********************************************************
$from_address = "phpuser@????????.sakura.ne.jp";
$to_address = "???????@gmail.com";
// *********************************************************
// 入力データが EUC-JP であると言う前提です
// ※ $subj はこの内部で設定しているので UTF-8 です。
// *********************************************************
$subj = "メールのタイトルとなります(lightbox)";
$body = mb_convert_encoding( $_POST['text'], mb_internal_encoding(), "EUC-JP" );
// *********************************************************
// 「半角カタカナ」を「全角カタカナ」に変換します
// *********************************************************
$body = mb_convert_kana($body,'K',mb_internal_encoding());
// *********************************************************
// 宛先と差出人は自分でエンコードする必要があります
// *********************************************************
$to = mb_encode_mimeheader( mb_convert_encoding("宛先","iso-2022-jp", mb_internal_encoding()) ) . " <{$to_address}>";
// *********************************************************
// From: は追加ヘッダーとして設定しています
// *********************************************************
$from = "From: " . mb_encode_mimeheader( mb_convert_encoding("私","iso-2022-jp", mb_internal_encoding()) ) . " <{$from_address}>";
$result = mb_send_mail($to, $subj, $body, $from );
if ( $result ) {
$result = "成功";
}
else {
$result = "失敗";
}
// ▼ この文字列は UTF-8 です
?>
メール送信が終了しました。<?= $result ?>
▼ 送信テスト用の HTML
<!doctype html>
<html lang="ja">
<head>
<title>sendmail</title>
<meta charset="euc-jp">
<style>
body {
margin: 0px;
}
textarea {
width:400px;
height:200px;
}
</style>
</head>
<body>
<form method="post" action="mailtest.php">
<textarea name="text"></textarea>
<br>
<input type="submit" name="send" value="送信">
</form>
</body>
</html>
関連する記事 ( SQLの窓 )
❶ Windows PHP(Pear)で、Gmail(SSL/465)を使ってメールを送る
❷ PEAR の Mail パッケージによるメール送信
❸ IE 拡張メニューで取得したテキストをメールで送る
更新履歴
2009-05-06 : 初回投稿
2013-08-24 : WEB 経由の API として使う為に内容をチェック、整備