Magento2とMailgun(SMTP/外部メールサーバー)の連携

By |2019-06-23T11:50:01+09:002018年10月19日|Categories: Magentoの設定, Magento2エクステンション|Tags: , , |

1. Magento2のメール送信について

Magento2によるサイト構築においては、はじめの設定で、そのメール送信についても気を配らなければなりません。
ECサイトは、ユーザーからの受注があると、一般的に注文完了メールを自動で送信します。つづいて、手動の確認メール、発送メール、フォローメール等々と、そのプラットフォームから、ユーザーにメール送信をする機能が備わっています。

Magento2にも、もちろんメール送信機能は備わっています。しかし、はじめてMagentoでサイト構築をする人にとって、このECサイトにとって当たり前とも言えるメール送信の設定は、決して簡単な作業ではありません。Magentoは多機能なのですが、皮肉なことに、ECの基本機能ほど、その設定がややこしく、面倒くさいのです。

Magentoサーバーで紹介しているSiteGroundであれば、cPanelからMXレコードを設定し、ストアの独自ドメインでメールアドレスを作成することができます。あとは、そのアドレスをMagento2の管理画面にて送信元として入力・登録すれば、とりあえずのメール送信はできることになります。
ところが、この場合、cPanel内でドメイン認証などの対策を行っても、送信したメールが迷惑メールのフォルダに入ってしまったり、途中でスパムとしてはじかれてしまったりすることがあるので、到達率の面でやや問題があるといえます。

そこで、この記事では、サーバー内のPHPのmail関数に依存するのではなく、外部のメールサーバー(SMTP)を利用して、Magento2のためのメールアドレスを設定する方法をご紹介いたします。これは、テスト環境やサイト構築中の段階では特に必要な作業ではありません。しかし、ライブ環境への移行前、ストア開店前までには、外部サーバーによりメール送信のできる環境を整えるのが、より信頼性のある、無難な選択肢となります。

メール配信サービスとしては、G Suite、Amazon SES、SendGrindなどが有名ですが、今回は、Mailgunという無料~で使えるサービスをご紹介したいと思います。個人的には、今のところ、このMailgunが(ネーミングはちょっと物騒なのですが)、Magento2との相性が一番いいように感じています。

Mailgunは、英語からの申し込みページしかないのですが、設定が比較的簡単で、同じクレジットカードで複数の無料アカウントを作成することができるので、サイトを複数運営している場合でも汎用性があり、とても便利です。

以下は、通常の受信/送信にはcPanelで設定したメールサーバを使うことを前提に、MailgunはMagento2からの送信専用サーバーとして設定する方法の説明になります。(cPanelからのメールアドレスの作成については、SiteGround Email Tutorialsをご参照ください。)

尚、cPanelのないクラウドやVPS環境でMagentoを構築する場合、サーバー内でメールホスティングまで管理するのは大変な作業になるので、Zohoメールなどをご検討いただいてもいいかもしれません。
G Suiteと類似したサービス内容ですが、Zohoには独自ドメインを利用できる無料プランがあり、モバイルアプリも安定していて高機能です。また、検索すると日本語での解説も多いので、気軽にはじめることができます。
ZohoとMailgunで完全無料のメールホスティングを構築することができるので、特に新規でサイトを立てる際にはおすすめの組み合わせになります。

Mailgunに登録する前に、Mailgunで使用するメールアドレスを、cPanelやZohoのサービスから予め作成し、送受信ができるようにしておいてください。Mailgunの登録は、Mailgunのプラットフォームから新規でメールアドレスを作成するというわけではなく、あくまで既存のメールアドレスに対して、Mailgunという外部の送信サーバーを利用できる環境を追加する、というイメージになります。

2. Mailgunの申し込みと認証について

MailgunのConceptというプランが、Pay As You Go(使った分だけの支払い)で、毎月10,000通までのメール送信が、無料となります。また、毎月100件まで、送信先のメールアドレスがアクティブなホンモノのアドレスかどうかを無料でチェックすることもできます。これは、ValidationというAPIを利用するサービスで、SMTPの送信設定だけではこの機能は作動しないので、無料枠をこえる心配はありません。

Mailgun価格

https://www.mailgun.com/pricing-simple
Conceptプランの[Sing up]のボタンをクリックして、申し込みページに進みます。

Mailgun申し込み

上記のように入力し、右下のプランが「Concept – Pay As You Go」になっているのを再確認し、[Create Account]のボタンをクリックします。
(画面の中央あたりの「Add payment info now」のチェックマークをはずすと、クレジットカードの情報を入力しなくてもアカウントを作成することはできますが、その場合は受信専用のアカウントになり、メールの送信機能が使えなくなってしまうので、ご注意ください。)

Mailgunメール認証

アカウント作成直後に、メールアドレスの認証メールが送信されます。
Mailgunのダッシュボードにも、サイト上の黄色の背景バーに「認証メールを送信しました」というメッセージが表示されています。メールボックスをチェックして、「Hi 名前, Please verify your Mailgun account」という件名のメールを開いてください。
そのメールの中にあるリンクをクリックすると、メールアドレスの認証は完了で、つづいて、ショートメール(SMS)による本人認証画面が自動で立ちあがります。

Mailgunの認証SMS

国は日本が自動で選択されていますので、お持ちの携帯電話番号を入力し、[Send Verification Code]をクリックしてください。
Mailgunは、同じクレジットカードで複数のアカウントを作成できますが、このSMSの認証では、短期間に複数の認証を同じ携帯番号で行おうとすると、エラーになるケースもあるようです。その場合は、別の携帯番号、ご家族やご友人、同僚の方の番号をご入力ください。(SMSによる認証はこの初回のみです。)

[Send Verification Code]をクリックすると、コード入力画面に切り替わりますので、届いたSMSの文面の中にある6ケタの数字を入力してください。
そうすると、アカウントの認証は完了で、ダッシュボードの画面上のバーも緑色に色が変わります。これで、Mailgunのアカウントがアクティブになりました。

Mailgunのアカウント認証

つづいて、ドメインの設定作業に移ります。
上記ダッシュボードの画面をスクロールすると、以下のような Add Your Domain という大きなボードがあります。

Mailgunにドメイン追加

[Add Your Domain Now]のボタンをクリックすると、以下のようなドメイン追加のフォームページが開きます。

Mailgunにサブドメイン追加

画像の字がやや小さいのですが、「サブドメインでの設定を推奨します」ということが書かれています。
これはどういうことかと言うと、使用するメールアドレスが you@mydomain.com の場合は、ここで mydomain.com を入力するのではなく、mydomain.com のサブドメイン、例えば mg.mydomain.com の入力を推奨しています。おそらく、メインドメインのゾーンでMXレコードを重複しないためということだと思います。
サブドメインでMialgunを設定しても、メインドメインのメールアドレスで送信することができますので、ご安心ください。

Mailgunのメールサーバを利用できるようにするために、お使いのDNSプロバイダーの管理画面にて、任意のサブドメインを設定してください。事例では、mg.mydomain.comですが、これは、mail.mydomain.comでも、mailgun.mydomain.comでも、自分に分かりやすいものであれば、自由な任意のスペリングで構いません。
サブドメインの設定の仕方は、それぞれご利用中のサーバー、もしくはDNSプロバイダーのドキュメントをご参照してください。

サブドメインが作成できたら、そのサブドメインをフォームに入力し、[Add Domain]ボタンをクリックします。
すると、次のようにDNS情報を追加してくださいという指示の画面が開きます。

MailgunのDNSの設定

画像の字が小さいのですが、まとめると以下の表の内容となります。
DNSでの作業方法については、お使いのサーバー、DNSプロバイダーの説明をご参照ください。

SiteGround(cPanel)でのDNSとMXの編集とについては、以下のページをご参照ください。
https://www.siteground.com/tutorials/cpanel/dns-zone-editors/
https://www.siteground.com/tutorials/email/mx-record/
また、Mailgunのヘルプページの解説もご参考ください。
https://help.mailgun.com/hc/en-us/articles/202052074-How-do-I-verify-my-domain-

Type Host Name Value
TXT mg.mydomain.com v=spf1 include:mailgun.org ~all
TXT mailo._domainkey.mg.mydomain.com k=rsa; abcdefghijklmno(暗号化)pqrstuvwxyz1234567890…..
CNAME email.mg.mydomain.com mailgun.org
Type Priority Value
MX 10 mxa.mailgun.org
MX 10 mxb.mailgun.org

mg.mydomain.comの部分は、自分のサブドメインに置き換えて考えてください。暗号化されているような文字列については、Mailgunダッシュボードからコピペしてください。
DNSの入力画面の画像は(プロバイダーによりまちまちなので)省略させていただきますが、入力後しばらくすると、Mailgunのドメイン情報のページが、以下のように黄色や赤色のアイコンが表示され、反映待ちの状態となります。

MailgunのDNS反映待ち

しばらく待ったら、手動で[Check DNS Records Now]のボタンをクリックしてみます。
DNSが設定され、ネットワークに浸透が進んでいれば、黄色や赤色のアイコンが、以下のように緑色に変わります。
24時間~48時間という待ち時間の記載もありますが、実際には早ければ数分で反映されます。

MailgunのDNS反映

DNSチェックのアイコンが緑色に変わった後、ドメインの認証までに更にもうしばらく(10分~くらい)時間がかかります。
ドメイン(サブドメイン)が認証されると、Domain InformationのStatusが、 未承認の黄色マークから、Activeの緑色のマークに変わります。

Mailgunドメイン認証済

これで、Mailgun側での設定が完了したことになります。

3. Magento 2 SMTPエクステンションのインストールと設定

つづいて、Magento2 にてMailgunのSMTPを設定します。これは、SMTP連携のエクステンションを利用します。
Magento2のSMTPエクステンションで無料のものは、以下の二つが有名です。

Mageplaza https://github.com/mageplaza/magento-2-smtp
Magepal https://github.com/magepal/magento2-gmail-smtp-app

どちらでもいいのですが、今回は上のリンク先のMageplazaのエクステンションをComposerでインストールします。
同じエクステンションについて、Mageplazaのサイトでも設定方法が説明されているので、ご参考ください。
https://www.mageplaza.com/blog/how-to-configure-mailgun-smtp-in-magento-2.html

Composerによる作業については、Magento2日本語、またMagento2アップデートのページにて、Composerを使った作業動画を解説していますので、ご参照ください。SSHアクセスをして、基本的なコマンドを入力する作業自体は大きく変わりません。
以下が、今回のMageplazaのSMTPエクステンションをインストールする際のコマンドになります。

Magento2のルートへ移動
cd [Magentoルートへのパス]

メンテナンスモードへ
php bin/magento maintenance:enable

Composerインストール(※必要な場合のみ)
curl -sS https://getcomposer.org/installer | php
php composer.phar

Magentoのキャッシュクリアと既存の生成ファイル削除
php bin/magento cache:clean
php bin/magento cache:flush
rm -rf pub/static/*
rm -rf var/di/* var/generation/* var/cache/* var/log/* var/page_cache/* var/view_preprocessed/pub/*
rm -rf generated/code/* generated/metadata/*

SMTPエクステンションのインストール(ダウンロード)
php composer.phar require mageplaza/module-smtp

Magentoアップデート
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento indexer:reindex
php bin/magento cache:clean
php bin/magento cache:flush

メンテナンスモード解除
php bin/magento maintenance:disable

コマンドについては、Magento2コマンド集もご参照ください。
※Composerのインストールコマンドについては、すでにその環境にComposerがインストールされている場合は不要です。

エクステンションのインストール後、Magento2の管理画面にアクセスすると、以下のようにMageplazaのエクステンションの設定画面が入っています。
STORES > Configuration > Mageplaza Extensions > SMTP で設定画面を開いてください。

Magento2 SMTPエクステンション

先ずは、General Congifuration > Enable Mageplaza SMTP を、プルダウンで Yes に変えてください。(インストール直後は、No になっています。)
つづいて、SMTP Configuration Options > Host の入力欄のすぐ横にある[Load Settings]のボタンをクリックしてください。これにより、既成のプロバイダーのデフォルト値を自動で入力することができます。以下のように、画面全体にスライドするようにSMTPプロバイダーのリストが表示されます。

Magento2 SMTPエクステンション

リストの中から Mailgun をクリックしてください。
すると、下記のように Mailgunのデフォルトの設定値が表示されますので、[Load Settings]のボタンをクリックしてください。

Magento2 SMTPエクステンション

すると、スライドのリスト画面が閉じ、以下のようにMailgunの設定値が入力されます。
Host: smtp.mailgun.org、Port: 587、 Protocol: TLS になっていることを確認してください。(Load Settingを使わずに手動でこう入力しても構いません。)

Magento2 SMTPエクステンション

つづいて、それ以外の空欄になっている Username や Password の入力ですが、これは、先ほど Mialgunのサイトで登録したドメイン認証情報のページから該当のワードをコピペします。

MailgunドメインのSMTP情報

上の画像の Default SMTP Login が管理画面に入力するUsernameDefault Password が管理画面に入力するPasswordになります。
(尚、MailgunのAPIを利用したほうがメール送信は速くなるのですが、Magento2とMailgunのAPI連携エクステンションが開発されていないため、既存のエクステンションで可能なSMTPでの連携を行っています。)

Mageplaza Mailgun SMTPの入力

上の画像のように、先ず Authentication をプルダウンで、LOGIN に変更してください。それから、Mailgunのページからのコピペで、UsernamePasswordを入力してください。

ここで入力内容を保存してもいいのですが、このまま同じ画面内から、メール送信が正しくできるかどうかをテストすることができます。
下の Send Test Emailのタブを開くと、下のようなメール送信テストの入力画面が開きます。
Send to の欄に、任意の(受信可能な)メールアドレスを入力し、[Test Now]のボタンをくりっくしてください。

Mailgun SMTPテストメール送信

以下のように、Success というダイアログが表示されれば、テストメールの送信は成功で、MailgunのSMTPがMagento2と連携できたことになります。
実際に、メールボックスにMageplazaのテストメールが届いていることを確認してください。

Mailgun SMTPテストメール送信成功

テストメールの送受信が確認できたら、管理画面右上のオレンジ色の[Save Config]ボタンでいままでの入力内容を保存しください。
そして、System > Cache Management から、Magento2のキャッシュをクリアしてください。

尚、もし今回Magento2にてはじめてメールアドレスを設定する場合には、このMageplazaのエクステンション設定の他に、管理画面内の基本的なメール設定も必要になります。
以下の設定ページでの入力を完了後に、テストメールの送信を試してみてください。

  • Stores > Configration > General > Store Email AddressSender Emailに、Magento2ストアのメールアドレス(例:you@mydomain.com)を入力してください。五個所ありますが、少人数でのストア運営の場合は、原則としてすべて同じメールアドレスを入力します。
  • Stores > Configuration > Sales > Sales EmailsSend Order Email Copy To に、Magento2ストアのメールアドレスを入力してください。ここも同様の入力欄がいつくかありますが、少人数運営の場合、原則としてすべて同じメールアドレスを入力します。受注処理メールのBccが届くようになります。
  • Stores > Configration > General > Contacts > Email OptionsSend Emails Toに、Magento2ストアのメールアドレスを入力してください。サイトからのお問い合わせの内容が届くようになります。

メールテンプレートの編集等については、また別の機会に記事にしたいと思います。

以上、Magento2と外部メールサーバーMailgun(SMTP)の連携方法について説明いたしました。

(追記)エクステンションのアンインストール方法

今回のブログ記事でインストールをした、MageplazaのMagento2 SMTPエクステンションを、アンインストールする方法をご紹介いたします。万一不具合が起きた時や、他のSMTPエクステンションを試したい時にご参照ください。

Composerを使ってインストールをしたエクステンションは、Composerを使ってアンインストールする必要があります。
管理画面で、Enable Mageplaza SMTPDisable(無効)にしてから、SSHで以下のコマンドを実行してください。

ポイントは、エクステンションの名称が2種類あって、Magento2に対して指示する名称は、Vendor_Moduleのように頭文字大文字にアンダースコアが使われ、Composerに対して指示する名称は、vendor/moduleのように、小文字スラッシュが使われる点です。
Composerに対する名称はインストール時と同じものですが、Magento2に対する名称が分からない場合は、php bin/magento module:status というコマンドで、モジュール名のリストを見ることで判明します。

Magento2のルートへ移動
cd [Magentoルートへのパス]

メンテナンスモードへ
php bin/magento maintenance:enable

Magentoのキャッシュクリアと既存の生成ファイル削除
php bin/magento cache:clean
php bin/magento cache:flush
rm -rf pub/static/*
rm -rf var/di/* var/generation/* var/cache/* var/log/* var/page_cache/* var/view_preprocessed/pub/*
rm -rf generated/code/* generated/metadata/*

SMTPエクステンションの無効化
php bin/magento module:disable Mageplaza_Core Mageplaza_Smtp --clear-static-content

SMTPエクステンションのアンインストール(*データベース削除)
php bin/magento module:uninstall -r Mageplaza_Core Mageplaza_Smtp

SMTPエクステンションのComposerからの削除
php composer.phar remove mageplaza/module-smtp
php composer.phar remove mageplaza/module-core

Magentoアップデート
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento indexer:reindex
php bin/magento cache:clean
php bin/magento cache:flush

メンテナンスモード解除
php bin/magento maintenance:disable

(* )データベースの削除も行うと、それまでのデータが完全に消去されますのでご注意ください。
いったんアンインストールして、後日また再インストールする場合は、データベースの削除をするコマンドは実行せず、とばしてください。再インストール後に、以前のデータが読み込まれます。

追記(2019年6月1日):
Mailgunのダッシュボードのレイアウトが、この記事の画像とはやや変更になっていますが、基本的な設定方法は同じです。