ラズパイやPC Linuxで構築したサーバ機では, ログの監視結果などをメール送信できると格段に使い勝手が向上します.
しかし今のインターネットは迷惑メール対策がしっかりしています.例えば
などの迷惑メール対策があり,これらの対策を突破しないとメールは相手に届きません.
exim4の基本設定
基本的な設定は dpkg-reconfigure で行うのが楽です.
$ sudo dpkg-reconfigure exim4-config
慣れている人は /etc/exim4/update-exim4.conf.conf を直接編集してもOKです.
設定で大事なのは smarthost の設定です.smarthost で中継先のSMTPサーバを指定します.書式は
SMTPサーバ名::ポート番号
です.区切りは":"ではなくて "::" とコロンを2回連続で書くことに注意してください.
smarthost = "smtp.gmail.com::465"
となります
SMTP-authのパスワード設定
/etc/exim4/passwd.client にパスワードを記入します
*:アカウント名:パスワード
"*"の部分はSMTPサーバーの名前です.今回の設定方法では,SMTPサーバーは一つしか設定しないので,"*"と書いておきましょう.
パスワードは平文で記入します.
心配な人は /etc/exim4/passwd.client のパーミッションを確認しましょう.デフォルトでroot以外はファイルの中身を閲覧できないようなっているはずです(一般ユーザでpasswd.clientの中身が読めたらセキュリティホールです.開発者にバグレポートを出しましょう)
exim4の設定ファイルの更新
/etc/exim4/exim4.conf.localmacros の末尾に以下の行を追加します
MAIN_TLS_ENABLE = 1 REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = * TLS_ON_CONNECT_PORTS = 465 REQUIRE_PROTOCOL = smtps
続けて /etc/exim4/exim4.conf.template の .ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS ... .endif の部分に以下の行を追加します
.ifdef REQUIRE_PROTOCOL
protocol = REQUIRE_PROTOCOL
.endif
さらに下記3行を /etc/exim4/exim4.conf.template の .ifdef MAIN_TLS_ENABLE の次の行に追加します.
.ifdef TLS_ON_CONNECT_PORTS
tls_on_connect_ports = TLS_ON_CONNECT_PORTS
.endif
設定の反映と exim4 の再起動
$ sudo /usr/sbin/update-exim4.conf
$ sudo /etc/init.d/exim4 restart
動作確認
配信経路確認
/usr/sbin/exim4 を使うと,メールの配信経路を確認できます.
$ /usr/sbin/exim4 -bt hogehoge@example.com R: smarthost for hogehoge@example.com hogehoge@example.com router = smarthost, transport = remote_smtp_smarthost host 外部SMTPサーバ名 [IPアドレス] port=465
- smarthostの設定で,外部SMTPサーバーに中継されていること
- 465ポートに送信していること
が確認できます
送信テスト
mailコマンドでメールを送信してみましょう
$ echo "hogehoge" | mail -s test hogehoge@example.com
トラブルシューティング
ログ
エラーなどはすべてログファイルに出力されます.うまく行くときも,うまく行かないときも,ログファイルを見るのが基本です.
$ sudo tail -f /var/log/exim4/maillog
メールキューを全削除
$ sudo -s exim -bp | exiqgrep -i | xargs exim -Mrm