目次
1. はじめに
レンタルサーバーでも言えることですが、特に Google App Engine (GAE) などのクラウド環境では、サーバー環境を細かく設定することができませんので、「サーバー上のプログラムによってメールを送信する」というのが意外とやっかいです。
このような場合は、外部のメール送信サービスを利用した方が結局はラクだったりします。
ということで、GAE 環境で PHP (7.2) を使っている場合を前提として、SendGrid を利用したメール送信の手順を紹介します。
SendGrid はメール配信サービスで、メール送信APIも提供しています。12,000通/月 までであれば、無料で利用することが可能です。
2. SendGrid を GAE で使う手順 (php7.2)
(1) SendGrid にアカウンを作成する
New Account | SendGrid ページから、新規に SendGrid のアカウンを登録します。
(2) SendGrid サイトで API キーを生成する
API Keys | SendGrid ページで、APIキーを作成します。
(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 については、以下の記事も参考にしてください。
(4) プロジェクトに sendgrid パッケージを組み込みます
Composer を利用して、PHP用の sendgrid パッケージを導入します。
まず、sendgrid/sendgrid-php で説明されているように、composer.json
ファイルに以下を記述します。
{
"require": {
"sendgrid/sendgrid": "~7"
}
}
そして、以下のコマンドを実行するとパッケージがインストールされます。
composer install
(5) メール送信のコードを記述します
sendgrid/sendgrid や sendgrid/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] をオンにしてください。
4. おわりに
最初にも書きましたが、サーバー環境に深く触れることができない環境であれば、そのサーバー環境に頼ってメール送信させるよりも、今回紹介したような外部のメール配信サービスを使った方が却って安心です。SendGrid などのサービスを利用しましょう。