44

PHPのmail機能は、管理者やWebマスターによる明らかな構成がない(SMTP構成がないphp.iniなど)クリーンなシステムでメールを配信しているようです。この関数はどのようにしてmailメールをリモートサーバーに配信しますか?

4

4 に答える 4

26

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

于 2012-08-04T20:21:31.297 に答える
12

以下のように動作することがわかります。

最初の方法

$ ltrace php -r "mail('tester@127.0.0.1', '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

sendmailへのシンボリックリンクもそうなexim4ので、をsendmail -t -i呼び出しますexim4 -t -i

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

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

2番目の方法

スヌーピーをインストールして実行します。

# grep snoopy /var/log/auth.log | tail
... php -r mail('tester@127.0.0.1', '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

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

于 2015-05-22T16:02:59.420 に答える
7

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

また、宛先サーバーはおそらくIPアドレスを知らないため、特にNATされている場合は、スパムとしてマークされる可能性があります。

別の(既知のレギット広告)smtpサーバーを仲介として使用するように構成を変更できます。

于 2013-12-18T20:00:10.030 に答える
4

sendmail基礎となるものなどが適切に構成されていない限り、実際にはそれほど信頼性は高くありません。

Amazon SESは、使用しているどのサーバーよりも優れたサーバーを備えており、よりも多くの回数メールを受け取りますmail()

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

于 2012-08-04T20:21:39.730 に答える