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