순수한 PHP로 작성된 이메일 수신을위한 SMTP 서버 (라이브러리). 이 라이브러리는 PHP와 SMTP 서버 측 프로토콜에 대한 인터페이스를 제공합니다. 모든 들어오는 이메일에 대해 ZendMailMessage 클래스 객체를 생성하고 추가 처리를 위해이 객체를 사용자 정의 PHP 기능으로 건네줍니다. 이 프로젝트는 베타 상태에 있으므로 생산 사용에는 권장되지 않습니다.
SMTPd 의 d 는 데몬을 나타냅니다. 이 스크립트는 다른 데몬 프로세스와 마찬가지로 백그라운드에서 실행될 수 있습니다. 웹 응용 프로그램으로 실행하기위한 것이 아닙니다.
믿거 나 말거나, 이메일은 여전히 인터넷의 킬러 기능입니다 . Phpmailer와 같은 수많은 프로젝트가 있습니다 : 프로그래밍 방식으로 이메일을 보내려면 (PHP와 함께). 그러나 SMTP로부터 이메일을받을 수있는 사람은 많지 않습니다.
이 인터페이스를 사용하면 앱 사용자를 위해 이와 같은 작업을 수행 할 수 있습니다.
+------+ +------------------------+ +-------+ +--------------+
| User +---> | MUA (like Thunderbird) +---> | SMTPd +---> | Your PHP App |
+------+ +------------------------+ +-------+ +--------------+
이것은 PHP로 작성된 메시징 응용 프로그램이 있지만 그래픽 사용자 인터페이스는 없을 때 유용합니다. 따라서 그래픽 사용자 인터페이스는 이메일 클라이언트가 될 수 있습니다. 예를 들어 썬더 버드.
오픈 소스 소프트웨어 협업에 대한 내 블로그 게시물에 설명 된 프로젝트는 요약합니다.
ZendMail 더 나은 솔루션으로 교체하십시오. 선호하는 설치 방법은 Packagist 및 Composer를 통한 것입니다. 패키지를 설치하려면 다음 명령을 실행하고 Composer.json에 요구 사항으로 추가하십시오.
composer require thefox/smtpd 현재 서버는 들어오는 모든 이메일을 수락합니다. Server 객체 ( $server->eventAdd($event) )에 Event 를 추가하여 들어오는 이메일에서 어떤 일이 발생하는지 결정합니다. 서버는 특정 이벤트를 처리 할 수 있습니다. 각 이벤트는 특정 트리거에서 실행됩니다. 서버에 이벤트를 추가하지 않더라도 들어오는 모든 이메일을 허용합니다.
현재 두 개의 이벤트 트리거가 있습니다.
TRIGGER_NEW_MAIL : 클라이언트가 새 이메일 전송을 마치면 트리거됩니다.TRIGGER_AUTH_ATTEMPT : 클라이언트가 인증을 원할 때 트리거됩니다. 인증이 성공했는지 여부에 관계없이 콜백 함수에서 부울을 반환하십시오. 전체 예제는 example.php 파일을 참조하십시오.
$ server = new Server (...);
$ event = new Event (Event:: TRIGGER_NEW_MAIL , null , function ( Event $ event , $ from , $ rcpts , $ mail ){
// Do stuff: handle email, ...
});
$ server -> addEvent ( $ event );
$ server -> loop (); $ server = new Server (...);
$ event = new Event (Event:: TRIGGER_AUTH_ATTEMPT , null , function ( Event $ event , $ type , $ credentials ): bool {
// Do stuff: Check credentials against database, ...
return true ;
});
$ server -> addEvent ( $ event );
$ server -> loop (); $ server = new Server (...);
// Set up server here.
// Add Events, etc, ...
while ( myApplicationRuns ()){
// Do stuff your application needs.
// ...
// Run main SMTPd loop, once.
$ server -> run ();
usleep ( 10000 ); // Never run a main thread loop without sleep. Never!
}