2011-02-07 6 views
0

저는 회사 내부에 뉴스 레터 시스템을 구축하기위한 전자 메일 라이브러리를 찾고 있습니다. 웹 서버를 차단하지 않고 메시지 큐잉 (대기열로 메일 보내기, 백그라운드에서 자동 메일 링)을 지원해야합니다. 그래서 백그라운드 처리는 서버에서 백그라운드 서비스로 실행되어야한다고 생각합니다. aspmail과 유사하지만, php.php : 메시지 대기열을 지원하는 전자 메일 라이브러리를 찾으십시오.

제안 사항? 감사합니다.

답변

2

저는 PEAR의 Mail_Queue을 사용하여 한 번에 200,000 개 이상의 메일을 대기열에 추가했습니다. 데이터베이스를 채우는 것은 사용자 정의 된 컨텐츠로도 쉽고 빠릅니다. 그리고 나서로드 평균이 너무 높지 않으면 상당히 간단한 스크립트가 약 250 개의 시간을 보냅니다. 그런 다음 루프를 돌리고 다음 배치를 전송합니다. 그것은 백그라운드에서 실행되며, 쉽게 설정할 수 있도록 큐 테이블이 비어있는 경우 잠시 동안 일시 중지되어 다시 확인됩니다 (초를 여러 번 검사하면 아무에게도 도움이되지 않기 때문에).

또한 시스템의 부하 평균을 확인하는 장점은자가 생성 리소스 기아 문제없이 대기열을 통과하는 것입니다. 다시 루프 - 다음, 잠시 동안 일시 정지 (더 나은 명령 줄에서) 일 'send_messages.php'스크립트 주변 단지 루프 데이터베이스 큐가 비워 질 때까지 -

Mail_Queue tutorial 당신에게 거의 당신이 필요로하는 모든 것을 제공합니다.

4

Gearman을 사용하여 웹 서버에서 제출 한 작업을 기다리는 자발적인 데몬을 구축하는 것이 좋습니다.

순수한 PHP 코드로 데몬을 만드는 방법을 설명하는 http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/ 좋은 기사가 있습니다.

웹 서버 측에서는 작업 (gearman 클라이언트)을 작성하고 gearman 데몬에 비동기 적으로 대기시킵니다. 그런 다음 메일러 PHP 데몬이 작업 (gearman worker)을 기다리고 대기열에서 사용할 수있을 때 실행합니다.

많은 양의 메일을 보낼 경우 이메일 처리를 최적화하기 위해 동일한 기어 맨 작업 대기열에서 대기 할 여러 서버에 작업자를 배치 할 수도 있습니다.

+0

+1 Gearman 권장 사항 –

1

웹 서버를 차단하지 않고 메시지 대기열 (대기열로 메일 보내기, 백그라운드에서 자동 메일 발송)을 지원해야합니다. 그래서 배경 처리는 서브 서비스에서 백그라운드 서비스로 실행되어야한다고 생각합니다.

WTF? 대기열 관리는 전자 메일 시스템의 업무입니다. 은 무엇을해야합니까?을 설계했습니다. 이는 응용 프로그램과 관련이 없습니다. 메일 서버가 메시지를 보낼 때마다 차단하면 이 매우입니다.

현재 제공 한 내용을 수정하는 대신 자신의 MTA를 작성하는 것처럼 들립니다.

오프라인 기능을 제공해야하는 경우 PHP가 실행중인 컴퓨터에 MTA를 설치하십시오.

+0

은 PHP에서 sendmail 호출을 차단 (상대적으로 느림)하지 않습니다. 당신이 당신의 웹 요청 안에 있다면 그것을 알아 차릴 것입니다.). 특히 당신이 그들을 많이해야 할 때? – Alfred

+0

효과적으로 그것은 exec 호출입니다.하지만 ** 절대 차단하지 않아야합니다. ** 그렇지 않으면 매우 잘못된 것입니다 (잘못 구성된 smartHost처럼) – symcbean

1

당신은 당신의 message queueredis을 사용할 수

message queue

레디 스 매우 빠르고 적극적으로 데이터 구조 서버 개발이다. redis를 사용하여 무언가를 쓰는 것은 파이처럼 쉽습니다. 왜 내가 다른 메시지 대기열에 redis를 좋아하는지 :

  • 가 적극적으로 개발되었습니다.
  • 레디 스 :

    오픈 소스는 키 - 값 저장소를 고급. 키에는 문자열, 해시, 목록, 집합 및 정렬 집합이 포함될 수 있기 때문에 데이터 구조 서버로는 이라고 종종 지칭됩니다.

    매우 강력합니다.

  • 매우 쉽게 설치할 수 있습니다 : make.
  • 에는 거의 모든 선호 언어로 c- 바인딩이 있습니다.
  • c 클라이언트 라이브러리 hiredis는 매우 사용자 친화적입니다. 정말 좋은 성능을 원한다면 C로 무언가를 쓸 수 있습니다. This example (덕분에 hiredis) make 만 사용하여 컴파일을 만들었습니다.
1

필수 항목으로 인해 본질적으로 MTA 의무를위한 상자 솔루션이 아니라고 생각합니다. 그러나 잘못 될 수 있습니다.

필자는 메일 송수신을 필드와 함께 데이터베이스 대기열에 보내어 전송 여부를 표시 한 다음 CRON 작업을 실행하여 설정 일괄 처리 , 그 전자 우편을 보내고, 보내기, 헹구기 및 반복으로 표시하십시오.

기본적으로 동일한 작업을 수행함에 따라 시스템에서 계획 한 내용을 보려면 이메일/MSN을 통해 대화를 나누고 싶습니다.

+0

후속 조치 메모 만 있으면 crons가 겹쳐지지 않도록하십시오! ! :피 – Horse

관련 문제