1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

XAMPP ローカル環境からGmailを送信する

Posted at

はじめに

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

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

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

Googleのアカウントページの「セキュリティ」を選択します。
image.png
「2段階認証プロセス」がオンになっていればパスワードの発行が可能です。
オンになっていない場合は2段階認証の許可を参照し、設定します。
パスワード発行のため、「アプリ パスワード」をクリックします。
(※一度生成済みなので、過去のものが表示されていることはご了承ください。。)
image.png
「アプリを選択」では「メール」を選択します。
image.png
「デバイスを選択」では「その他(名前を入力)」を選択します。
image.png
「sendmail」を入力します。
image.png
生成されたパスワードが表示されたらメモしておきます。

Xampp側を更新する

C:\xampp\sendmail配下に配置されている「sendmail.ini」をエディタで開きます。
image.png
以下の通り更新します。

sendmail.ini
smtp_server=smtp.gmail.com
smtp_port=587
smtp_ssl=auto
auth_username=パスワードを発行したメールアドレスを記載(送信元メールアドレス)
auth_password=発行したパスワードを記載

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

以下の通り更新します。
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します。
image.png

動作確認

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

予約フォームに組み込む

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

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

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を更新することでメールの受信を確認することができました。
次はカレンダーに表示させる情報を増やしたいです。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?