私は Windows に Apache サーバー (2.2.14) をセットアップしており、既存の XAMPP 構成からアイデアを借用しています。現在、PHP (5.3.1) の電子メール機能を設定しようとしています。(XAMPP サーバーと同様に、添付ファイルを処理できる必要があります。)
XAMPPにはWindows 用の偽の sendmailしかし、構成に関していくつか理解できない点があります。
以下は XAMPP からの抜粋ですphp.ini
:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"
これは以下の理由で奇妙です:
- 「Unix専用」と明記されているが、
- Windowsではこのラインを使うように書かれたチュートリアルをよく見かけますが、
- 例のファイルパスはUnixでは意味をなさない
sendmail_path
デフォルトではコメントアウトされています
が本当に必要なのか疑問に思いましたsendmail.exe
。そこで、 のないカスタム Apache サーバーで、、、およびの正しい情報を追加するようにsendmail.exe
編集しました。これで、メールを送信できるようになりました。ただし、非常に遅いです。php.ini
SMTP
smtp_port
sendmail_from
その後、XAMPP サーバーに戻り、sendmail
ディレクトリの名前を変更して、sendmail を無効にしようとしました。これはある程度うまくいきました。PHP スクリプトは送信したと主張しましたが、何も起こりませんでした。
それで私はとても混乱しています。
- 私の XAMPP サーバーは
sendmail_path
コメントアウトされていますが、どうやらそれが指しているプログラムをまだ使用しているようです。どのようにしてそれを知るのでしょうか? - 私の Apache サーバーには が何もないのです
sendmail_path
が、それがなくても何とかメールを送信できます。どうやってそうなるのでしょうか?
Apache サーバーを電子メールの送信用に構成するには、実際に何をする必要がありますか?
答え1
さらに調査とテストを行った結果、次のことがわかりました。
Windowsでは、PHPのmail()関数は必ずしも同じコンピュータ上の別のプログラムにメールを渡す必要はなく、それ自体でメールサーバーに接続することができます。
しかし、これは非効率的で時間がかかります。
セットアップ偽の送信メールサーバーマシン上に を配置し、
php.ini
のsendmail_path
ディレクティブをそのマシンに向けると、電子メールの送信がはるかに高速になります。個人的には、データを消化しやすいサイズに噛み砕いて、母鳥が赤ちゃんに餌を与えるようにメールサーバーの口に吐き出すことを想像しますsendmail.exe
。うーん! でも、私がおかしいのかもしれません。sendmail.exe
にするとC:\usr\bin
、UnixベースのOSで実行されることを想定した一部のプログラムをWindowsで実行できるようになります。
ここはPHPマニュアルの情報それがこの問題を解決するのに役立ちました。
注意: mail() の Windows 実装は、Unix 実装とは多くの点で異なります。まず、メッセージの作成にローカル バイナリを使用せず、直接ソケットでのみ動作します。つまり、ネットワーク ソケット (ローカルホストまたはリモート マシンのいずれか) をリッスンする MTA が必要になります。
そして...
注意: mail() 関数は、ループ内の大量の電子メールには適していないことに注意してください。この関数は、電子メールごとに SMTP ソケットを開いたり閉じたりしますが、これはあまり効率的ではありません。大量の電子メールを送信する場合は、» PEAR::Mail および » PEAR::Mail_Queue パッケージを参照してください。
答え2
Apache は、電子メールの送信に関する設定にはまったく関与しません。これは PHP と、この場合はローカル MTA によって完全に処理されます。MTA はほとんどの場合 Sendmail または Postfix になります。この設定は、php.ini ファイルの [mail function] セクションの sendmail_path にあります。