<?php

$scriptVersion = '2.33';
include_once('sfm_config.php'); // 設定ファイル読み込み

// 内部エンコードを設定
if (!extension_loaded('mbstring')) {
	Err('mbstring関数が利用できません');
}
$internalEnc = 'EUC-JP';
mb_language('ja');
mb_internal_encoding($internalEnc);


// メイン
if (!isset($mailTo[0])) {
	Err('受取先メールアドレスが設定されてません');
}
$mode = (isset($_POST['mode'])) ? $_POST['mode'] : '';
$script_name = preg_replace('/.+\/(.*)/', "$1", $_SERVER['REQUEST_URI']);

switch ($mode) {
case 'SEND': //メール送信
	session_cache_limiter('nocache');
	session_start();
	if (!isset($_SESSION['SFM'])) {
		Err('セッションデータがありません');
	}
	$mailTo = (isset($mailTo[$_SESSION['SFM']['mailToNum']])) ? $mailTo[$_SESSION['SFM']['mailToNum']] : $mailTo[0];

	// 指定先にメール送信
	$mailFrom = (!isset($_SESSION['SFM']['email'])) ? 'S.B. Formmail' : $_SESSION['SFM']['email'];
	include_once('sfm_mail_tmpl.php'); // メール送信用テンプレート
	SendMail($mailTo, $mailSubject, $mailMessage, $mailFrom, $mailBcc);
	// メール自動返信
	if ((isset($_POST['autoReply']) || isset($_SESSION['SFM']['autoReply'])) && isset($_SESSION['SFM']['email']) && is_file('sfm_reply_tmpl.php')) {
		include_once('sfm_reply_tmpl.php'); // 自動返信用テンプレート
		$replyAddress = ($replyAddress) ? $replyAddress : $mailTo;
		if ($replyName) {
			$replyAddress = $replyName . " <{$replyAddress}>";
		}
		SendMail($_SESSION['SFM']['email'], $replySubject, $replyMessage, $replyAddress, $replyBcc);
	}

	unset($_SESSION['SFM']);
	include_once('completion.html'); // 送信完了画面HTMLテンプレート
	break;

case 'CONFIRM': // データ処理と確認
	$protcol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
	if ($_SERVER['HTTP_REFERER'] != $protcol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] && $refCheck) {
		Err('外部から利用は出来ません');
	}
	session_cache_limiter('nocache');
	session_start();
	unset($_SESSION['SFM']);

	$error = $email = '';
	foreach ($_POST as $key => $value) {
		if (is_array($value)) {
			$value = implode("\t", $value);
		}
		if (!$ill_slash) {
			$value = (!get_magic_quotes_gpc()) ? addslashes($value) : $value;
		}
		if (!$ill_char) {
			$value = mb_convert_encoding($value, $internalEnc, $baseEnc);
		}
		$value = mb_convert_kana($value, 'KV', $internalEnc);
		$name = preg_replace('/(.+)_s$/', "$1", $key);
		if (preg_match('/_s$/', $key) && $value == '') {
			$_SESSION['SFM'][$name] = '::INPUT ERROR::';
			$error = 1;
		} elseif ($name == 'email' && $value) {
			if (!preg_match("/^[\w\-\.]+\@[\w\-\.]+\.([a-z]+)$/", $value)) {
				$_SESSION['SFM']['email'] = '::EMAIL ERROR::';
				$error = $email = 1;
			} else {
				$_SESSION['SFM']['email'] = $email = $value;
			}
		} elseif ($name == 'emailcheck') {
			if ($email != 1 && $email != $value) {
				$_SESSION['SFM']['email'] = '::EMAIL CHECK ERROR::';
				$error = 1;
			}
		} elseif ($maxText && strlen($value) > $maxText) {
			$_SESSION['SFM'][$name] = '::MAXTEXT ERROR::';
			$error = 1;
		} else {
			$_SESSION['SFM'][$name] = $value;
		}
	}
	$_SESSION['SFM']['InputErr'] = $error;
	$sfm_script = $script_name . ((SID) ? '?' . strip_tags(SID) : '');
	include_once('confirm.html'); // 確認画面用HTMLテンプレート
	break;

default: // 入力フォーム表示
	session_cache_limiter('private_no_expire');
	session_start();
	unset($_SESSION['SFM']);
	$sfm_script = $script_name;
	include_once('trial.html'); // 入力フォーム用HTMLテンプレート
}
exit;


// *** HTMLデータ整形
function FORM_DATA_H($name) {
	$errArray = array(
		'::INPUT ERROR::' => '<span class="red">必須項目です</span>',
		'::EMAIL ERROR::' => '<span class="red">メールアドレスが正しくありません</span>',
		'::EMAIL CHECK ERROR::' => '<span class="red">メールアドレスが一致しません</span>',
		'::MAXTEXT ERROR::' => '<span class="red">文字数が多すぎます（' . number_format($GLOBALS['maxText']) . '字まで</span>）'
	);
	$value = (isset($_SESSION['SFM'][$name])) ? $_SESSION['SFM'][$name] : '';
	$value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
	$value = str_replace("\t", "\n", $value); // 表示用に複数項目を改行
	$value = nl2br(htmlspecialchars($value, ENT_QUOTES, 'EUC-JP'));
	$value = (preg_match('/::.+::/', $value)) ? '<span class="ERR">' . $errArray[$value] . '</span>' : $value;
	$value = ($value != '') ? $value : '&nbsp;';
	return mb_convert_encoding($value, $GLOBALS['baseEnc'], $GLOBALS['internalEnc']);
}


// *** MAILデータ整形
function FORM_DATA_M($name) {
	$value = (isset($_SESSION['SFM'][$name])) ? $_SESSION['SFM'][$name] : '';
	$value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
	$value = str_replace("\t", ',', $value); // メール用に複数項目をカンマ区切り
	return $value;
}


// *** メール送信処理
function SendMail($mailTo, $mailSubject, $mailMessage, $mailFrom, $mailBcc) {
	$mailHeader  = 'From: ' . MailEnc($mailFrom) . "\n";
	if ($mailBcc) {
		$mailHeader .= 'Bcc: ' . $mailBcc . "\n";
	}
	$mailHeader .= 'X-Mailer: Sapphirus.Biz Formmail/' . $GLOBALS['scriptVersion'] . '(PHP/' . phpversion() . ')';
	$mailMessage = preg_replace('/\r\n|\r/', "\n", $mailMessage);
	if (isset($GLOBALS['returnPath']) && $GLOBALS['returnPath']) {
		mb_send_mail($mailTo, $mailSubject, $mailMessage, $mailHeader, "-f{$GLOBALS['returnPath']}");
	} else {
		mb_send_mail($mailTo, $mailSubject, $mailMessage, $mailHeader);
	}
	return;
}


// メールエンコード処理
function MailEnc($mail_address) {
	if (preg_match('/(.+)(\s<.+\@.+>)$/', $mail_address, $tmp)) {
		$tmp[1] = mb_encode_mimeheader($tmp[1]);
		$mail_address = $tmp[1] . $tmp[2];
	};
	return $mail_address;
}


/* ::ユーザー情報取得 */
function USERINFO() {
	return @gethostbyaddr($_SERVER['REMOTE_ADDR']) . "\n"
	. $_SERVER['HTTP_USER_AGENT'] . "\n"
	. date("Y/m/d - H:i:s");
}


/* ::エラー表示HTML */
function Err($err) {
	echo <<< EOM
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<title>エラー：$err</title>
</head>
<body style="font-size: 12px; line-height: 1.8em;">
<strong>エラー : </strong>$err<br>
<input type="button" value="戻る" onclick="history.back();">
</body></html>

EOM;
	exit;
}

?>
