問合せフォームの内容を、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” できるアプリが沢山用意されているので、色々と遊んでみてください。


