SQLの窓

2013年08月24日


PHP : メール送信(unix : パスワード不要)

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 として使う為に内容をチェック、整備




タグ:メール PHP
【PHP + 通信の最新記事】
posted by lightbox at 2013-08-24 16:03 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり