PHPがターゲットに直接移動するのではなく、ローカルPostfix SMTPを通過させるにはどうすればよいですか?

PHPがターゲットに直接移動するのではなく、ローカルPostfix SMTPを通過させるにはどうすればよいですか?

ユーザーがリクエストを送信できるフォームを含むWebサイトがあります。さらに、サイトは事前定義された電子メールを顧客に送信します。フォームにスパムが入っていて(驚くべきことに)、特定のEメールを使用するときに、宛先がE[email protected]メールが無効であること(少なくとも1回)を教えてくれたため、Eメールが出ないようにしようとしています。

+-----------------+
| Webform         |
+------+----------+
       |
       v
+-----------------+
| PHP             |
+------+-------+--+
       |       |
       |       +-----------------+
       |                         |
       | send form data to us    | send thank you note
       v                         v
+----------------------+  +--------------------+
| [email protected]  |  | [email protected] |
+----------------------+  +--------------------+

少なくとも右側のEメール(に送信されたEメール[email protected])をブロックしたいです。

これを行うには、正規表現のリストbad_recipientsを含むファイルがあります。

/.*hack.*@example.com/ REJECT
...

これは私のコンピュータではうまく機能しますが、ローカルのPHPスクリプトではすべての電子メールが渡されます。

+---------------------------+           +---------------------------+
|                           |           |                           |
|  +---------------------+  |           |  +---------------------+  |
|  |                     |  |  SMTP     |  |                     |  |
|  | My Computer Postfix +--|-----------|->| Server Postfix      +--|---> destination
|  |                     |  |           |  |                     |  |
|  +---------------------+  |           |  +---------------------+  |
|             ^             |           |             ^             |
|             | What here?  |           |             | What here?  |
|  +----------+----------+  |           |  +----------+----------+  |
|  |                     |  |           |  |                     |  |
|  | My Computer Tool    |  |           |  | PHP Website         |  |
|  |                     |  |           |  |                     |  |
|  +---------------------+  |           |  +---------------------+  |
|                           |           |                           |
+---------------------------+           +---------------------------+

メモ:ここに何がありますか?- 私の考えでは、これは次のように行われたようですsendmailpostdrop。確認できますか?

私の考えではPHPウェブサイト地域的ですサーバーサフィックス使用しないでくださいメール転送プロトコル。代わりに、次を使用しますsendmailメール転送プロトコル保護:

smtpd_recipient_restrictions=check_recipient_access regexp:/etc/postfix/bad_recipients, ...

ただし、PHPは明らかにSMTP用に設定されています。

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

Win32ではないため、設定が無視されない限り、これらのパラメータはLinuxでは完全に無視されますか? (オンライン中Ubuntu.)

電子メールを送信してもPostfixに受信者のリストを確認するように強制する方法はありますかsendmail

ポテンシャルに関する別の質問sendmail質問。しかし、答えは、電子メールが通過することを許可しながら、受信者の電子メールアドレスを確認するのではなく(私が知っている限り)送信者を完全にブロックすることです。

受信者を常にブロックする方法を知っていますか?

答え1

はい、PHP設定のSMTPサーバーとポート設定は、WindowsバージョンのPHPにのみ適用されます。 Linux(および他のUnixファミリーシステム)では、PHPは/usr/sbin/sendmailコマンドを直接使用してメールを送信します。

正しく仮定したように、メールはSMTP経由で受信されず、Postfixキューに直接挿入されるため、smtpd_recipient_restrictions適用されません。

デフォルトでは4つのオプションがあります。

  1. 不要なアドレスにメールをWebフォームに直接送信するのをブロックします。 (メールサーバーではありません)
  2. 書き込み(またはオンラインで検索)こここれにより、必要なメールフィルタリングが実行され、non_smtpd_miltersPostfix設定の設定で呼び出されます。
  3. mail()PHPコードで単純な関数を使用する代わりに、次のようにします。PHPメーラー図書館からメールを送信します。 PHPMailerはSMTP経由でメールを送信するように設定できます。
  4. /usr/sbin/sendmailファイルを次に置き換えます。ラッパースクリプト-tこれにより、指定された受信者アドレスを確認し、「無効な」アドレスを削除します(受信者アドレスをコマンドラインで指定するか、引数を使用する場合はsendmailメッセージヘッダーで指定できるため、これは少しトリッキーです)。その後、「real」を呼び出します。sendmailバイナリを使用するには、別の名前に名前を変更する必要があります。そのままにして/usr/sbin/sendmailPHPsendmail_path設定でスクリプトを指すパラメータを使用することもできます。メール転送プロトコルsendmail_pathパラメータがそれを指すように設定すると、関数mail()はSMTP経由でメールを送信します。

関連情報