目次
メールフォームの設置
プラグインを利用しない、シンプルなメールフォームを設置します。
設置作業は以下の2点です。
参考サイト WordPress で自作メールフォーム【高速】プラグインを使わず画面遷移しない非同期処理で実装
- 固定ページにメールフォームのソースコードを設置する
- メール送信用 PHP ファイルのアップロードする
固定ページにソースコードを設置
固定ページに「お問合せ」ページを作成し、カスタムHTMLブロックに下記のコードを張り付ける。
<!-- HTML -->
<form id="mailform">
<div>
<label for="nameval">名前<span>(必須)</span></label> <input
type="text" name="nameval" id="nameval" required />
</div>
<div>
<label for="mailval">メールアドレス<span>(必須)</span></label> <input
type="email" name="mailval" id="mailval" required />
</div>
<div>
<label for="textval">内容<span>(必須)</span></label> <textarea
name="textval" id="textval" rows="12" required></textarea>
</div>
<p class="contact-submit">
<input type="submit" value="送信 »" id="submit"> <input
id="referrer" type="hidden" name="referrer" />
</p>
</form>
<div id="dispmsg"></div>
<!-- スタイルシート -->
<div>
<style>
#mailform input[type='text'],
#mailform input[type='email'] {
font-size: 1em;
width: 300px;
max-width: 100%;
margin-bottom: 13px;
box-sizing: border-box;
}
#mailform input,
#mailform button {
height: 40px;
padding: 0 10px;
}
#mailform textarea {
font-size: 1em;
margin-bottom: 13px;
padding: 2px 5px;
width:100%;
box-sizing: border-box;
}
#mailform label {
margin-bottom: 3px;
font-weight: bold;
display: block;
}
#mailform label span {
color: #aaa;
margin-left: 4px;
font-weight: normal;
}
#submit{
width:200px;
}
#dispmsg > p{
border: 3px solid #ffe3b3;
background: #ffffeb;
border-radius: 7px;
padding: 15px;
margin: 30px 0;
text-align: center;
font-weight: bold;
}
#dispmsg blockquote {
margin: 30px 0;
padding: 15px;
background-color: #f3f3f3
}
#dispmsg pre {
font-family: -apple-system,BlinkMacSystemFont,Meiryo,Verdana,
"Helvetica Neue","Segoe UI","Noto Sans Japanese","ヒラギノ角ゴ ProN W3",sans-serif;
line-height: 1.7;
white-space: pre-wrap;
background: #fafafa;
margin: 15px 0 0;
padding: 10px;
}
#dispmsg #errmsg{
background: #fff5f5;
border: 3px solid #fcc;
color: #e1536a;
}
</style>
</div>
<!-- JavaScript -->
<div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
jQuery(function ($) {
$("#referrer").val(document.referrer);
$("#mailform").submit(function(){
$.ajax({
url : 'https://uboatbuceo.com/sendmail/sendmail.php',
type: 'POST',
dataType: 'json',
data: $(this).serialize()
})
.done( function(data){
$("#dispmsg").empty();
$("#dispmsg").html(data.dispmsg);
if(data.errflg != 1){
$("#mailform").remove();
}
})
.fail( function(data){
alert('メール送信に失敗しました');
})
return false;
});
});
</script>
</div>
メールフォームのソースコードの修正点
オリジナルのソースコードをサイトに合わせて修正しています。
修正点1 入力欄の「ウェブサイト」は不要なので削除しています。
<div>
<label for="urlval">ウェブサイト</label> <input
type="text" name="urlval" id="urlval" />
</div>
修正点2 100行目の$.ajax部分のURLをサイトのURLに合わせて修正しています。
url : https://uboatbuceo.com/sendmail/sendmail.php'',
メール送信用 PHP ソースコード
PHPソースコードは下記の通りです。オリジナルコードを一部修正しています。
ファイル名は「sendmail.php」とし、フォルダー名「sendmail」に収納しFTPにてサイトにアップロードします。
アップロード先は、わかり易いようにルート直下のWPと同列にする。
<?php
// json 形式のデータを扱うための定義
header('Content-type: application/json');
// PHP5.1.0以上はタイムゾーンの定義が必須
date_default_timezone_set('Asia/Tokyo');
// --------------------------
// 個別設定項目(3つ)
// --------------------------
// 送信先メールアドレス
$to = 'garden@uboatbuceo.com';
// メールタイトル
$subject = 'ガーデニング問い合わせ';
// ドメイン(リファラチェックと送信元メールアドレスに利用)
$domain = 'https://dreamshops.net/';
//変数初期化
$errflg =0; // エラー判定フラグ
$dispmsg =''; // 画面出力内容
// 入力項目
$nameval = ''; // 名前
$mailval = ''; // メールアドレス
$textval = ''; // 内容
$referrer = ''; // 遷移元画面
// 画面からのデータを取得
if(isset($_POST['nameval'])){ $nameval = $_POST['nameval']; }
if(isset($_POST['mailval'])){ $mailval = $_POST['mailval']; }
if(isset($_POST['textval'])){ $textval = $_POST['textval']; }
if(isset($_POST['referrer'])){ $referrer = $_POST['referrer']; }
if(strpos($_SERVER['HTTP_REFERER'], $domain) === false){
// リファラチェック
$dispmsg = '<p id="errmsg">【リファラチェックエラー】お問い合わせフォームから入力されなかったため、メール送信できませんでした。</p>';
$errflg = 1;
}
else if($nameval == '' || $mailval == '' || $textval == ''){
//必須チェック
$dispmsg = '<p id="errmsg">【エラー】名前・メールアドレス・内容は必須項目です。</p>';
$errflg = 1;
}
else if(!preg_match("/^[\.!#%&\-_0-9a-zA-Z\?\/\+]+\@[!#%&\-_0-9a-z]+(\.[!#%&\-_0-9a-z]+)+$/", $mailval) || count( explode('@',$mailval) ) !=2){
//メールアドレスチェック
$dispmsg .= '<p id="errmsg">【エラー】メールアドレスの形式が正しくありません。</p>';
$errflg = 1;
}
else{
// メールデータ作成
$subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,'JIS','UTF-8'))."?=";
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$message= '名前:'.$nameval."\n";
$message.='メール:'.$mailval."\n";
$message.="\n――――――――――――――――――――――――――――――\n\n";
$message.=$textval;
$message.="\n\n――――――――――――――――――――――――――――――\n";
$message.='送信日時:'.date( "Y/m/d (D) H:i:s", time() )."\n";
$message.='送信元IPアドレス:'.@$_SERVER["REMOTE_ADDR"]."\n";
$message.='送信元ホスト名:'.getHostByAddr(getenv('REMOTE_ADDR'))."\n";
$message.='リファラURL:'.$referrer."\n";
$message.='お問い合わせページ:'.@$_SERVER['HTTP_REFERER']."\n";
$fromName = mb_encode_mimeheader(mb_convert_encoding($nameval,'JIS','UTF-8'));
$header ='From: '.$fromName.'<wordpress@'.$domain.'>'."\n";
$header.='Reply-To: '.$mailval."\n";
$header.='Content-Type:text/plain;charset=iso-2022-jp\nX-Mailer: PHP/'.phpversion();
// メール送信
$retmail = mail($to,$subject,$message,$header);
// 送信結果の判定
if( $retmail ){
$dispmsg ='<p class="success">メールを送信しました。返信までしばらくお待ちください。</p>';
$dispmsg.='<blockquote><p>名前: '.hsc_utf8($nameval).'<br />';
$dispmsg.= 'メール: '.hsc_utf8($mailval).'<br />';
$dispmsg.= '<pre>'.hsc_utf8($textval).'</pre></blockquote>';
}else{
$dispmsg .= '<p id="errmsg">【エラー】メール送信に失敗しました。。</p>';
$errflg = 1;
}
}
// 処理結果を画面に戻す
$result = array('errflg'=>$errflg, 'dispmsg'=>$dispmsg);
echo json_encode( $result );
// HTMLエスケープ処理
function hsc_utf8($str) {
return htmlspecialchars($str, ENT_QUOTES,'UTF-8');
}
?>
PHPコードの修正箇所
オリジナルのPHPを2か所修正しています。
修正1 メールアドレス等をサイトに合わせて修正しています。
// 送信先メールアドレス
$to = 'garden@uboatbuceo.com';
// メールタイトル
$subject = 'お問い合わせフォームより';
// ドメイン(リファラチェックと送信元メールアドレスに利用)
$domain = 'https://uboatbuceo.com/';
修正2 オリジナルのコードではメールの内容が文字化けするので「メールデータ作成」を修正しています。
// メールデータ作成
$subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,'JIS','UTF-8'))."?=";
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$message= '名前:'.$nameval."\n";
$message.='メール:'.$mailval."\n";
$message.="\n――――――――――――――――――――――――――――――\n\n";
$message.=$textval;
$message.="\n\n――――――――――――――――――――――――――――――\n";
$message.='送信日時:'.date( "Y/m/d (D) H:i:s", time() )."\n";
$message.='送信元IPアドレス:'.@$_SERVER["REMOTE_ADDR"]."\n";
$message.='送信元ホスト名:'.getHostByAddr(getenv('REMOTE_ADDR'))."\n";
$message.='リファラURL:'.$referrer."\n";
$message.='お問い合わせページ:'.@$_SERVER['HTTP_REFERER']."\n";
$fromName = mb_encode_mimeheader(mb_convert_encoding($nameval,'JIS','UTF-8'));
$header ='From: '.$fromName.'<wordpress@'.$domain.'>'."\n";
$header.='Reply-To: '.$mailval."\n";
$header.='Content-Type:text/plain;charset=iso-2022-jp\nX-Mailer: PHP/'.phpversion();