2011-12-29 6 views
1

php5 웹 앱에서 사용자의 이메일 주소를 가져 와서 데이터베이스에 저장하고 이메일을 완료 할 때까지 기다리지 않고 이메일을 보내려고합니다. Gmail을 사용하면 몇 초가 걸릴 수 있습니다., 다른 프로세스로 이메일을 보내고 싶습니다.

fopen("http://self.com/mailer.php", "r")에 대해 생각합니다. 여기에서 mailer.php은 실제 메일 발송을 수행합니다. 이게 효과가 있니?

+0

전자 메일을 보내는 데는 수 밀리 초가 걸립니다. 이 때문에 실제 성능 문제가 있습니까? –

+0

사용자 대기없이 귀하의 평균은 무엇입니까? –

+0

Gmail을 통해 이메일을 보내는 데 몇 초가 걸릴 수 있습니다. 이메일을 보내기를 기다리지 않고 다음 페이지를 사용자에게 보여주고 싶습니다. –

답변

1

과거에는 나에게 잘 맞았던 두 가지 접근 방식이 있습니다.

데이터베이스 메일 큐

은 데이터베이스 또는 영구 저장을 위해 사용하는 어떤 다른 사람에 "email_queue"테이블을 만듭니다. 각 입력란에는 이메일 (예 : 제목, 수신자, 발신자, 본문 등)을 보내기 위해 필요한 모든 항목과 '보낸 사람'플래그 입력란이 있습니다. 전자 메일을 보내려면 도우미 클래스를 사용하여이 테이블에 항목을 추가하십시오.

그런 다음 보낸 플래그가 0으로 설정된 항목을 필터링하는 대기열 테이블에서 전자 메일을 보내고 마지막으로 보낸 플래그를 1로 설정하는 cli PHP 스크립트를 만듭니다.이 스크립트는 cron 작업 하지만 1 분 이상 자주 실행해야하므로 Frequent-cron과 같은 것을 사용할 수 있습니다. 예약 된 작업은 하나의 웹 서버에서만 실행되어야합니다. 많은 경우 (그리고 영구 저장소가 공유된다고 가정).

로컬 전자 메일 큐

는 또한 외부 SMTP 서비스를 사용하여 메일을 전달하기 위해 각 웹 서버의 로컬 후위 서버를 구성하는 일부 성공을 거두었습니다. 여기에서 목표는 postfix가 (로컬이기 때문에) 가능한 한 빨리 전자 메일을 수락 한 다음 다른 프로세스의 외부 SMTP 서버를 통해 전자 메일을 전달하는 것입니다. Postfix는 중간 대기열 역할을합니다. 도움이

나는 개인적으로 ..이 앱을 통계 분석 '기록 유지 등을 위해 이메일 전송에 대한 자세한 정보를 제공하기 때문에 최초의 솔루션과 같은

희망.

+0

감사합니다. cron 대신에 메일 대기열을 확인한 후 60 초 동안 기다리는 데몬에 대해 어떻게 생각하십니까? 이것은 db 재 연결을 저장합니다. –

+1

PHP가 아닌 다른 것으로 커스터마이징을해야합니다. PHP는 미친 사람처럼 메모리를 누출합니다. :) 그래서 항상 실행중인 채로 두는 것이 지속 가능하지 않을 수 있습니다.DB 재 연결은 대개 큰 문제는 아닙니다. – SuitedSloth

+0

잘 알고 있습니다. 클라이언트에서 아약스를 사용하여 이메일을 보내는 서버로 돌아갈 것이라고 생각합니다. 신뢰할 수 없기 때문에 (클라이언트가 새 페이지로 이동) cron을 사용하여 같은 페이지를 넘겨서 삭제 된 전자 메일을 선택합니다. –

관련 문제