Postfixのリレーを使ってmacOSのローカルからでも確実に届くメールを送信する

メールを送信するのは外部のサーバからしか行えないと思っていないでしょうか。もちろん外部のSMTPサーバに接続すれば良いのですが、プログラム側で設定が必要になります。しかしPostfixのリレー機能を使うことで、ローカルのsendmailを使って簡単にメール送信を行えます。

今回はmacOSをベースに、PostfixとCustomers Mail Cloudでメール送信を行う方法を紹介します。

各種ファイルの設定

以下の3つのファイルを設定します。すべてのファイルがroot権限必須なので注意してください。

/etc/postfix/main.cf

あらかじめ設定が書いてありますが、一番下に以下を追記してください。

transport_maps = hash:/etc/postfix/transport
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous

/etc/postfix/relay_password

パスワードの設定です。これはCustomers Mail Cloud側で作成したAPIユーザ、APIキーを利用します。内容は次の通りです。

SMTPサーバ:10025 APIユーザ:APIキー

SMTPサーバのアドレスは契約により異なります。

サービスプラン   SMTPホスト名
無料トライアル sandbox.smtps.jp
Standard te.smtps.jp
Pro SUBDOMAIN.smtps.jp (SUBDOMAINは各ユーザに割り当てたドメイン)

たとえば次のようになります。

te.smtps.jp:10025 api@smtps.jp:ABCDEFG

/etc/postfix/transport

このファイルもすでに書かれていると思いますが、最後に以下の4行を追加します。

localhost :
localhost.localdomain :
マシン名 :
*     smtp:SMPTサーバ:10025

マシン名は hostname コマンドの結果と置き換えてください。

設定を反映する

リレー設定などを反映します。これは下記コマンドを実行します。

sudo postmap hash:/etc/postfix/relay_password
sudo postmap hash:/etc/postfix/transport

Postfixを起動する

Postfixの起動は下記コマンドです。

sudo postfix start

すでに起動していて、設定を変更した場合には reload で反映します。

sudo postfix reload

メールを送信する

設定ができたら、たとえば次のようなPHPファイルを作成します(mail.phpとします)。

<?php
$headers = 'From: info@smtps.jp' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail('user@smtps.jp', date('Y/m/d') . ' テストメール', 'Test', $headers);

念のため、PHPの設定ファイルはコピーしておいた方が良さそうです。

sudo cp /etc/php.ini.default /etc/php.ini

まとめ

ローカルからメール送信できるようになれば、プログラム側の設定は最低限で済みます。多くのプログラミング言語ではsendmailを使ってメール送信を行うようになっていますので、ローカルと本番環境で設定を変えずにメール送信できるでしょう。Customers Mail Cloudを経由することでDKIMやSPFも通ったメールが送信できるので、インボックスに確実に届くでしょう。

ローカルからバッチでメールを送信する際などに試してみてください。