사용자가 요청을 보낼 수 있는 양식이 있는 웹사이트가 있습니다. 또한 사이트는 미리 정의된 이메일을 고객에게 보냅니다. 양식에 스팸이 들어오고 있고(놀랍게도) 특정 이메일을 사용할 때 [email protected]
대상이 이메일이 유효하지 않다고 (적어도 한 번) 알려주었기 때문에 이메일이 나가는 것을 막으려고 노력하고 있습니다.
+-----------------+
| Webform |
+------+----------+
|
v
+-----------------+
| PHP |
+------+-------+--+
| |
| +-----------------+
| |
| send form data to us | send thank you note
v v
+----------------------+ +--------------------+
| [email protected] | | [email protected] |
+----------------------+ +--------------------+
최소한 오른쪽의 이메일( 로 보낸 이메일 [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에서 완전히 무시됩니까? (온라인 중우분투.)
이메일을 보내더라도 Postfix가 수신자 목록을 확인하도록 강제하는 방법이 있습니까 sendmail
?
잠재력과 관련된 또 다른 질문sendmail
질문. 하지만 대답은 이메일이 통과되도록 허용하면서도 수신자의 이메일 주소를 확인하는 대신 (내가 아는 한) 발신자를 완전히 차단하는 것입니다.
수신자를 항상 차단하는 방법을 알고 있나요?
답변1
예, PHP 구성의 SMTP 서버 및 포트 설정은 Windows 버전의 PHP에만 적용됩니다. Linux(및 기타 Unix 계열 시스템)에서 PHP는 /usr/sbin/sendmail
명령을 직접 사용하여 메일을 보냅니다.
올바르게 가정한 대로 메일은 SMTP를 통해 들어오지 않고 Postfix 대기열에 직접 삽입되므로 smtpd_recipient_restrictions
적용되지 않습니다.
기본적으로 네 가지 옵션이 있습니다.
- 원하지 않는 주소로 메일을 웹 양식으로 직접 보내는 것을 차단합니다. (메일 서버가 아님)
- 쓰기(또는 온라인에서 찾기)이리그러면 필요한 메일 필터링이 수행되고
non_smtpd_milters
Postfix 구성의 설정을 통해 호출됩니다. mail()
PHP 코드에서 간단한 함수를 사용하는 대신 다음을 사용하세요.PHP 메일러도서관에서 이메일을 보냅니다. PHPMailer는 SMTP를 통해 메일을 보내도록 구성할 수 있습니다./usr/sbin/sendmail
파일을 다음으로 바꾸십시오 .래퍼 스크립트-t
그러면 제공된 수신자 주소를 확인하고 "잘못된" 주소를 제거합니다(수신자 주소를 명령줄에서 지정하거나 인수를 사용할 경우sendmail
메시지 헤더에서 지정할 수 있으므로 이는 약간 까다롭습니다 ). 그런 다음 "real ”을 호출합니다. sendmail 바이너리를 사용하려면 다른 이름으로 이름을 바꿔야 합니다./usr/sbin/sendmail
그대로 두고sendmail_path
PHP 구성에서 스크립트를 가리키는 매개변수를 사용할 수도 있습니다 . 다음과 같은 것을 설치할 수도 있다고 생각합니다.메일 전송 프로토콜sendmail_path
매개변수가 이를 가리키도록 설정하면 함수mail()
가 SMTP를 통해 메일을 보내게 됩니다.