SQLの窓

2015年11月05日


PHP : mb_send_mail を使用した自家用メール送信 API

連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス ) では、$_GET でメール用のクラスのテストを行いましたが、実際にレンタルサーバに置いて、自分専用の API として整備しました。

ブラウザからも直接使えるように、header( "Access-Control-Allow-Origin: *" ); を実行しています。

自分専用ですが、イザという時に全て遮断できるように簡易パスワードを設定してあります。

呼び出し側は POST で送信して、FORM 要素を使用する場合は、name の値を クラスのプロパティと一致させるだけで利用可能です。( 但し差出人のメールアドレスは仕様上固定です )

{ "error": "nothing" } は、正常終了です
<?php
header( "Content-Type: application/json; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );
header( "Access-Control-Allow-Origin: *" );

mb_language( "ja" );
mb_internal_encoding("utf-8");

if ( $_POST['pass'] != "簡易パスワード" ) {
	print '{ "error": "no pass" }';
	exit();
}

$mail = new mail_data();

$_POST['from_address'] = "サーバ側で認証の必要の無いメールアドレス";

$mail->send_mail_set($_POST);

$result = $mail->send_mail();

if ( $result ) {
	print '{ "error": "nothing" }';
}
else {
	print '{ "error": "mb_send_mail" }';
}

// ***********************************************
// メール処理用クラス
// ***********************************************
class mail_data {

	public $from_address;
	public $from_text;
	public $to_address;
	public $to_text;
	public $subject;
	public $body;

	// ***********************************************
	// 連想配列のキー部分がプロパティと一致したらセット
	// ***********************************************
	public function send_mail_set( $data ) {

		foreach( $data as $k => $v ) {
			if ( property_exists( $this, $k ) ) {
				$this->{$k} = $v;
			}
		}

	}

	// ***********************************************
	// サーバー(メールサーバ)送信処理
	// ***********************************************
	public function send_mail() {

		$from = mb_convert_encoding( $this->from_text, "JIS", "utf-8" );
		$from = "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= <{$this->from_address}>";
		$to = mb_convert_encoding( $this->to_text, "JIS", "utf-8" );
		$to = "=?ISO-2022-JP?B?" . base64_encode($to) . "?= <{$this->to_address}>";
		return mb_send_mail($to, $this->subject, $this->body, $from );
	}

}
?>


ブラウザからの ajax を想定していますが、以下は FORM による 直接テスト用の画面になります

send_test.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>

<style>
.title {
	display: inline-block;
	width: 150px;
	padding: 15px;
}

.entry {
	display: inline-block;
	width: 350px;
	padding: 15px;
}

</style>
<script>
// jQuery 初期処理
$(function() {

	$("input,textarea").prop("required", true );

});
</script>
</head>
<body>
<div>

<?php
// -------------------------------------
// フォーム開始
// -------------------------------------
?>
<form 
	method="post"
	action="send_mail.php"
	target="_self">
<?php
// -------------------------------------
// 簡易パスワード
// -------------------------------------
?>
<input 
	type="hidden"
	name="pass"
	value="簡易パスワード">


<div class="title">差出人(日本語)</div>
<div class="entry">
	<input
		type="text"
		name="from_text"
		maxlength="50"
		style="width:200px">
</div>

<br>

<div class="title">宛先</div>
<div class="entry">
	<input
		type="text"
		name="to_address"
		style="width:200px">
</div>

<br>

<div class="title">宛先(日本語)</div>
<div class="entry">
	<input
		type="text"
		name="to_text"
		style="width:200px">
</div>

<br>

<div class="title">件名</div>
<div class="entry">
	<input
		type="text"
		name="subject"
		style="width:200px">
</div>

<br>

<div class="title" style='vertical-align:top'>本文</div>
<div class="entry">
	<textarea
		name="body"
		style="width:200px;height:150px;"></textarea>
</div>

<br>


<div class="title"></div>
<div class="entry">
	<input
		type="submit"
		name="send"
		value="送信">
</div>

</form>

</body>
</html>





【PHP + 通信の最新記事】
posted by lightbox at 2015-11-05 21:39 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり

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

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