CentosサーバーでSendmailを使用してPHPスクリプトのメールを送信していますが、問題は、MXレコードで指定されているものではなく、マシンのローカルメールボックスにメールが配信されることです。ドメイン-実際に私が電子メールに使用する別のマシンを指します。
Sendmailで、マシンがセットアップされているドメインのメールをローカルで配信しないようにしたいのですが、ローカル配信を無効にする簡単な方法はありますか?
ドメインがlocal-Host-namesファイルにありません。
私はすでにたくさんのグーグルをやっていました、そして私は見ました:
ローカルマシンにメールを配信しないように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
ローカル配信を無効にするために行ったこと。 example.comドメインを使用します。
要件:
手順:
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の受信トレイに配信されているメールを確認します。
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
これにより、誰かの頭痛が軽減されることを願っています。
私は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
これは決してテスト済みの事実ではなく、私が大声で考えているだけです。
パヴェルの答えが私の非常によく似た問題を解決したことを確認するだけです。
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
Cpanel/WHMを使用してサーバーを管理している場合は、[自動検出構成]ではなく、[Cpanel/WHM]で[リモートメールエクスチェンジャー]を選択してください。リモートメールエクスチェンジャーは、ローカルドメインを含むMXレコードを介してすべてのメールを送信します。自動では、ローカルドメインのメールはローカルで直接ルーティングされ、MXレコードで定義された外部サーバーには送信されません。
おそらく望んでいるものではないかもしれませんが、SSMTPは、メールハブを指定できる送信専用サーバーには非常に適しています。
これはあなたが探している解決策ではないかもしれませんが、「admin」または「root」ユーザーが大量のメールと巨大なメールボックスを受け取っていることが問題である場合は、メールボックスをクリアするcronジョブの設定を検討してください。毎週、日など.
この問題のある複数のCentOSサーバーがありましたが、さまざまな問題の診断に役立つことがあるので、メールを読めるようにしたいという難点がありました。
解決策は、単にcronジョブを実行し、時々ボックスを消去することでした。
問題が見つかった場合... cronジョブを(一時的に)コメントアウトし、手掛かりを得るためにログとメールを読みます。
ただの考え...そして、yaのための迅速/簡単な解決策。
そうでない場合は、sendmail.mcファイルを見て、それに応じて変更します。
クイックアップデート:
これは正確にはあなたが求めているものではありませんが、いくつかのアイデアを提供し、あなたのためにいくつかの光を当てるのに役立つかもしれません:
私は個人的にはPostfixの方が好きですが、@ yourdomain.comのメールを受信するように送信サーバーを設定したように聞こえます。 postfixのトランスポートメカニズムに相当するsendmailがある場合、それがサーバー間でメールを内部的にルーティングするために使用するものです。
ローカルアドレスへの配信が試行されたときにエラーを返したい場合は、アクセスマップなどを使用できます。
@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
エイリアスを使用すると、ルートメールは引き続き配信されますが、他のユーザーに配信されたメッセージは破棄されます。
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値も確認してください。
私はこれらの提案に従いましたが、パウェルが述べたステップを追加するだけであることに気づきました、
「上記とまったく同じIPアドレスに割り当てられたexample.comを定義する/ etc/hosts」、基本的に、サーバーIPの後にサーバー名を/etc/hosts
ファイルに追加しました。
メールをグーグル経由でルーティングし、メールに戻すのに十分でした。
Pawelによる修正は私にとってはうまくいきましたが、sendmailconfigがcentosに存在しなかったため、実行する必要がありました
cd /etc/mail
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart
構成を更新する