CentOS に qmail をインストールして PHP からメールを送信する方法

SaaSes の CentOS ではデフォルトでメール送信ができません。Sendmail の設定に失敗したため Sendmail の停止・アンインストール後、qmail をインストールして、それでメールの送信を行うことにしました。

今回は以下のサイトを参考にさせて頂きました。詰まった部分がありましたので、その部分を補いながらこちらで再度まとめさせて頂きます。

必要なディレクトリ・ユーザー・グループを作成する

1
2
3
4
5
6
7
8
9
10
mkdir /var/qmail
/usr/sbin/groupadd nofiles
/usr/sbin/useradd -g nofiles -d /var/qmail/alias alias
/usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmaild
/usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmaill
/usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmailp
/usr/sbin/groupadd qmail
/usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmailq
/usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmailr
/usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmails

qmail をインストールする

ディレクトリを移動します。

1
2
cd /usr/local/src/
tar zxvf qmail-1.03.tar.gz

qmail をダウンロードし解凍します。

1
wget ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz

qmail-1.03 をダウンロードします。日本のミラーサイトからダウンロードできなくなっているため、海外のミラーサイトからダウンロードします。

1
wget http://cyberam.dip.jp/linux_server/mail/qmail-date-localtime.patch

qmail-glibc.patch をダウンロードします。こちらが無ければコンパイルに失敗します。このパッチも多くのサイトのものがダウンロードできなくなっていますが、以下のサイトからなら wget でダウンロードすることができます。

1
wget http://sambist.ddo.jp/data/qmail-glibc.patch

ダウンロードしてきたパッチを当てます。

1
2
3
cd qmail-1.03/
patch -p1 < ../qmail-date-localtime.patch
patch -s < qmail-glibc.patch

コンパイル及び設定をします。ドメインは適当で良いそうです。

1
2
3
make setup
make check
./config-fast mail.example.com

postmaster、MAILER-DAEMON、root 宛のメールを /var/qmail/alias に保存できるようにファイルの作成とパーミッションの設定を行います。

1
2
3
cd /var/qmail/alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 .qmail*

起動スクリプトの設置と起動を行います。

1
2
cp /var/qmail/boot/home /var/qmail/rc
/var/qmail/rc

以下のコマンドで起動しているか確認できます。

1
ps -aef | grep qmail

以下のように動いていることが分かります。

1
2
3
4
5
6
qmails    7942  2053  0 02:45 pts/0    00:00:00 qmail-send
qmaill    7943  7942  0 02:45 pts/0    00:00:00 splogger qmail
root      7944  7942  0 02:45 pts/0    00:00:00 qmail-lspawn ./Mailbox
qmailr    7945  7942  0 02:45 pts/0    00:00:00 qmail-rspawn
qmailq    7946  7942  0 02:45 pts/0    00:00:00 qmail-clean
root      7956  2053  0 02:45 pts/0    00:00:00 grep qmail

メールの送信テストは以下のようにできるようです。メールは迷惑メールフォルダに入っていることもありますので確認の際は気をつけましょう。

1
echo to: info@example.com | /var/qmail/bin/qmail-inject

今回はこのサーバーでメールの受信はしないため、特に設定をしませんが、参考サイトでは受信ができるように設定していますのでそちらを参考にしてください。ここからは送信するためだけの最小設定をしていきます。またスクリプトも必要最小限に改変しています。

qmail を自動起動できるように設定する

自動起動用のファイルを作成します。

1
vi /etc/init.d/qmail

起動用のシェルスクリプトを作ります。参考サイトでは tcpserver を入れていましたが、テストメールが送信できれば良く、また受信も行わないため、tcpserver の部分を省いておきました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
 
[ -f /var/qmail/rc ] || exit 0
 
case "$1" in
  start)
        # Start daemons.
        echo "Starting qmail."
        csh -cf '/var/qmail/rc &'
        touch /var/lock/qmail
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down qmail."
        PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
        if [ ! -z "$PID" ] ;  then
            /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        echo
        rm -f /var/lock/qmail
        ;;
   *)
        echo "Usage: S99qmail {start|stop}"
        exit 1
esac
 
exit 0

作成したらパーミッションを設定します。

1
chmod 755 /etc/init.d/qmail

自動起動できるようにします。

1
2
3
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail

rc スクリプトについては以下のページが参考になりました。

これでサーバーを再起動しても qmail が使えます。

1
sendmail_path = /var/qmail/bin/qmail-inject

PHP でメール送信テストをする場合は以下のようにします。

1
php -r "mail('info@example.com', 'subject', 'body');"

設定は以上になりますが、tcpserver がなくても問題がないかが心配です。ただメール送信できれば良い場合はこれで良いのでしょうか。詳しい方がいましたらアドバイス頂けると幸いです。

参考サイト

qmail のインストールに際して参考にしたサイトです。

Sendmail の設定の際に参考にしたサイトは以下です。いろいろと勉強になりましたので、メモしておきます。

コメント

コメントは受け付けていません。