活用マニュアル

メールサーバー構築なしで、手軽にメール送信|SendGrid編

IDCFクラウドでは、SendGridのIDCF特典プランを利用することができます。
SendGridはSMTPサーバーとして利用したり、リスト形式の一斉配信が簡単に利用できるクラウド型メール配信サービスです。
豊富なAPIを備えており、SendGridを使用することで、一からメールサーバーを構築することなく、メール送信やメール配信などの処理をすることが可能です。

本書では、サーバーからサンプルスクリプト(php)を使用して送信する方法、およびSMTPサーバーとして指定してメールコマンドで送信する方法を記載します。
SendGridのIDCF特典プランを利用するには、IDCFクラウドのクラウドコンソール経由で申し込みをしていただくことで利用できます。
※SendGridの会員登録には、正規代理店の株式会社構造計画研究所による審査があります。会員登録は余裕をもって行うことをおすすめめします。

1. SendGridの会員登録とAPIキーの取得

SendGridの会員登録を行います。会員登録はIDCFクラウドにログインを行い、IDCFクラウドのメニューから特典会員登録ページへ行き、IDCFクラウドの特典付会員登録を行います。

会員登録を行った後、審査が完了すると、SendGridからログイン情報のお知らせがメールにて届きます。
メールに記載してあるユーザ名とパスワードでSendGridにログインを行い、APIキーを発行します。取得したAPIキーと発行されたアカウントを使用して作業を行いますので、
メモ帳などに貼り付けてコピー&ペーストで使用できるようにしておくとスムーズに作業できます。

① IDCFクラウドのコントロールパネルより提携サービスの「SendGrid」をクリックします。

② SendGridのページに遷移します。「特典付会員登録」ボタンをクリックします。

③ 申し込みページに遷移します。必要事項を記入して「確認画面へ」をクリックします。
※利用用途は検証目的であっても、できる限り詳細に記載することで審査がスムーズに進みやすくなります。

④ 登録内容確認ページに遷移します。登録情報に間違いがないか確認を行い、「登録」ボタンをクリックします。

⑤ 仮登録完了のメッセージ画面に遷移するので、ページ記載のとおり、登録したメールアドレスでメールを受信しているか確認を行います。

⑥ 登録したメールアドレスに「【SendGrid】仮登録完了のお知らせ」という題名のメールが届きますので、本文中のURLにアクセスして本登録を行います。

⑦ 登録完了のページが表示されます。この後、SendGrid の正規代理店である構造計画研究所にて審査が行われ、
登録したメールアドレスに本登録完了のメールが届きます。(通常、翌2営業日以内)

⑧ 登録したメールアドレスに「SendGridにようこそ!」という題名のメールが届きます。表示されているユーザ名をメモ帳などにコピーしておきます。

⑨ IDCFクラウドのコントロールパネルから提携サービスの「SendGrid」をクリックします。

⑩ SendGridのページに遷移します。「ログイン」をクリックします。

⑪ ログインページに遷移します。ユーザ名とパスワードを入力し「ログイン」をクリックします。

⑫ マイページに遷移します。「ダッシュボードへ」をクリックします。

⑬ ダッシュボードに遷移します。ポップアップメッセージが表示されている場合、「×」で閉じます。 
※連絡先のメールアドレス確認のため、後ほど登録することをおすすめいたします。(再度ログインした際に表示されます。)

⑭ メニューより「Settings」をクリックします。プルダウンメニューから「API Keys」をクリックします。

⑮ API Keysの画面に遷移します。「Create API Key」をクリックし、プルダウンメニューより「General API Key」をクリックします。

⑯ API Key作成画面に遷移します。「NAME OF THIS KEY」に任意の名前を入力します(ここではIDCF)。
権限の設定は「FULL ACCESS」と記載します(「FULL ACCESS」が無い項目は、「READ ACCESS」と記載)。
すべての権限を変更し、ページ上部の「Save」をクリックします。※権限はあとから変更できます。

⑰ 作成したAPI Keyをメモ帳などにコピーしておきます。

以上でSendGridの会員登録、およびAPI Keyの作成が完了しました。
次の章では発行したIDとAPI Keyを使用して作業を進めます。

2. APIを使用して、メールを送信

前項で作成したIDとAPI Keyを使用してphpスクリプトでメール送信をします。
以降の手順は「Webサイトの本番環境を構築したい(Web1台構成)」が完了した状態からとなります。


① GitでSendGridのプロジェクトからサンプルスクリプトをダウンロードします。

[root@Web01 ~]# git clone https://github.com/sendgridjp/sendgridjp-php-example.git
Initialized empty Git repository in /root/sendgridjp-php-example/.git/
remote: Counting objects: 111, done.
remote: Total 111 (delta 0), reused 0 (delta 0), pack-reused 110
Receiving objects: 100% (111/111), 590.58 KiB | 274 KiB/s, done.
Resolving deltas: 100% (68/68), done.
[root@Web01 ~]# 
							

② ダウンロードしたディレクトリに移動し、.envファイルをコピーします。

[root@Web01 ~]# cd sendgridjp-php-example
[root@Web01 sendgridjp-php-example]# cp .env.example .env 
[root@Web01 sendgridjp-php-example]# 
							

③ envファイルを編集します。viなどのテキストエディタでコピーしたサンプルを開き、API KEYと宛先、FROMアドレスを記載します。(宛先は3つ以上指定してください。)

[root@Web01 sendgridjp-php-example]# vi .env
--------------------------
API_KEY=[コピーしたAPI KEY]
TOS=[宛先1], [宛先2], [宛先3]
FROM=[FROMアドレス]
--------------------------
[root@Web01 sendgridjp-php-example]# 
							

④ composerをインストールします。

[root@Web01 sendgridjp-php-example]# curl -sS https://getcomposer.org/installer | php
Some settings on your machine may cause stability issues with Composer.
If you encounter issues, try to change the following:
~~~~~~~~~~~~~
Composer successfully installed to: /root/sendgridjp-php-example/composer.phar
Use it: php composer.phar
[root@Web01 sendgridjp-php-example]# 
							

⑤ phpのアップデートを行います。依存関係でエラーになるため、Postfixを削除します。

[root@Web01 sendgridjp-php-example]# yum install -y \
http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
~~~~~~~~~~~~~~~~
Installed:
  remi-release.noarch 0:6.6-2.el6.remi

Complete!
[root@Web01 sendgridjp-php-example]# yum -y remove postfix
Loaded plugins: fastestmirror, priorities
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
~~~~~~~~~~~~~~~~
Removed:
  postfix.x86_64 2:2.6.6-6.el6_5
Dependency Removed:
  cronie.x86_64 0:1.4.4-12.el6      cronie-anacron.x86_64 0:1.4.4-12.el6     crontabs.noarch 0:1.10-33.el6     redhat-lsb-core.x86_64 0:4.0-7.el6.centos
  sysstat.x86_64 0:9.0.4-22.el6

Complete!
[root@Web01 sendgridjp-php-example]# yum -y --enablerepo=remi update php
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
~~~~~~~~~~~~~~~~
Updated:
  php.x86_64 0:5.4.45-5.el6.remi

Dependency Updated:
  mysql-libs.x86_64 0:5.5.48-1.el6.remi  php-cli.x86_64 0:5.4.45-5.el6.remi  php-common.x86_64 0:5.4.45-5.el6.remi  php-mbstring.x86_64 0:5.4.45-5.el6.remi
  php-mysql.x86_64 0:5.4.45-5.el6.remi   php-pdo.x86_64 0:5.4.45-5.el6.remi

Complete!
[root@Web01 sendgridjp-php-example]# 
							

⑥ composerにて依存関係を解決させます。

[root@Web01 sendgridjp-php-example]# php composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
~~~~~~~~~~~~~
Writing lock file
Generating autoload files
[root@Web01 sendgridjp-php-example]# 
							

⑦ サンプルスクリプトの実行を行います。
※サンプルスクリプトの解説は以下URLを参照してください。
PHPでメール送信!SendGridを使って簡単に実装する方法

[root@Web01 sendgridjp-php-example]# php -f sendgrid-php-example.php
object(SendGrid\Response)#34 (4) {
  ["code"]=>
  int(200)
~~~~~~~~~~~~~
  string(21) "{"message":"success"}"
  ["body"]=>
  array(1) {
    ["message"]=>
    string(7) "success"
  }
}
[root@Web01 sendgridjp-php-example]# 
							

⑧ 実際にメールが届いているか確認し、ヘッダ情報からSendGridから送信されているか確認します。
(ヘッダ情報はRecived:の項目の1行目がsendgrid.netになっていれば、SendGridから送られていることを確認できます。)
※メールは「フクロウのお名前は○○さん」という題名で添付ファイル付きで受信しています。

以上でphpスクリプトを使用してSendGridのAPI経由で送信することができました。
サンプルスクリプトを編集することでさまざまなケースを体験できます。ぜひ、サンプルスクリプトを編集して試してみてください。

3. SMTPサーバーに指定して、メールを送信

SendGridをSMTPサーバーとして指定し、メールを送信します。メールはmailxコマンドを使用して送信します。
メール送信の認証は、親アカウント(今回発行されたユーザ名/パスワード)、サブユーザーの認証情報、MUC(Multiple User Credential)で作成した認証情報、
およびAPIキーを使用することができます。今回は親アカウントを使用して送信する例を記載します。

① ホームディレクトリに移動します。

[root@Web01 sendgridjp-php-example]# cd ~
[root@Web01 ~]# 
							

② メールの接続設定情報を作成します。SMTPサーバーはsmtp.sendgrid.netを指定し、ポート番号は587を指定します。

[root@Web01 ~]# cat >> .mailrc << EOF
set smtp=smtp://smtp.sendgrid.net:587
set smtp-auth=login
set smtp-auth-user=[ユーザ名]
EOF
[root@Web01 ~]# 
							

③ mailコマンドでテストメールを送信します。
※本文は最後にドットだけ入力してEnterをすることで、パスワード入力に進みます。

[root@Web01 ~]# mail メール宛先
Subject: test
test.
.
EOT
Password: [パスワード]
[root@Web01 ~]# 
							

④ 実際にメールが届いているか確認し、ヘッダ情報からSendGridから送信されているか確認します。
(ヘッダ情報は、Recived:の項目の1行目が「sendgrid.net」になっていれば、SendGridから送られていることを確認できます。)
※メールを上記のとおり送信した場合、「test」という題名で、fromはroot@サーバー名で受信します。

以上で、SMTPサーバーにSendGridを指定して送信することができました。

本書ではSendGridをphpのサンプルスクリプトを使用してAPI経由で送信する方法と、SMTPサーバーを指定して送信する方法をご紹介しました。
SendGridはAPIも豊富に用意されており、さまざまなシーンで活用することができます。SendGridを活用することでメールサーバーの煩雑な構築、運用から解放されます。
また、SMTPで使用するポートを開放することも必要なくなるため、セキュリティの側面からみても、容易にセキュリティを向上させることが可能です。

SendGridは、二要素認証(Google Authenticator)でセキュアなログインが可能です。
活用マニュアル「クラウドコンソールとAPIのセキュリティを高めたい」で二要素認証の方法をご紹介していますので、ご参照のうえ、二要素認証を設定することをおすすめします。

このページの先頭へ このページの先頭へ