問合せフォームの内容を、PHPでメール送信&Googleスプレッドシートにも追加する方法
- 2022年5月19日
- by SendGrid
- Category: 技術ネタ
今回は、
- PHPのSendGrid公式ライブラリを使った、問合せフォームのサンプル
- Zapierを使った、問合せフォームの内容をGoogleスプレッドシートにも追加する方法
についてご紹介します。
前提条件
なお今回は、PHP 8.0.19、composer 2.0.13、git 2.29.2の環境で動作を確認しました。
本記事の内容はMac上に環境構築したものですが、その他のOSでも基本的に手順は同じです。Windowsの場合、cpはcopyコマンドに読み替えてください。
準備
コードサンプルをリポジトリからクローンします。
git clone https://github.com/sendgridjp/sendgridjp-php-example-contact-form.git
リポジトリ内に移動して.env.exampleをコピーします。
cd sendgridjp-php-example-contact-form cp .env.example .env
.envファイルを編集(後述)します。
composerによる依存関係の解決を行います。
composer install
.envファイルの編集
.envファイルは以下のような内容になっています。
SENDGRID_APIKEY=your_apikey BCC=you@youremail.com FROM=you@youremail.com
- SENDGRID_APIKEY
SendGridのAPIキーを指定してください。 - BCC
フォームの内容を送信する宛先を指定してください。 - FROM
フォームの内容を送信する際のFromアドレスを指定してください。
コードの実行
この問合せフォームは、HTML、CSS、PHPで構成されています。
入力フォーム(Form.html)
問合せ内容を入力してSendボタンをクリックすると、formの内容を mailer.php にPOSTします。スタイルを変更する場合は、Form.css をカスタマイズしてください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>問合せフォームサンプル</title> <link rel="stylesheet" href="Form.css" /> </head> <body> <!-- 問合せフォーム ▼ここから▼ --> <div id="contact"> <div"> <div"> <center><h2>問合せフォーム</h2> <form class="contact" action="mailer.php" method="post"> <!-- 入力項目をカスタマイズする場合は以下を変更します。mailer.phpのPOSTフィールドも合わせて変更してください。 --> <p>Name:</p> <input type="text" name="name" /> <p>E-mail:</p> <input type="text" name="email" /> <p>Subject:</p> <input type="text" name="subject" /> <p>Message:</p> <textarea name="message" style="width: 45%; text-align: center;">Please leave a short message here</textarea></p> <input type="submit" value="Send"> <!-- Send button--> </form> </center> </div> </div> </div> <!-- 問合せフォーム ▲ここまで▲ --> </body> </html>
メール送信PHP(mailer.php)
フォームの内容をメールで送信します。メール送信が完了すると thanks.html にリダイレクトします。
<?php require 'vendor/autoload.php'; $dotenv = Dotenv\Dotenv::createMutable(__DIR__); $dotenv->load(); $sendgrid_apikey = $_ENV['SENDGRID_APIKEY']; $from = $_ENV['FROM']; $bcc = $_ENV['BCC']; $name = $_POST['name']; $emailadd = $_POST['email']; $subject = $_POST['subject']; $message = $_POST['message']; $sendgrid = new SendGrid($sendgrid_apikey, array("turn_off_ssl_verification" => true)); $email = new SendGrid\Mail\Mail(); $email->addTo($emailadd); $email->addBcc($bcc); $email->setFrom($from, "問合せフォーム"); $email->setSubject("[ContactForm] $subject"); $email->addContent("text/plain", "Name: $name \r\nEmail: $emailadd \r\nSubject: $subject \r\nMessage: $message \r\n"); $email->addContent("text/html", "<strong>Name:</strong> $name<br /> <strong>Email:</strong> $emailadd<br /> <strong>Subject:</strong> $subject<br /> <strong>Message:</strong> $message<br /> "); $email->addCategory('contact'); $response = $sendgrid->send($email); //var_dump($response); // 正常終了時にthanks.htmlへリダイレクト header('Location: thanks.html'); exit();
すべてのファイルをご自身のWebサーバにアップロードし、Form.html にアクセスしてください。問合せ内容を入力して「Send」ボタンをクリックすると、「E-mail」に入力した宛先(問合せ元の宛先)をTo、.env で指定した宛先(フォーム管理者の宛先など)をBccとしてメールが送信されます。
送信後の画面(thanks.html)
送信されたメール
Googleスプレッドシートに “Zap” する
ここからは Zapier のアカウント(無料で作成できます)が必要になります。
今回は、Gmailで受信したメールの内容をGoogleドキュメントのスプレッドシートにPOSTしてみます。問合せフォームの送信先(.env の BCC の値)には、Gmailのメールアドレスを設定しておきましょう。
まずは、受信したメールの内容を投入するためのスプレッドシートを準備しておきます。適当なスプレッドシートを作成してください。
続いて、Zapierの設定をします。ログインして ”Create A Zap” をクリックすると、画面上に手順が示されるので簡単に設定できます。
以下の通り、条件にマッチする新着メールがGmailに届いたらスプレッドシートに行を追加するよう連携を作成します(今回は、メールの件名に「[ContactForm]」を含むことを条件としました)。
Gmail:
スプレッドシート:
Zapierの設定ができたら、さきほどの問合せフォームからメールを送信します。しばらく待つと、スプレッドシートにメールの内容が追加されます。
このように、Zapierのセットアップはとても簡単です。”Zap” できるアプリが沢山用意されているので、色々と遊んでみてください。