はじめに
前回予約フォームを作成しました。
今回はこのフォームに登録したあアドレスには予約完了、管理者のアドレスには受付完了のメールが届くようにします。
Gmail側でアプリパスワードを取得する
使用するGmail側でアプリパスワードを発行します。
まずはGoogleアカウントの2段階認証を有効に設定されているか確認します。
Googleのアカウントページの「セキュリティ」を選択します。
「2段階認証プロセス」がオンになっていればパスワードの発行が可能です。
オンになっていない場合は2段階認証の許可を参照し、設定します。
パスワード発行のため、「アプリ パスワード」をクリックします。
(※一度生成済みなので、過去のものが表示されていることはご了承ください。。)
「アプリを選択」では「メール」を選択します。
「デバイスを選択」では「その他(名前を入力)」を選択します。
「sendmail」を入力します。
生成されたパスワードが表示されたらメモしておきます。
Xampp側を更新する
C:\xampp\sendmail配下に配置されている「sendmail.ini」をエディタで開きます。
以下の通り更新します。
smtp_server=smtp.gmail.com
smtp_port=587
smtp_ssl=auto
auth_username=パスワードを発行したメールアドレスを記載(送信元メールアドレス)
auth_password=発行したパスワードを記載
C:\xampp\php配下に配置されている「php.ini」をエディタで開きます。
以下の通り更新します。
SMTP と smtp_port が有効の場合はコメントアウトし、 sendmail_path にsendmail.exeのあるファイルパスを指定します。
[mail function]
; For Win32 only.
; https://php.net/smtp
;SMTP=localhost
; https://php.net/smtp-port
;smtp_port=25
; For Win32 only.
; https://php.net/sendmail-from
;sendmail_from = test@example.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; https://php.net/sendmail-path
sendmail_path ="\"C:\xampp\sendmail\sendmail.exe\" -t"
Apacheの再起動
動作確認
C:\xampp\htdocs直下に以下のテスト用ソースコードを「testmail.php」の名前で保存します。
<?php
$to = '送信先のメールアドレスを記載';
$subject = 'sample';
$message = 'success!!';
$headers = 'From: testmail@gmail.com' . "\r\n";
if(mail($to, $subject, $message, $headers)){
echo "メール送信は成功しました!!!";
}else{
echo "メールは送信できませんでした。。。";
}
?>
localhost\testmail.phpをブラウザで開きます。
ブラウザに「メール送信は成功しました!!!」の表示と、指定したアドレスにGmailが届いて大成功!
予約フォームに組み込む
予約フォームで登録した情報も用いて予約者、管理者にメールを送信します。
予約者に対する予約完了メール
<?php
//エンドユーザーへの予約完了連絡
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = $mail;
$subject = "予約完了のお知らせ";
$headers = "From: from@example.com";
$message ='ご予約内容の確認です。' . "\r\n" .
'お名前:' . "{$name}\r\n" .
'電話番号:' . "{$number}\r\n" .
'メールアドレス:' . "{$mail}\r\n" .
'ご予約期日:' . "{$date}\r\n" .
'ご予約人数:' . "{$member}" . '人' . "\r\n" .
'ご参加お待ちしております。';
mb_send_mail($to, $subject, $message, $headers);
?>
管理者に対する予約受付メール
<?php
//管理者への予約受付連絡
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$toAdmin = '管理者のメールアドレスを記載';
$subjectAdmin = "予約受付のお知らせ";
$headersAdmin = "From: from@example.com";
$messageAdmin ='受付内容の確認です。' . "\r\n" .
'お名前:' . "{$name}" . '様' . "\r\n" .
'電話番号:' . "{$number}\r\n" .
'メールアドレス:' . "{$mail}\r\n" .
'ご予約期日:' . "{$date}\r\n" .
'ご予約人数:' . "{$member}" . '人' . "\r\n";
mb_send_mail($toAdmin, $subjectAdmin, $messageAdmin, $headersAdmin);
?>
さいごに
sendmail.ini側しか更新できていなかったため、テストメールが送信できませんでした。
送信できない時の解決策、設定を確認し、php.iniを更新することでメールの受信を確認することができました。
次はカレンダーに表示させる情報を増やしたいです。