更新日: 2020年10月6日
Linux でメール送信する場合、mail コマンドや sendmail コマンドから送るかと思います。また、PHP などでお問合せフォームを作成していて、お問合せ完了後にメール送信することもあります。これらのメール送信する機能のことを MTA(Message Transfer Agent)といいます。
メール送信するだけなら Linux をインストールした時に、すでにインストールされている MTA を使えばいいのですが、インストールされていなかったり空メールを受信してプログラムを実行したいなどの場合には、MTA をセットアップしなければなりません。
メジャーな MTA として、sendmail、qmail、postfix があります。sendmail、qmail は昔からあるので慣れ親しんでいる人も多いかと思いますが、設定がとても複雑なので初めてメールサーバを構築する人にとってはハードルが高いと思います。Postfix は後発の MTA で前者と比べて簡単に設定することができます。
MTA の比較はこちらの記事が参考になります。
sendmail、qmail、Postfixのそれぞれの良さと違い | メール配信/メールセキュリティのHDE技術陣によるコラム
本記事では Postfix をインストールして実際にメール送信してみます。
Postfix のインストール
まずは、Postfix がインストールされているか確認してみましょう。
$ yum list installed | grep postfix
postfix.x86_64 2:2.6.6-2.2.el6_1 @anaconda-CentOS-201112091719.x86_64/6.2
postfix
と表示されていれば Postfix がインストールされていることになります。もし表示されていなければ yum でインストールすることになりますが、すでに sendmail など他の MTA がインストールされていればそれを止めます。
$ sudo service sendmail stop
sendmail を停止中: [ OK ]
Postfix をインストールします。
$ sudo yum install postfix
インストールした Postfix のバージョンを確認してみましょう。
$ postconf mail_version
mail_version = 2.6.6
MTA 切り替え設定、自動起動の設定
Postfix のインストールが完了したら、Linux 上で使用している MTA を Postfix に設定します。
$ sudo alternatives --config mta
2 プログラムがあり 'mta' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2 <= 2を入力してEnterキーを押す
2を入力して Postfix をデフォルトの MTA に設定します。 もう一度、alternatives コマンドで設定すると、選択が変わっているのが分かります。
alternatives --config mta
2 プログラムがあり 'mta' を提供します。
選択 コマンド
-----------------------------------------------
* 1 /usr/sbin/sendmail.sendmail
+ 2 /usr/sbin/sendmail.postfix
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
次に自動起動などの設定を行なっていきます。 sendmail 等が入っている人は、自動起動を無効にします。
$ sudo chkconfig sendmail off
$ chkconfig --list sendmail
sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off
$ sudo chkconfig --add postfix
$ sudo chkconfig postfix on
$ chkconfig --list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Postfix の設定
Postfix では /etc/postfix
以下にあるファイルを編集します。今回は送信するだけなので設定をしません。別記事で紹介します。
メール送信テスト
実際にメール送信してみます。 ここではメール受信に sendmail コマンドを使います。
$ sendmail foo@foo.com <= 送りたいメールアドレスを指定します
From:bar@bar.com <= 差出人(From)ヘッダを指定します
To:foo@foo.com <= 宛先(To)ヘッダを指定します
Subject:テスト送信 <= 件名(Subject)ヘッダを指定します
テスト送信してみました。 <= 内容(Body)を記入します
. <= Bodyの入力が終わったら「.」を入力します
メールアドレス(foo@foo.com
)にメールが送信されているか確認してみてください。来ていない人は迷惑メールフォルダに振り分けられているかと思いますのでそちらも確認してみてください。
ログからメールが送信されたか確認してみます。
$ sudo tail /var/log/maillog
Aug 14 14:09:35 localhost postfix/pickup[2241]: 3FC8481FF6: uid=500 from=
Aug 14 14:09:35 localhost postfix/cleanup[2273]: 3FC8481FF6: message-id=<20130814050935.3FC8481FF6@localhost.localdomain>
Aug 14 14:09:35 localhost postfix/qmgr[1775]: 3FC8481FF6: from=, size=348, nrcpt=1 (queue active)
Aug 14 14:09:37 localhost postfix/smtp[2275]: 3FC8481FF6: to=, relay=xxxxxxxx.com[xxx.xxx.xxx.xxx]:25, delay=31, delays=29/0.04/1.4/0.94, dsn=2.0.0, status=sent (250 2.0.0 OK 1376456977 zo6si9556328pac.83 - gsmtp)
Aug 14 14:09:37 localhost postfix/qmgr[1775]: 3FC8481FF6: removed
status=sent
になっていれば、メールは送信できています。status=bounced
(送信できない)、status=deferred
(送信できないので後で再送する)になっている場合はそのエラーよりも上に残されているログから原因を調査してください。
関連記事
Postfix に関する記事です。