web-dev-qa-db-ja.com

Sendmailのローカル配信を無効にする

CentosサーバーでSendmailを使用してPHPスクリプトのメールを送信していますが、問題は、MXレコードで指定されているものではなく、マシンのローカルメールボックスにメールが配信されることです。ドメイン-実際に私が電子メールに使用する別のマシンを指します。

Sendmailで、マシンがセットアップされているドメインのメールをローカルで配信しないようにしたいのですが、ローカル配信を無効にする簡単な方法はありますか?

ドメインがlocal-Host-namesファイルにありません。

私はすでにたくさんのグーグルをやっていました、そして私は見ました:

ローカルマシンにメールを配信しないようにSendmail設定

Sendmailでローカル配信を無効にする

しかし、答えがないか、適切ではありません。

別のサーバーにリレーしたくないので、ドメインに関係なくメールを送信したいだけです。

例を提供するには:

私は2つのサーバーを持っています。1つはmail.example.comにあるメールサーバーであり、webサーバーはexample.comです。Webサーバーでsmtpサービスを使用すると、現在メールはexample.comのローカルメールボックスにルーティングされますが、 mail.example.comのメールボックスに移動する必要があります

Sendmail -btの出力は以下を返します。

 ADDRESS TEST MODE(ルールセット3は自動的に呼び出されません)
 Enter 
> 3,0 [email protected] 
 canonify input:info @ example。 com 
 Canonify2 input:info 
 Canonify2 returns:info 
 canonify returns:info 
 parse input:info 
 Parse0 input:info 
 Parse0が返す:info 
 ParseLocal入力:info 
 ParseLocalが返す:info 
 Parse1入力:info 
 Parse1が返す:$#ローカル$:info 
 parseは次を返します:$#local $:info 
31
user6091

ローカル配信を無効にするために行ったこと。 example.comドメインを使用します。

要件:

  • example.com ethインターフェースの1つに割り当てられたIPアドレスを指すエントリ。
  • 上記とまったく同じIPアドレスに割り当てられたexample.comを定義する/ etc/hosts
  • example.com MXサーバーがGoogleサーバーを指している(ASPMX.L.GOOGLE.COMなど)
  • デフォルトのsendmailインストール(私のものはUbuntuにありました)

手順:

vim /etc/mail/sendmail.mc

最後に:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

その後:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart

テスト:

echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

それがGoogleサーバーに接続しているのを確認してから、Googleの受信トレイに配信されているメールを確認します。

38

SporkerとPawelのおかげで、これを修正するために私を正しい方向に導きました。

私の最初の問題は、sendmailが私のドメインのexample.comメールアカウントをローカルアカウントと見なしていたことでした。

これらのリンクは非常に有用であることが判明しました: Sendmail to local domain ignoring MX records(part 2)http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382 htmlhttp://objectmix.com/sendmail/367920-sendmail-ignores-mailertable-some-semilocal-domains.html

しかし、私の場合、FreeBSD 8.2を使用して、本当にトリックは何でしたか:

# cd /etc/mail

# vim freebsd.mc

次の2行を追加します。

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

直前:

MAILER(local)
MAILER(smtp)

# make

---これは出力---

 cp freebsd.mc Host.example.com.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 Host.example.com.mc > Host.example.com.cf
 cp freebsd.submit.mc Host.example.com.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 Host.example.com.submit.mc > Host.example.com.submit.cf

---出力の終わり---

# cp sendmail.cf sendmail.cf.bak

# cp Host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

これにより、誰かの頭痛が軽減されることを願っています。

4
estepix

私はsendmailの人ではありませんが、sendmailは/etc/mail/local-Host-namesに保存されているすべてのドメインをローカルドメイン名として扱うと思います。
このファイルを空にして(削除しないでください)、sendmailを再起動して、どのように進むかを確認できます。

[〜#〜]編集[〜#〜]
私が言及したファイル名は実際にはsendmail.cfに設定されており、あなたのファイル名はlocal-Host-namesに設定されていない可能性があります
/etc/mail/sendmail.cfを探す

# file containing names of hosts for which we receive email 
Fw/etc/mail/local-Host-names    

これは決してテスト済みの事実ではなく、私が大声で考えているだけです。

1
aussielunix

パヴェルの答えが私の非常によく似た問題を解決したことを確認するだけです。

FreeBSDを使用しているが、sendmail cf file drudgeryに関与しすぎないことに関心がある人は、次のシーケンスを使用してPawelの例に2行を追加します。

cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the 
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart
0
sporker

Cpanel/WHMを使用してサーバーを管理している場合は、[自動検出構成]ではなく、[Cpanel/WHM]で[リモートメールエクスチェンジャー]を選択してください。リモートメールエクスチェンジャーは、ローカルドメインを含むMXレコードを介してすべてのメールを送信します。自動では、ローカルドメインのメールはローカルで直接ルーティングされ、MXレコードで定義された外部サーバーには送信されません。

0
Ali Poonawala

おそらく望んでいるものではないかもしれませんが、SSMTPは、メールハブを指定できる送信専用サーバーには非常に適しています。

0
Trevor Harrison

これはあなたが探している解決策ではないかもしれませんが、「admin」または「root」ユーザーが大量のメールと巨大なメールボックスを受け取っていることが問題である場合は、メールボックスをクリアするcronジョブの設定を検討してください。毎週、日など.

この問題のある複数のCentOSサーバーがありましたが、さまざまな問題の診断に役立つことがあるので、メールを読めるようにしたいという難点がありました。

解決策は、単にcronジョブを実行し、時々ボックスを消去することでした。

問題が見つかった場合... cronジョブを(一時的に)コメントアウトし、手掛かりを得るためにログとメールを読みます。

ただの考え...そして、yaのための迅速/簡単な解決策。

そうでない場合は、sendmail.mcファイルを見て、それに応じて変更します。


クイックアップデート:

これは正確にはあなたが求めているものではありませんが、いくつかのアイデアを提供し、あなたのためにいくつかの光を当てるのに役立つかもしれません:

http://www.pettingers.org/code/sendmail-local.html

0
KPWINC

私は個人的にはPostfixの方が好きですが、@ yourdomain.comのメールを受信するように送信サーバーを設定したように聞こえます。 postfixのトランスポートメカニズムに相当するsendmailがある場合、それがサーバー間でメールを内部的にルーティングするために使用するものです。

0
Greeblesnort

ローカルアドレスへの配信が試行されたときにエラーを返したい場合は、アクセスマップなどを使用できます。

@your.domain error:nouser 550 No such user here

電子メールメッセージを「配信」するが破棄する場合は、「@your.domain」のすべてをdev-nullにエイリアスするvirtusertableエントリをインストールできます。少なくとも "root"をローカルに配信し続けることが役立つ場合があります。これは、cronジョブなどからの電子メールレポートの受信者であることが多いためです。virtusertableで次のように試してください。

[email protected] local:root

@your.domain local:dev-null

メッセージを/ dev/nullにリダイレクトするローカルdev-nullエイリアスを使用すると、ルートメールは引き続き配信されますが、他のユーザーに配信されたメッセージは破棄されます。

0
gkeramidas

Ruleset 3がドメイン情報を削除したようです。以下に、一般的なトラブルシューティング手順をいくつか示します。これが機能しない場合は、sendmail.cfを送信して確認する必要があります。

出力から、example.comはローカルドメインとして扱われます。 nslookupを実行します。

q = mxを設定

domain.com

これによりローカルマシンのIPアドレスが提供される場合は、DNSを確認する必要があります。また、/ etc/hostsを調べて、domain.comがリストされていないことを確認します。

@ domain.comも削除されているようです。user@ stackoverflow.comのようなもので試して、ローカルドメインとしてリストされているかどうかを確認してください。

Sendmail.cfファイルのCw値も確認してください。

0

私はこれらの提案に従いましたが、パウェルが述べたステップを追加するだけであることに気づきました、

「上記とまったく同じIPアドレスに割り当てられたexample.comを定義する/ etc/hosts」、基本的に、サーバーIPの後にサーバー名を/etc/hostsファイルに追加しました。

メールをグーグル経由でルーティングし、メールに戻すのに十分でした。

0
user737133

Pawelによる修正は私にとってはうまくいきましたが、sendmailconfigがcentosに存在しなかったため、実行する必要がありました

cd /etc/mail    
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart

構成を更新する

0
Joshua Vial