プロバイダのサーバ経由でのメールの送信

最近流行の Outbound Port25 Blocking (OP25B) ではないが、自宅サーバから直にメールを送ると相手によっては受け取ってもらえないようになってきた。調べてみると、自宅サーバの sendmail を使ってプロバイダのメールサーバ経由で外部へ送る際にsendmail をクライアントとして SMTP 認証させるノウハウが広く公開されているようなのでそれを試してみた。

まず、プロバイダのメールサーバの仕様を確認する。

$ telnet <smtpserver> 25
<略>
220 xxx.xxx.xxx.xxx ESMTP Sendmail; xxx, xx Feb 2008 xx:xx:xx +0900
EHLO localhost
250-xxx.xxx.xxx.xxx Hello xxx.xxx.xxx.xxx [xxx.xxx.xxx.xxx], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 10485760
250-AUTH PLAIN LOGIN CRAM-MD5
250-STARTTLS
250 HELP
QUIT
221 2.0.0 xxx.xxx.xxx.xxx closing connection
Connection closed by foreign host.
<略>

認証には PLAIN, LOGIN, CRAM-MD5 が利用できるようである。

SMTP 認証させるには SASL をリンクした sendmail が必要だそうだ。NetBSD 3.1 付属の sendmail は SASL がリンクされていないそうなので、pkgsrc から sendmail をインストールする。最近リリースされた NetBSD 4.0 では sendmail が外され、postfix のみになったらしい。どちらにせよ、SASL はリンクされていないので pkgsrc などから入れる必要がある。

PKG_OPTIONS.sendmail に sasl と tls を追加して sendmail をインストールする。SASL のライブラリは自動的にインストールされるが、認証モジュールは個別にインストールする必要がある。つまり、CRAM-MD5 を有効にするためには cy2-crammd5 を追加でインストールする必要がある。

/etc/mk.conf への追加内容

PKG_OPTIONS.sendmail=sasl tls

sendmail, cy2-crammd5 のインストール

$ cd <pkgsrcdir>/mail/sendmail
$ make install
$ cd <pkgsrcdir>/security/cy2-crammd5
$ make install
# ln -fs /usr/pkg/share/examples/sendmail/mailer.conf /etc/mailer.conf

/etc/mtree/special.local:

./etc/mailer.conf                       type=link mode=0444

sendmail.mc への追加項目

define(`SMART_HOST', `relay:<smtpserver>')dnl
define(`confRELAY_MAILER', `esmtp')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
FEATURE(authinfo,     DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`authinfo')
define(`confAUTH_MECHANISMS', `CRAM-MD5 DIGEST-MD5 LOGIN PLAIN')dnl

/etc/mail/authinfo の内容

AuthInfo:<smtpserver>       "U:<user>" "P:<password>" "M:CRAM-MD5"