• ベストアンサー

root宛てメールの転送について

sendmailの転送設定について困っていることがあるので質問させて頂きます。 あるサーバでCRONによりジョブが実行され、実行結果がroot宛にメールで配信されるようになっています。そのサーバ自体ではメールの参照を行わないため、メールは他のアドレスに転送したいと考えています。現状では /usr/bin/mail test@test.co.jp とやるとtest@test.co.jpに送信が可能です。次にroot宛のメールを転送しようと思い、/etc/mail/aliasesファイルの編集→newaliases にて転送設定を行いましたが、root宛に送信しても転送先へメールが転送されません。 aliasの設定に問題があるかと思い、以下のテストを行いましたが、設定したとおりの結果が返ってきています。 <テスト1> sendmail -C/etc/mail/sendmail.cf -v -bv root <テスト2>冗長モードでのメール配信 sendmail -C/etc/mail/sendmail.cf -v root  正常にroot宛メールがtest@test.co.jpに転送されて受信可能 しかしmailコマンドにてローカルからroot宛にメールを送信しても同様に目的のアドレスには転送されず、rootに配信されてしまいます。  /usr/bin/mail root  とやるとroot宛に送信してしまいtest@test.co.jpには送信できません。 このサーバ自体はメールの受信の必要はなく、root宛のメールを転送することができれば良いのですが、この先の対応方法が見つからず難儀しております。 情報に不足があり、状態が正確にお伝えできていないかも知れませんが、このような状態の解決のヒントをいただければと思っております。 よろしくお願い致します。 ■環境  OS :FreeBSD 4.7-RELEASE  sendmail :8.12.1(デーモン起動は行っていない)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.4

#2です。 >デーモンの起動に関してはsendmail8.12からはsubmit.cfに「FEATURE(`msp', `メールサーバ名') 」という記述を行うことで常時起動の必要はないものと >認識しておりましたが、ご指摘を参考にもう少し調べてみようと思います。 sendmailも難しくなりましたね。takabooさんの方が8.12にはお詳しそうですが、下記ページでちょっとだけ勉強しました。テストは、sendmail -C/etc/mail/submit.cf -v root ですべきではないですか?もしくは -C オプション無しで。 もしかしてsubmit.cfとsendmail.cfで違うaliasesファイルを見ているとかは無いでしょうか?submit.cfがrootに対するaliasを認識していないとsubmit.mcに上記のように指定していてもローカル配送するのでは? あと、crontabにMAILTO=test@test.co.jpと書く方法は試されましたか?#1さんのお書きの方法とは違って実行ユーザーはrootのままでメール先だけの変更ですのでスクリプト動作上の問題は無いです。mail test@test.co.jp が届くならこれなら出来そうに思うのですが。 man 5 crontab より: > LOGNAME, HOME, SHELL に加え、 ``この'' crontab で実行したコマンドの実行結 > 果をメールで送る理由がある場合、 cron(8) は MAILTO を見ます。 MAILTO が定 > 義されていて (かつ空でない) とき、そこで指定された名前のユーザへメールが > 送られます。 MAILTO が定義されているが空のとき (MAILTO="")、メールは送ら > れません。その他の場合にはメールは crontab の所有者に送られます。 cron イ > ンストール時に、メーラとして /usr/lib/sendmail ではなく /bin/mail を使う > 場合、このオプションは有用です -- /bin/mail はエリアスを行いません > し、UUCP は通常自分宛のメールを読みません。

参考URL:
http://www.imasy.or.jp/~ume/published/sendmail-milter/
takaboo
質問者

お礼

notnot様 重ねてのご回答ありがとうございます。 頂いたアドバイスを元に昨日より本日にかけていろいろ試してみました。 1)sendmail -C/etc/mail/submit.cf -v root 実行したところ/etc/aliasesファイルは参照されておらず、まさにエラーとなっているアドレスへ送信されるという結果が出ました。(以下実行結果です) Notice: -bv may give misleading output for non-privileged user root... deliverable: mailer relay, host [test.co.jp], user root@host.test.co.jp 2)-Cオプションなしでの実行 こちらは問題なく目的のアドレスに転送されるようです。 3)MAILTO=test@test.co.jpの設定 こちらも同様にroot@host.test.co.jpへ送信されてしまい、宛先不明エラーとなってしまいました。 やはりsubmit.cfが/etc/aliasesを認識していないようで、sendmail.mc同様にdefine(`ALIAS_FILE', `/etc/mail/aliases')dnlを追加してコンパイルしてみましたが結果は同様でした。 ・・・。確かに難しいですね。今後はsubmit.cfに絞って調査を進めてみます。また、cf変更ではなくても何とか解決できる方法がないかどうか調査してみようと思います。

takaboo
質問者

補足

notnot様、並びにご回答下さった方々 <お礼文に記述するところですが補足として記述いたします> 昨日までroot宛メールの転送について調査しておりましたが、一応動作は可能になりましたのでご報告いたします。 結局submit.cfを無効にすることで/etc/aliasesの内容も読み込むことに成功し、目的を達成できました。 動作的に可能となったというだけで未解決の部分が多いのですが、現状でとりあえず運用して行こうと思います。 お忙しいところご回答頂き誠にありがとうございました。

その他の回答 (3)

回答No.3

デーモン起動は行なっていない、とありますが、/etc/rc.conf の sendmail_enable には何を設定していますか? ご要望の環境であれば  sendmail_enable="NO" として、サブミッション用のデーモンだけは立ち上げないとダメかもしれません。その辺が面倒くさくて、私は全マシンで qmail に入れ替えてしまいました... qmail だと、配送専用のプロセスだけ立ち上がっていれば、外部へのメール配信(root 宛のメールの転送など)もできるので、結構安心ですよ。

takaboo
質問者

お礼

ご回答ありがとうございます。 /etc/rc.confの設定ですが、sendmail_enable="NONE"としてあります。 何とかデーモンの起動を行わないで解決したいと思っているのですが、もしsendmail8.12.*の制限ということであればやむ終えないですね。 qmailに関してですが、個人的には私も使用したいと思っております(sendmailに比べると比較的設定が簡略的なため)。しかし現環境と要望上そういった解決ができないため、今しばらく調査してみようと思います。

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

原因はデーモンが動いていないからだと思います。デーモンの動いていない環境の経験が無いので若干想像が入りますが以下に説明します。 /usr/bin/mail test@test.co.jp とやると、/usr/bin/mail は相手が他ホストなのでコマンドとしてのsendmailを起動してそれがtest.co.jpで動いているsendmail等MTAにコネクションをはってそこのtestというユーザーに送ります。 ローカルユーザー宛だと自ホストでsendmailデーモンが動いてないとローカルメーラーとして動くんだと思います。ローカルメーラーでも.forwardは見るでしょうから#1の方の通り.forwardで解決するような気がします。 第三の方法としては、crontab ファイルに MAILTO=test@test.co.jp と書くか(意味は man 5 crontab 参照)。

takaboo
質問者

お礼

ご回答、ありがとうございます。 g_nagata様へのお礼文でも書かせていただきましたが、.forwardファイルの作成では転送されませんでした。 デーモンの起動に関してはsendmail8.12からはsubmit.cfに「FEATURE(`msp', `メールサーバ名') 」という記述を行うことで常時起動の必要はないものと認識しておりましたが、ご指摘を参考にもう少し調べてみようと思います。

  • g_nagata
  • ベストアンサー率64% (27/42)
回答No.1

回避策として以下はどうでしょうか? 1)cronのジョブ実行結果を root に送らない /etc/crontab 変更例  変更前:   01 * * * * root run-parts /etc/cron.hourly  変更後:   01 * * * * test@test.co.jp run-parts /etc/cron.hourly 2)root宛てのメールを .forward にて別アカウントに転送する  /root/.forward に以下を記述   test@test.co.jp これでいけるような気がします。 1)はCronの個別ジョブ動作を変えてしまうのであまりお勧めできません。2)はaliasesをいじるよりも簡単なのでお勧めです。

takaboo
質問者

お礼

早速のご回答、ありがとうございます。 実は.forwardファイルによる転送についてはすでに試しておりました(記述漏れで申し訳ございません)。結果はやはり転送されません。 メールを転送したいCRONのジョブは「periodic daily」等ですので、confファイルにアドレスを直接記述すれば良いのですが、g_nagata様のおっしゃる通りできればその回避策は避けたいと思っております。 あと、どうせなら理由を知りたいという欲も出てきまして、時間の許す限りは調査してみようと思っております。

関連するQ&A