Webサービス等の開発でメールを送信することがあると思います。
リリースにあたり独自ドメインも取得してメールを送信すると思いますが、メールサーバーを構築したり、メールボックスを契約するのは手間や費用がかかり大変です。
それらのことをやらなくても、メールを受信したら転送するだけの仕組みがPostfixで可能だったので、それらについてまとめました。
メール送信するにあたり、キャリアメール(docomo、au、softbank等)の送信制限対策の設定も記載しましたので、ご活用下さい。
前提条件
独自ドメインを取得していること
今回構築するPostfixの仕様
・独自ドメイン宛のメールは、Postfixで受信し、それを指定のメールアドレスにそのまま転送する
・プログラムからのメール送信は、Postfixを経由してダイレクトに送信される
・プログラムからのキャリアへのメール送信は、Postfixで送信間隔を考慮して送信される
・プログラムからのメールは、暗号化して送信される(TLS設定をした場合)
独自ドメインにSPFレコードを設定する
SPFレコードとは?
独自ドメインのよるメール送信が、迷惑メール扱いとならないようにドメインの設定でSPFレコードを追加します。
SPFの詳細については以下のリンクを参考にして下さい。
salt.iajapan.org
ドメイン設定でSPFレコードを登録する
SPFレコードは、ドメインを取得したサイトにいって「DNSレコード設定」等のメニューで行います。
設定する値は、以下の表のようになります。
(独自ドメイン「hoge.com」メール送信するサーバーIP「192.168.0.1」の場合)
ホスト名 | TYPE | TTL | VALUE | 補足 |
mail.hoge.com | A | 3600 | 192.168.0.1 | すでにあれば不要 |
hoge.com | TXT | 3600 | v=spf1 a:mail.hoge.com ~all | 上記のホスト名を指定 |
TTLは任意の値で大丈夫です。
SPFレコードが有効か確認する
設定が終わったら、しばらく時間をおいて次のサイトでSPFレコードが有効になったか確認します。グリーンの表示ならOKです。
Sender Policy Framework (SPF) Record Lookup - SPF Check - MxToolBox
送信メールサーバーの設定
/etc/postfix/main.cf
# メール受信許可範囲(変更) inet_interfaces = all # 接続時に使うプロトコル(変更) net_protocols = ipv4 ## 配送設定# 遅延メッセージの配送を試行する最小時間間隔minimal_backoff_time=1m # 遅延メッセージの配送を試行する最大時間間隔maximal_backoff_time=10m # 配送できないものとして送り返すまでに、メッセージがキューに入っている最大時間maximal_queue_lifetime=1h # 配送できないと見なすまでに、バウンスメッセージがキューに入っている最大時間bounce_queue_lifetime=1h # 遅延されたキューがキューマネージャによってスキャンされる時間間隔queue_run_delay=30s # 配送経路ファイルパス transport_maps =hash:/etc/postfix/transport ## バーチャルドメイン# バーチャルドメイン virtual_alias_domains = hoge.com # バーチャルドメイン設定アフィるパス virtual_alias_maps =hash:/etc/postfix/virtual ## STARTTLSの設定(メールが暗号化される)# SMTP TLSセキュリティレベル smtp_tls_security_level = may # CAファイルのパス(Let's Encryptを使った場合) smtp_tls_CAfile = /etc/letsencrypt/live/hoge.com/cert.pem # TLS情報をログに出力 smtp_tls_loglevel =1
/etc/postfix/virtual
hoge.com anything # 必須# 独自ドメイン宛メールを別アドレスに転送する info@hoge.com hoge@gmail.com noreplay@hoge.com hoge@gmail.com
ハッシュ化する
postmap /etc/postfix/virtual
キャリアメールの送信制限対策の設定
キャリアメールの送信制限
キャリアメールの送信制限について調べたところ、表のような感じになりました。
内容が古いかもしれないので、間違っている場合はご指摘頂ければうれしいです。
1セッション同時送信 | 1日最大送信 | |
docomo | 100件 | 1,000通 |
au | 30件 | 1,000通 |
softbank | 20件 | 500通 |
Y!mobile | ???件 | 1,000通 |
キャリアにメールを送信する場合、独自ドメインにSPFレコードを設定することが必須となります。
キャリア毎の制限に引っかかった場合、迷惑メール扱いとなり、メールが届かなくなるので注意して下さい。
各キャリア規制についての参考情報
Postfixの設定
/etc/postfix/master.cf
docomo-smtp unix - - n - 1 smtp -osmtp_destination_concurrency_limit=1-osmtp_destination_recipient_limit=1 au-smtp unix - - n - 1 smtp -osmtp_destination_concurrency_limit=1-osmtp_destination_recipient_limit=1 softbank-smtp unix - - n - 1 smtp -osmtp_destination_concurrency_limit=1-osmtp_destination_recipient_limit=1 ymobile-smtp unix - - n - 1 smtp -osmtp_destination_concurrency_limit=1-osmtp_destination_recipient_limit=1
/etc/postfix/transport
docomo.ne.jp docomo-stmp: ezweb.ne.jp au-smtp: softbank.ne.jp softbank-smtp: .softbank.ne.jp softbank-smtp: .vodafone.ne.jp softbank-smtp: ymobile.ne.jp ymobile-smtp: willcom.com ymobile-smtp:
ハッシュ化する
postmap /etc/postfix/transport
ポートを開ける
SMTPポート(25)を開けます。
sudo firewall-cmd --add-service=smtp--zone=public--permanent
上記設定がおわったらPostfixを再起動します。
sudo systemctl restart postfix
まとめ
今回、Webサービスをリリースするときに、独自ドメインをお名前.comで取得したところ、メールボックスは別で契約しないといけないことが分かり、メール送信をどうするか悩んでいました。
メールボックスを用意するのは、管理が面倒くさいので何か方法はないかと思って調べていると、Postfixだけでメール処理ができることが分かりました。
構築は簡単にできたのですが、できればこれらもしない方が手間も省けるので、独自ドメインを取得するなら、メールサーバー付きのサービスで取得する方が良いと思いました。
お名前.com以外にスタードメインでドメインを管理しているので、スタードメインだとメールサーバー付いてるので、そちらでメール転送設定をすれば、任意のアドレスでメールを受け取れるので手間いらずです。