メールを送信するのは外部のサーバからしか行えないと思っていないでしょうか。もちろん外部の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も通ったメールが送信できるので、インボックスに確実に届くでしょう。
ローカルからバッチでメールを送信する際などに試してみてください。