開発者の為のメール送信サーバー(Postfix)の構築方法 [CentOS]
「CentOS7 + Postfix」によるSMTPサーバーの構築です。VPSはConoHaを使用します。インフラエンジニア用ではないので必要最低限の設定で、最終的には「mailコマンド」または「PHP」でメールを送信する所まで行います。
また、独自のメールサーバーから送信されたメールが迷惑メール扱いにならないように送信ドメイン認証(SPF - Sender Policy Framework)にも対応。
1. DNSの設定
VPS側の設定。ドメイン名、IPアドレスは自分のに置き換えてください。
Aレコード
タイプ | A(通常) |
---|---|
名称 | |
TTL | 3600 |
値 | VPSのIPアドレス |
MXレコード
タイプ | MX |
---|---|
名称 | @ |
TTL | 3600 |
ポイント先 | mail.petitmonte.com |
優先度 | 10 |
SPFレコード
タイプ | TXT |
---|---|
名称 | @ |
TTL | 3600 |
値 | v=spf1 ip4:133.xxx.xxx.xxx -all |
ConoHa以外ではSPFレコードの値を"v=spf1 ..."のようにダブルクォーテーションで囲む必要がある場合があります。
反映されるのに時間がかかりますので、DNSは先にやっておきましょう。
2. Postfixのインストール
CentOS7では標準でPostfix 2.10.1がインストール済みです。
// Postfix(ポストフィックス)のバージョン postconf | grep mail_version // Postfixのインストール sudo yum install postfix
3. Postfixの設定
// バックアップする cp /etc/postfix/main.cf /etc/postfix/main.cf.bk // 設定ファイルの編集 sudo vi /etc/postfix/main.cf
[main.cf]
ローカル環境のコマンド及びシステムのみメールを送信できるようにします。
# メールサーバーのホスト名 myhostname = mail.petitmonte.com # メールのドメイン mydomain = petitmonte.com # ローカルで配送依頼された送信元メールアドレスにドメイン名を付加(@以降のドメイン名設定) # 例) user@$mydomain → user@petitmonte.com myorigin = $mydomain # (メールシステム)ローカルのメール受信のみ inet_interfaces = localhost # (メールシステム)外部からのメール受信を許可する # ※これを許可する場合はSMTPポートの解放も必要 # inet_interfaces = all # (メールシステム)受信するドメインリスト(@以降) # ※末尾に自ドメイン($mydomain)を追加しています。 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # メール格納形式 # ※デフォルトは「Mailbox」で/var/spool/mail/にユーザー毎の1ファイルにメールが保存される # ※次の「Maildir/」にすると/home/user/Maildirにユーザー毎に1件づつメールが保存される #home_mailbox = Maildir/ # メールサーバのソフトウェア名を隠蔽 smtpd_banner = $myhostname ESMTP unknown
次のコマンドを実行する。
// 設定ファイルのエラー確認 sudo postfix check // Postfixの再起動 sudo systemctl restart postfix // Postfixのステータス確認 sudo systemctl status postfix
postfix checkコマンドの前にsudoを付加しないと次のエラーになります。
postfix: error: to submit mail, use the Postfix sendmail command postfix: fatal: the postfix command is reserved for the superuser
4. メールの送信 - mailコマンド編
PHPが動作する環境は5章へ飛んでも構いません。
// mailコマンドのインストール確認 which mail // 次のような表示がない場合は、mailコマンドをインストールします。 /usr/bin/mail // mailコマンドのインストール //sudo yum install mailx
mailコマンドでexample@gmail.comへメールを送信する。
mail example@gmail.com Subject: test mail body .
1行目はmailコマンドで、2行目はタイトル、3行目は本文です。最後に「.」(ピリオド)で終了と同時にメールを送信します。
Fromをinfo@example.comに指定する場合は次のようにします。
mail -r info@example.com example@gmail.com
※@example.comの部分は自分のドメインにして下さい。
5. メールの送信 - PHP編
@example.comの部分は自分のドメインにして下さい。
<?php $to = "example@gmail.com"; $from = "info@example.com"; $subject = "タイトル"; $message = "挨拶文\r\n本文"; $headers = "From: {$from}"; $parameters = "-f {$from}"; mb_send_mail($to, $subject, $message, $headers, $parameters); ?>
$parametersの「-f」パラメータでメールアドレスを指定しないと、送信されたメールのメールヘッダの「smtp.mailfrom=」の部分にサーバーのユーザー名が表示されるので忘れずに付加して下さい。
最後に
今回のPostfixの設定では「ユーザー名、パスワードなし」でメールを送信できます。SMTPポートを解放していないので外部からは送信できないので安全です。また、送信元メールアドレスの@example.comの前に任意のユーザー名を設定可能です。
送信ドメイン認証にSPFを適用していますので、Gmailでも迷惑メール扱いに「なりにくい」です。これでも、迷惑メールになる場合はSPFの他に同じく送信ドメイン認証のDKIM(ディーキム)に対応すると良いです。
外部からのメール送信の対応、SMTP認証、SSL、DKIM、スパム対策など、やることは多々ありますが、開発者側からするとコレぐらいで十分だと思います。これ以上はインフラエンジニアに任せるのも一つの手です。
ConoHaだと月額500円で独自ドメインを利用可能な安全・安心なメールサーバーを契約する事も可能です。個人だと少し高いのかも知れませんが、法人の場合は無料みたいな価格です。
参考文献
Postfix main.cf ファイルフォーマット (Postfix 2.3)
ConoHaの薄い本(VPSで自分専用のメールサーバーを立てよう!)
送信ドメイン認証の結果を表すヘッダにはどのような種類がありますか?