NetCommons3でメール送信テストをするためにMacにMailCatcherをインストール


MailCatcherはローカルでメール送信テストをするのに便利なツールです。

まずは https://mi-rai.co.jp/blog/326 を参考に MailCatcherをインストール

$ sudo gem install mailcatcher -n /usr/local/bin

インストールできたら起動

$ mailcatcher
Starting MailCatcher
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080/

起動するとSMTPの情報が表示されるので NetCommonsのメール設定をMailCatcherにあわせます。

管理者アカウントでログインして「管理」→「システム管理」→「メール設定」

「メールを送れるかテスト送信する」にチェックをいれてメール送信のテスト。

http://127.0.0.1:1080/ にアクセスしてメールが届いてればOK

さぁ、メール関連の動作確認しましょう。

2020/07/27 14:53 追記

上記までやってメールが届いてるのを確認しても登録フォームからのメールが届きませんでした。

NetCommons3の各プラグインがメールを送信するときは、Mailsプラグインを利用して送信しています。
そのMailsプラグインは送信するメール情報を一旦mail_queuesテーブルに保存し、その後でメール送信コマンドを exec することでメールを送信するようになってます。
一旦mail_queuesテーブルに保存するのは、送信先が多かったときに分割送信したり、ある日時になったら送信するようなメールを各プラグインがあまり意識しなくても済むようにです。

で、MAMPでNetCommons3を動かすうえで問題になるのは即時メール送信をするために exec でメール送信コマンドを実行している点。

MAMPでうごいてるNetCommons3からexecでcakeコマンドを実行すると、MAMPのPHPでなく、macOSのPHPが実行されます。macOSのPHPでは、そのままだとDB接続できないので、mail_queuesテーブルから送信すべきメールがよみだせません。

というわけでこのあたりをカバーするために app/Console/cakeを書き換えました。

40行目phpを実行している箇所を書き換えます。

exec php -q "$CONSOLE"/cake.php -working "$APP" "$@"

MAMPのPHPへのフルパスに書き換えて、php.iniファイルも指定して下記の様にしました。

exec /Applications/MAMP/bin/php/php7.4.2/bin/php -c "/Library/Application Support/appsolute/MAMP PRO/conf/php7.4.2.ini" -q "$CONSOLE"/cake.php -working "$APP" "$@"

これでOKかと思ったらこれでも不足で app/Plugin/Mails/Utility/MailSend.php の書換も必要でした。

44行目 \MailSend::execInBackground() 内でコマンドを実行しているのですが、どいうわけか nohup を使うとcakeコマンドの呼び出しに失敗します。

そこで nohup 使わないように変更。

//          exec('nohup ' . $cmd . ' > /dev/null &');
            exec('' . $cmd . ' > /dev/null &');

これでやっと登録フォームから送信したらメールが送られるようになりました。