【保存版】XAMPP ローカル環境からGmailを送信する

wordpress ※Web開発
XAMPP ローカル環境からGmailを送信する - Qiita
はじめに前回予約フォームを作成しました。今回はこのフォームに登録したあアドレスには予約完了、管理者のアドレスには受付完了のメールが届くようにします。Gmail側でアプリパスワードを取得する使…

【2023年版】XAMPPでGmailを送信する方法

【2023年版】XAMPPでGmailを送信する方法|Code for Fun
この記事では「XAMPP から Gmail 経由でメール送信する方法」を紹介しています。 XAMPP には Sendmail がインストールされているので、Gmail の情報を登録すれば簡単にメール送信を行うことができます。 ローカル環境で

はじめに

前回予約フォームを作成しました。
今回はこのフォームに登録したあアドレスには予約完了、管理者のアドレスには受付完了のメールが届くようにします。

Gmail側でアプリパスワードを取得する

使用するGmail側でアプリパスワードを発行します。
まずはGoogleアカウントの2段階認証を有効に設定されているか確認します。

Googleのアカウントページの「セキュリティ」を選択します。

「2段階認証プロセス」がオンになっていればパスワードの発行が可能です。
オンになっていない場合は2段階認証の許可を参照し、設定します。
パスワード発行のため、「アプリ パスワード」をクリックします。
(※一度生成済みなので、過去のものが表示されていることはご了承ください。。)

「アプリを選択」では「メール」を選択します。

「デバイスを選択」では「その他(名前を入力)」を選択します。

「sendmail」を入力します。

生成されたパスワードが表示されたらメモしておきます。

Xampp側を更新する

C:\xampp\sendmail配下に配置されている「sendmail.ini」をエディタで開きます。

以下の通り更新します。

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のあるファイルパスを指定します。

php.ini

[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の再起動

ApacheをStopし、再度Startします。

動作確認

C:\xampp\htdocs直下に以下のテスト用ソースコードを「testmail.php」の名前で保存します。

test.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が届いて大成功!

予約フォームに組み込む

予約フォームで登録した情報も用いて予約者、管理者にメールを送信します。

予約者に対する予約完了メール

calendar.php

<?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);
?>
image.png

管理者に対する予約受付メール

calendar.php

<?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);
?>
image.png

さいごに

sendmail.ini側しか更新できていなかったため、テストメールが送信できませんでした。
送信できない時の解決策、設定を確認し、php.iniを更新することでメールの受信を確認することができました。
次はカレンダーに表示させる情報を増やしたいです。

タイトルとURLをコピーしました