- mail/sendmail を入れる
これには pkg_add が便利です
ftp://ftp.jp.netbsd.org/pub/NetBSD-jp/mirror-status/packages.html
を見て、例えば、次のような操作をします。
export PKG_PATH=ftp://ftp.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q4/All
pkg_add sendmail
もし pkgsrc の枠が用意してあるなら、次のようにして src から make するのも良いでしょう
cd /usr/pkgsrc/mail/sendmail
sudo make package
- Build
次に、/etc/mail/sendmail.cf を用意するのですが、
まず初めに、sendmail.mc -> sendmail.cf を生成する ./Build を用意します。
これには cf/cf 環境を用意して ./Build *.cf しますが、
cf/cf 環境を用意するにはいくつかの方法があります。
-
pkgsrc/mail/sendmail 以下で make してあれば、それを利用
します。
ttyp0:makoto@yoshimi 11:55:43/060728(...cf/cf)> pwd
/export/pkgsrc/mail/sendmail/work.yoshimi/sendmail-8.13.7/cf/cf
ttyp0:makoto@yoshimi 11:55:53/060728(...cf/cf)> ls -l netbsd-proto-1.12.mc
-rw-r--r-- 1 makoto wheel 2922 Jul 28 11:52 netbsd-proto-1.12.mc
-
もし sendmail を src から入れていない場合の一つの方法には
pkgsrc/mail/sendmail で make extract として上と同じように cf/cf を利用することです
(pkgsrc の make の指定には次のようなものがあります: mk/bsd.pkg.mk 参照)。
# bootstrap-depends
# fetch
# checksum
# depends
# tools
# extract
この中の fetch まで実行 (make fetch と入力)すると後が便利です。
-
あるいは
pkgsrc も用意していないという時には、例えば次のようにします。
/usr/pkgsrc/mail/sendmail/Makefile.common
を見て、最新版の位置を調べておきます。
あるいは pkg_add したのでしたら、次のようにしてその版名を見ておきます。
dl03@makoto 13:01:11/100414(~)% pkg_info -I sendmail
sendmail-8.14.3nb4 The well known Mail Transport Agent
そして、同じ版を次のようにして手元に持って来ます。実際には、ものが Build なので、
版名は大変柔軟です (かなりずれていても大丈夫)。
cd work
wget ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.14.3.tar.gz
sendmail.*.tar.gz をもらって来たら、その中の一部を開けます
(以下の例で使っている版は sendmail.8.14.3.tar.gz)
tar zxvf sendmail.8.14.3.tar.gz sendmail-8.14.3/cf;
tar zxvf sendmail.8.14.1.tar.gz sendmail-8.14.3/devtools
- /etc/mail/sendmail.mc を用意する
- netbsd-proto.mc(参考)
-
http://cvsweb.netbsd.org/cgi-bin/cvsweb.cgi/src/gnu/usr.sbin/sendmail/cf/cf/Attic/netbsd-proto.mc
#
# This is the prototype file for a configuration that supports SMTP
# connections via TCP and some commonly required features.
#
include(`../m4/cf.m4')
VERSIONID(`@(#)netbsd-proto.mc $Revision: 1.3 $')
OSTYPE(bsd4.4)dnl
DOMAIN(generic)dnl
FEATURE(genericstable,DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`genericstable')
FEATURE(mailertable, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`mailertable')
FEATURE(virtusertable,DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`virtusertable')
FEATURE(domaintable, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`domaintable')
FEATURE(access_db, DATABASE_MAP_TYPE` -T<TMPF> -o 'MAIL_SETTINGS_DIR`access')
FEATURE(`redirect')
FEATURE(`no_default_msa')
MAILER(local)dnl
MAILER(smtp)dnl
# Enable IPv6. IPv6 is marked as optional so the configuration file
# can be used on IPV4-only kernel as well.
DAEMON_OPTIONS(`Family=inet, address=0.0.0.0, Name=MTA, Modifiers=O')dnl
DAEMON_OPTIONS(`Family=inet6, address=::, Name=MTA6, Modifiers=O')dnl
define(`confLOCAL_MAILER', `cyrus')dnl
Mcyrus, P=[IPC], F=lsDFMnqA@/:|SmXz, E=\r\n,
S=EnvFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix,
A=FILE /var/imap/socket/lmtp
上記で最後に緑で示した 4 行は
cyrus-imapd
を local mailer に使う場合に追加する部分です。
また他からメールを受取らないようにする場合、つまり発信のみの利用であれば、
下から 5 行目付近を
次のように変更しておきます。
DAEMON_OPTIONS(`Family=inet, address=127.0.0.1, Name=MTA, Modifiers=O')dnl
DAEMON_OPTIONS(`Family=inet6, address=::1, Name=MTA6, Modifiers=O')dnl
-
(上記 *.mc から *.cf を作る)
前項で書いたように
netbsd-proto.mc
(名前は何でもいいのですが *.mc の形にします)
を作成します。内容は上に書いてあるものです。
以前は以下の数行のようにして .mc -> .cf として /etc/mail に写していました。
その上で、*.mc の .mc を .cf に変えた名前を指定
して
./Build を実行します。
cd sendmail-8.14.3/cf/cf
vi netbsd-proto.mc
./Build netbsd-proto.cf
- sendmail.cf と submit.cf を /etc/mail に写す(用意する)
ttyp0:makoto@yoshimi 11:56:15/060728(...cf/cf)> sudo cp netbsd-proto.* /etc/mail/
ttyp0:makoto@yoshimi 11:56:17/060728(...cf/cf)> \
(cd /etc/mail;
sudo ln -s netbsd-proto.cf sendmail.cf);
sudo cp -p submit.?? /etc/mail/
最近は
/usr/pkg/share/sendmail/cf
に README があり、その説明のように、このディレクトリに
sendmail.mc の名前で置いて、
make install-cf
とすれば、作ってくれます。また名前が別のものであっても、
make install-cf CF=netbsd-proto
とすれば、netbsd-proto.mc から netbsd-proto.cf を作ってくれます。
(以上の作業は su または sudo -s の後に実行します)
実行例
t-105@makoto 21:39:22/120120(..sendmail/cf)% sudo make install-cf CF=netbsd-proto
rm -f netbsd-proto.cf
m4 ../m4/cf.m4 netbsd-proto.mc > netbsd-proto.cf || ( rm -f netbsd-proto.cf && exit 1 )
echo "### netbsd-proto.mc ###" >>netbsd-proto.cf
sed -e 's/^/# /' netbsd-proto.mc >>netbsd-proto.cf
chmod 444 netbsd-proto.cf
/usr/bin/install -c -o makoto -g users -m 0444 netbsd-proto.cf /etc/mail/sendmail.cf
/usr/bin/install -c -o makoto -g users -m 0444 submit.cf /etc/mail/submit.cf
t-105@makoto 21:43:08/120120(..sendmail/cf)%
- /etc/mailer.conf を設定する
sudo cp /usr/pkg/share/examples/sendmail/mailer.conf /etc/mailer.conf
(または)
sudo ln -sf /usr/pkg/share/examples/sendmail/mailer.conf /etc/mailer.conf
- もし自分の機械の名前以外にも受取りたい機械の名前があれば、
/etc/mail/local-host-names に自分の機械名を書いておく。
そうでない時には空の譜を作っておく。(sudo touch /etc/mail/local-host-names)
ttypc:root@bologna 11:51:44/070404(/etc/mail)# echo bologna > /etc/mail/local-host-names
ttypc:root@bologna 11:51:58/070404(/etc/mail)#
- /etc/rc.d/sendmail を用意する
sudo cp /usr/pkg/share/examples/rc.d/sendmail /etc/rc.d ;
sudo cp /usr/pkg/share/examples/rc.d/smmsp /etc/rc.d
- /var/spool/clientmqueue を用意する
sudo mkdir /var/spool/mqueue ;
sudo mkdir /var/spool/clientmqueue ;
sudo chown smmsp.smmsp /var/spool/clientmqueue ;
sudo chmod 770 /var/spool/clientmqueue ;
これは既にある場合もあります。持主が smmsp になっているか確認します。
ttypc:makoto@bologna 11:53:42/070404(/etc/mail)> sudo ls -ldn /var/spool/clientmqueue
drwxrwx--- 2 1001 1001 512 Apr 3 14:10 /var/spool/clientmqueue
ttypc:makoto@bologna 11:53:45/070404(/etc/mail)> id smmsp
uid=17(smmsp) gid=17 groups=17
ttypc:makoto@bologna 11:53:50/070404(/etc/mail)>
上記に示したのは 17 であるべきものが 1001 となっているので、良くない例です。
- /etc/rc.conf に sendmail の行を追加する
sudo -s;
echo sendmail=YES >> /etc/rc.conf ;
echo smmsp=YES >> /etc/rc.conf ;
echo postfix=NO >> /etc/rc.conf
exit;
- /usr/pkg/libexec/sendmail 以下の許可を確認する
ttypc:makoto@bologna 11:58:48/070404(/etc/mail)> ls -l /usr/pkg/libexec/sendmail
total 1508
-r-xr-sr-x 1 root tinyproxy 683376 Mar 20 23:25 sendmail*
-r-xr-xr-x 1 root wheel 75381 Mar 20 23:25 smrsh*
これは良くない例です。group が smmsp になっていません
次のように言われるかも知れません。
Program mode requires special privileges, e.g., root or TrustedUser.
この文字が表示されるのは二通り考えられます。
一つは次に示した修正で直る場合。もう一つは、sendmail の処理 (process) を起動
するのが必要なのに、起動していない場合です。起動していないと /usr/bin/mail
が直接 /var/spool/mqueue を書きに行って上記の文字を表示することがあります
(この項 2011/11/25 追記)
その場合は次のように修正します。
ttypc:makoto@bologna 11:59:06/070404(/etc/mail)> \
sudo chgrp smmsp /usr/pkg/libexec/sendmail/sendmail
ttypc:makoto@bologna DING!/070404(/etc/mail)> sudo chmod 2555 /usr/pkg/libexec/sendmail/sendmail
ttypc:makoto@bologna 12:01:14/070404(/etc/mail)> ls -l /usr/pkg/libexec/sendmail
total 1508
-r-xr-sr-x 1 root smmsp 683376 Mar 20 23:25 sendmail*
-r-xr-xr-x 1 root wheel 75381 Mar 20 23:25 smrsh*
ttypc:makoto@bologna 12:01:17/070404(/etc/mail)>
- sendmail を仮に起動して見る
dl320@makoto 09:47:38/100127(..cf/cf)% /usr/sbin/sendmail -bt -v -d0
Version 8.14.4
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETISO NETUNIX NEWDB NIS PIPELINING
SCANF SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG
/etc/mail/sendmail.cf: line 0: cannot open: No such file or directory
上記は /etc/mail/sendmail.cf が用意されていない場合です。おそらく上記 5.
の段階を飛ばしてしまったかと思われます。
sendmail.cf が用意してあれば、次のようになるはずです。
dl320@makoto 09:51:48/100127(..cf/cf)% /usr/sbin/sendmail -bt -v -d0
Version 8.14.4
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETISO NETUNIX NEWDB NIS PIPELINING
SCANF SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = dl320
(canonical domain name) $j = dl320.example.com
(subdomain name) $m = example.com
(node name) $k = dl320.example.com
========================================================
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
>
(最後は ^D で抜けます)
- postfix を止め sendmail と smmspを起動する
sudo /etc/rc.d/postfix stop;
sudo /etc/rc.d/sendmail start;
sudo /etc/rc.d/smmsp start
- /etc/mail/aliases
に次のような行を追加し、newaliases をしておきます。
root: your_email@example.com
- メールを送って見る
echo test mail from root | mail -s 'test mail for this machine' root
echo test mail from root | mail -s 'test from root' address@example.com
二つ目の例を実行する時には address@example.com には実在の宛先を使って下さい。
上で root に送っていますが、
次のどちらかが必要です。
- /etc/mail/aliases に 「root -> 誰か」の設定か、
- imap 上に root 口座 (local mailer に imapd を使っている場合)
can not write to queue directory /var/spool/clientmqueue/ (RunAsGid=0, required=1000): Permission denied
というようなことがあるかも知れません。
上の場合ですと、実行 uid (/usr/pkg/libexec/sendmail/sendmail の持主
が 0 で、/var/spool/clientmqueue の group が 1000 になっていて、
合わない、ということになります。
(持主を変更した場合には s bit が落ちてしまいますので、それも復活しておきます)
dl02@makoto 04:32:11/100301(..cf/cf)% sudo chown root.smmsp /usr/pkg/libexec/sendmail/sendmail
dl02@makoto 04:32:48/100301(..cf/cf)% sudo chmod 2555 /usr/pkg/libexec/sendmail/sendmail
dl02@makoto 04:32:52/100301(..cf/cf)% ls -l /usr/pkg/libexec/sendmail/sendmail
-r-xr-sr-x 1 root smmsp 603690 Jan 10 20:59 /usr/pkg/libexec/sendmail/sendmail
- 実際に送られたかどうかを確認する
第一段階は /var/log/maillog を見ることです。
送られたメールが /var/mail/root に入っているかも知れません。
相手、上の例では address@example.com のサーバの設定によっては、
(こちらの機械の名前を挙げて)、それは DNS に登録されていない名前だから
受取らないと言うことがあるかも知れません。
もし今設定している機械が NAT (Network Address Translation) ルータの内側で、
外から見える名前になっていない等、それが本当であれば、回避方法の一つは
sendmail.cf や submit.cf の最初の方にある j マクロの行、
# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
#Dj$w.Foo.COM
この三行目の # を外し、Djmail.example.com 等のように書換えることです。
(変更した場合には、その後、
sudo /etc/rc.d/sendmail restart;
sudo /etc/rc.d/smmsp restart;
とする必要があります)