2010-12-30 3 views
29

PHPで電子メールメッセージを送信する場合の一般的な見解は、PHPに組み込まれたmail()関数を無視して、代わりにライブラリを使用することです。PHPのmail()関数を使用してはならないのはなぜですか?

私が知りたいのは、mail()をライブラリや拡張子に使用した実際の理由と欠陥です。たとえば、標準のmail()呼び出しに含まれていない一般的に指定されたヘッダーです。

+1

良い質問です。私は自分でmail()を使う傾向があります。それはおそらく低すぎるレベルで、ファイルを添付するか、htmlを送信するなどの準備ができていないオプションがあります。おそらく、独自のヘッダーを追加したり、これらの種類のクラス/関数を作成したりする必要はありません。 – dqhendricks

+1

私は10年以上PHPをコーディングしてきましたが、この "一般的な意見"については聞いたことがありません。また、私はメール機能の問題を知らない。私はLinuxで独占しているので、Windowsについては分かりません。メールでWindowsに問題があるかもしれません。 – Dmitri

答えて

14

Quoting:いくつかのケースではPHP mail()機能

短所、メールはそれがすべてのエラーメッセージを表示せずにWB により送信されたものの、 受信者を受信しませんでした PHP mail()を経由して送信します。その問題の最も一般的な理由は です。 は以下のとおりです。

  • メールヘッダやコンテンツ の間違った形式(Windowsの/ Unixの間に改行 中などの違い)
  • はsendmailの サーバー (php.iniの)
  • メールプロバイダにインストールまたは設定されていません recipeintメールを許可していません PHP mail();ヘッダや コンテンツのフォーマットに共通のスパム対策

エラーがメールが迷惑メールとして に扱われることを引き起こす可能性があります。最善のケースでは、 などのメールは受信者の受信トレイの迷惑メール フォルダに転送されるか、 が送信者に返送されます。最悪の場合、 のようなメールは削除されています。 コメントsendmailがインストールされていない場合、 が設定されていないか、設定されていないメールはありません。 はまったく送信できません。

GMXなどフリーメール プロバイダがメールを拒否するのは、 PHP関数mail()を介して送信するのが一般的です。非常に そのようなメールは多くの場合、受信者の任意の情報 なしで削除されます。

6

PHPのmail()はヘッダーを壊すといわれ、ゆっくり実行されます。あなたと同じように、私は常にそれに反対してきたので、私はそれを使用したことがないので、私は個人的な経験からこれを言うことができません。 entry for mail() in the PHP manualのコメントを見ると、人々が持っているいくつかの問題(特にヘッダー付き)を見ることができます。

それは、マニュアル自体によると、ので、間違いなく電子メールのいずれかのかなりの量を送信するために適していないのです

メール() 機能は、電子メールの大きな ボリュームに適していないことは注目に値しますループで。この 関数は、 という非常に効率的ではないSMTP ソケットを電子メールごとに開閉します。

大量の メールを送信するには、»PEAR :: Mail、および» PEAR :: Mail_Queueパッケージを参照してください。

AFAIK送信するメールの量に関係なく、送信するメッセージごとにソケットを開いたり閉じたりすることは決して望ましいことではありません。

基本的には機能しますが、それほどうまく機能せず、数多くのより優れたライブラリによって覆われています。

+1

今度はメール()を使っている貧しい人々のために、 。 – JakeParis

+0

@JMCこのマニュアルではMailとMail_Queueを推奨しています。それはあなたが誰に尋ねるのか、あなたが使っているメールサーバーが本当にあるかによって異なります。 –

5

重要なのはmail()機能だけでなく、同時に使用するsmtpサーバーです。私はphp:postfix、qmail、sendmailの3種類のsmtpサーバーを使用しました。

私の経験では、postfixはphp mail()で動作するのが最も簡単でしたが、postfixでもいくつかの問題がありました。小さなバグが発生します。 「to」受信者が正しく構造化された電子メールを受信し、「bcc」受信者が破損した電子メールを受信したようなものかもしれません。あなたはこれらのバグを見つけようと多くの時間を失います。そしてあなたの修正は、あなたのコードが他のsmtpサーバーと正しく動作しないようにします。

問題は電子メールヘッダーの処理に伴い、PHPは残念なことにそのことについて貧弱な仕事をしています。最近私は "PHP Mailer"ライブラリに切り替えました。私たちのウェブサイトには、2つのsmtpサーバーがあります.1つは後置、もう1つはqmailです。 「PHPメーラー」は、追加の設定をせずに両方で作業しました。

0

最も大きな理由は、mail()がメールサーバーに直接話すことができ、あなたの入力をサニタイズするときに何をしているのかわからない場合、ハッカーはメールサーバーをスプーフィングして、あなたが意図するよりも。ほとんどのサードパーティ図書館では、これを防ぐのに役立つ衛生管理(またはAPIの向上)が強化されています。

関連する問題