PHP

SendGrid でメール送信する(Google App Engine, PHP7)

投稿日:

1. はじめに

レンタルサーバーでも言えることですが、特に Google App Engine (GAE) などのクラウド環境では、サーバー環境を細かく設定することができませんので、「サーバー上のプログラムによってメールを送信する」というのが意外とやっかいです。

このような場合は、外部のメール送信サービスを利用した方が結局はラクだったりします。

ということで、GAE 環境で PHP (7.2) を使っている場合を前提として、SendGrid を利用したメール送信の手順を紹介します。

SendGrid はメール配信サービスで、メール送信APIも提供しています。12,000通/月 までであれば、無料で利用することが可能です。

SendGrid のプラン比較表

2. SendGrid を GAE で使う手順 (php7.2)

(1) SendGrid にアカウンを作成する

New Account | SendGrid ページから、新規に SendGrid のアカウンを登録します。

[Start For Free]ボタンから登録できます
アカウント情報を入力する画面です

(2) SendGrid サイトで API キーを生成する

API Keys | SendGrid ページで、APIキーを作成します。

[Settings] – [API Keys] ページの [Create API Key]ボタンから追加できます

(3) GAE 用の app.yaml に APIキーを設定します

app.yaml ファイル内に直接APIキーを書いて Git などで管理するのは危険なので、例えば secret.yaml という名前のファイルを用意し、以下のようにこちらのファイル内に APIキーをセットした環境変数を設定します。

env_variables:
  SENDGRID_API_KEY: "XXXXXXXXXXXXXXXXXXX"

app.yaml ファイルから、この secret.yaml ファイルを読み込むようにしておきます。

(省略)
includes:
- secret.yaml

Gitなどのバージョン管理システムでは、この secret.yaml は管理させず、代わりに値の部分のみ空にした secret.yaml.dist ファイルを管理させるとよいでしょう。

PHP の Composer については、以下の記事も参考にしてください。

PHP

【PHP】Composer の使い方

2018.07.04

(4) プロジェクトに sendgrid パッケージを組み込みます

Composer を利用して、PHP用の sendgrid パッケージを導入します。

まず、sendgrid/sendgrid-php で説明されているように、composer.json ファイルに以下を記述します。

{
  "require": {
    "sendgrid/sendgrid": "~7"
  }
}

そして、以下のコマンドを実行するとパッケージがインストールされます。

composer install

(5) メール送信のコードを記述します

sendgrid/sendgridsendgrid/sendgrid-php にコードの記述例がたくさん載っています。例えば以下のコードを記述します。

<?php
use google\appengine\api\mail\Message;

$email = new \SendGrid\Mail\Mail();
$email->setFrom("{送信元メールアドレス}", "{送信元氏名}");
$email->setSubject("メールのタイトル");
$email->addTo("{送信先メールアドレス}", "{送信先氏名}");

$plainTextContent = new \SendGrid\Mail\PlainTextContent(
    "こんにちは!\n" .
    "テストメールです。\n" .
);
$email->addContent($plainTextContent);

$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));

try {
    $response = $sendgrid->send($email);
} catch (Exception $e) {
    syslog(LOG_ERR, 'Exception: '. $e->getMessage());
}

(6) メール配信の状況はSendGridのサイトで確認できます

送信したメールの情報を管理してくれるのは便利です

3. SendGrid で気になった設定

SendGrid を利用し、「プレーンテキスト (HTMLメールではなく)」で送信したメールの本文における「改行」が二重に出力されてしまうことがあります。

この場合は、[Settings] – [Mail Settings] ページにある [Plain Content] をオンにしてください。

[Settings] – [Mail Settings] – [Plain Content]

4. おわりに

最初にも書きましたが、サーバー環境に深く触れることができない環境であれば、そのサーバー環境に頼ってメール送信させるよりも、今回紹介したような外部のメール配信サービスを使った方が却って安心です。SendGrid などのサービスを利用しましょう。

5. 参考

📂-PHP

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Google App Engine

普通のPHPサイトをGAE(php72)上で実現する方法

普通のPHPサイトをGAE(php72)上で実現する方法について説明しています。

PHP

CentOS 6.8 の PHPを 5.4 から 7 に変更する

PHPのバージョンがいまだに 5.4のままの CentOS 6.8 があったので PHP 7 に更新した;) 環境 この環境では、Nginx + FPM + PHP が動いている。 手順 まずは、関連 …

PHP

Ubuntu で 複数のバージョンの PHP を使う手順

目次1. はじめに2. 前提とする環境 3. PHP 7.2 を導入する手順手順1:リポジトリを追加するツールをインストール手順2:リポジトリを追加手順3:PHP 7.2 をインストール4. PHP …

PHP

Composer を使って PSR-4 オートロードしている場合、composer.json は必要なくなる

PHP を使った開発でよく使う Composer に関するお話しです。 例えば、composer.json に以下のように記述して開発を行ったとします。 { … “autoload”: { “ps …

PHP

pecl install xxxx する際は、php -v と php-config –version が一致しているか確認してから行う

pecl install xxxx する際は、php -v と php-config –version が一致しているか確認してから行うとよいという話しです。