ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

Postfixで独自ドメイン用の送信メールサーバーを構築する

Webサービス等の開発でメールを送信することがあると思います。

リリースにあたり独自ドメインも取得してメールを送信すると思いますが、メールサーバーを構築したり、メールボックスを契約するのは手間や費用がかかり大変です。

それらのことをやらなくても、メールを受信したら転送するだけの仕組みがPostfixで可能だったので、それらについてまとめました。

メール送信するにあたり、キャリアメール(docomoausoftbank等)の送信制限対策の設定も記載しましたので、ご活用下さい。

環境

CentOS 7
Postfix 2.10.1

前提条件

独自ドメインを取得していること

今回構築する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
    -o smtp_destination_concurrency_limit=1
    -o smtp_destination_recipient_limit=1
au-smtp unix -    -    n    -    1    smtp
    -o smtp_destination_concurrency_limit=1
    -o smtp_destination_recipient_limit=1
softbank-smtp unix -    -    n    -    1    smtp
    -o smtp_destination_concurrency_limit=1
    -o smtp_destination_recipient_limit=1
ymobile-smtp unix -    -    n    -    1    smtp
    -o smtp_destination_concurrency_limit=1
    -o smtp_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以外にスタードメインドメインを管理しているので、スタードメインだとメールサーバー付いてるので、そちらでメール転送設定をすれば、任意のアドレスでメールを受け取れるので手間いらずです。

宣伝

今回リリースしたサービス

mincrew.net

ドメインを契約したところ

おすすめのドメイン契約先