2012-08-04 9 views
31

PHPのmail機能は、クリーンなシステムでメールを配信しているようですが、管理者またはウェブマスター(明らかに、php.iniなどのSMTP設定なし)で設定されていません。 mail機能は、リモートサーバーにメールをどのように配信しますか?PHPの `mail`はどのように動作しますか?

+0

なぜ設定を完了する必要がありますか?ウェブマスターにメールを配信することを意味しない限り、ウェブマスターが設定することは意味がありません。 – 11684

+0

あなたは間違った質問をしています - PHPのmail()関数には何も問題はありません - それは信頼できません。問題は、メールの内容と配信です。より良い質問は、「私のメールがスパムフォルダで終わるのを避けるにはどうすればいいですか?」です。 – Repox

+0

彼は「信頼できる」と言ったが、これは本当に質問ではない...ここ – Alex

答えて

22

オン* nixは、sendmailバイナリを呼び出し、メール設定を使用して電子メールをルーティングします。 Windowsでは、SMTPサーバーに送信します。どちらの場合も、sysadminはメールシステムを設定します。

+2

私が尋ねた質問にお返事いただきありがとうございます。 PHPがリモートサーバー自体に接続してSMTPを処理していたかどうか、またはローカルサーバー上のMTAにそのタスクを渡したかどうかはわかりませんでした。また、なぜこの質問が下落しているのか知っていますか?私は多くの人々がそれを単に誤解していると思います。それは([FAQ](http://stackoverflow.com/faq)で定義されているように)サイトの範囲に適合しているようです。 –

+5

@トム:人々は質問ではなく言葉に固執しています。 –

+0

問題を修正するための質問を修正しました。私はそれについて「あいまいで、あいまいで、不完全で、過度に広い、または修辞的である」ことを理解していません。私はPHPチャットルームで尋ねようとしましたが、そこにモデレーターはいなかったか、彼らの誰も答えませんでした。サイトについて知る良い場所はありますか? –

4

基本的にsendmailなどが正しく設定されていない限り、実際にはそれほど信頼性がありません。

Amazon SESは、使用しているサーバーよりも優れたサーバーを持ち、mail()を使用した場合よりも多くの時間にメールを取得します。

mail()を使用すべきでない本当の理由は、あなたのサーバのIPアドレスがGMailやYahooなどのメールサービスでは完全に不明で、スパムとしてマークされる可能性が高いからです。なぜスパムとしてマークされますか? mail()は非常に簡単であり、スパムの目的で悪用するのが簡単です。

+2

これは本当に質問に答えるものではありません。どのように機能するのですか?私は他のもののためにSESを使う。これは単に設定なしのクリーンインストールでどのように動作するのか、なぜスパムとマークされているのか、代わりに使うべきなのかを知りたいだけでした。しかし、答えをありがとう。 –

+0

sendmail。 /会話。 – David

4

mail()は、DNSを使用してターゲットドメインのMXレコードを検索し、そこで直接配信するsendmailを使用します。それでおしまい。

宛先サーバーはおそらくあなたのIPアドレスを知らないので、特にNATされていると、迷惑メールとしてマークされる可能性があります。

あなたの設定を変更して、異なる(正当な知られている)smtpサーバーを仲介者として使用することができます。

7

以下のように動作します。

上記コマンドの結果から、第一の方法

$ ltrace php -r "mail('[email protected]', 'Test', 'Hello world');" 2>&1 | grep sendmail 
memcpy(0x095ea168, "sendmail_from", 14)   = 0x095ea168 
memcpy(0x095ea1e0, "sendmail_path", 14)   = 0x095ea1e0 
popen("/usr/sbin/sendmail -t -i ", "w")   = 0x0977c7c0 

popen()関数/usr/sbin/sendmail -t -iのプロセスを開くことがわかります。

$ ls -l /usr/sbin/sendmail 
... /usr/sbin/sendmail -> exim4 

だからsendmailexim4へのシンボリックリンクであるためsendmail -t -iexim4 -t -iを呼び出します。

そして、あなたはこれらのオプション-t -iについて読むことができますexim4のマニュアルページで:

$ man exim4 | grep ' -t -i' 
-ti  This option is exactly equivalent to -t -i. It is provided for compatibility with Sendmail. 

第二の方法

snoopyをインストールし、実行します。

# grep snoopy /var/log/auth.log | tail 
... php -r mail('[email protected]', 'Test', 'Hello world'); 
... /usr/sbin/sendmail -t -i 
... /usr/sbin/exim4 -Mc 1YxxYn-0006a7-Nw 
... /usr/sbin/exim4 -t -oem -oi -f <> -E1YxxYn-0006a7-Nw 
... /usr/sbin/exim4 -Mc 1YxxYn-0006aB-Oj 

上記のコマンドの結果実行されたコマンドのシーケンスを示します。

関連する問題