뉴스 레터 가입자가있는 2000 개의 이메일 목록이 있다고 가정하고 대량 메일을 보내야합니다. 서버는 스팸을 방지하기 위해 이메일을 보낼 때 시간 제한이 있습니다.SwiftMailer의 Throttle Plugin을 사용하면 서버 연결이 끊어집니다.
일부에는 시간당 300 또는 500 개의 이메일이 충분합니다.
스로틀 메일러를 사용하여 스로틀 플러그인을 사용하여 분당 8 개의 이메일 (8 * 60 분 = 총 500 개의 메일 중 500 개 이하의 메일)을 보내는 동안 서버는 연결을 닫고 "404 - 찾을 수 없음 페이지"로 응답합니다.
괴상한 것은 스크립트 실행 중에 100 개 이하의 이메일을 보냈지 만 여전히 서버는 프로 시저를 무한 루프에 빠뜨리고 스크립트 실행을 종료한다는 것입니다.
스로틀 플러그인을 사용하지 않고 즉시 500 개의 이메일을 보내려고하면 매력처럼 작동합니다. 하지만 1500 또는 2000과 같은 이메일을 더 보내야하는 경우 어떻게해야합니까?
나는 스로틀 플러그인을 읽고 PHP의 기본 함수 인 sleep()
을 사용합니다.이 기능은 이와 같은 상황에서 올바르게 작동합니다.
프로세스가 HTTP 프로토콜이 아닌 Cron 작업을 통해 실행되는 경우 작동 할 수 있다고 알려졌습니다. 나는 wget과 curl을 사용하여 cron 작업을 설정했지만 아직도 운이 없다는 것을 시도했다.
내가 수행 한 연구에서 배운 것은 Swiftmailer와 함께 SMTP 서버를 사용할 때 3 초 프로세스가 28 초 (길어야)가 걸리는 것입니다. 모든 쿼리가 모두 최적화되고 모든 데이터가 서버에 과부하가 걸리지 않고 메모리에 올바르게 배치됩니다.
그 후 나는 SMTP를 사용하지 않고 한 번 시도해보기로 결정했으나 Throttler Plugin은 작동하지 않았다.
모든 제안 또는 권장 사항을 높이 평가할 것입니다.
편집 : 또한이 읽은 : 물론 SwiftMailer Batch email times my Server out
을 나는이 사용
ignore_user_abort(true);
set_time_limit(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '256M');
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 500);
PS를 :가를 계산 있도록 나는 지금 스크립트의 동작을 변경하도록 강요했다 서버의 한도는 분당 이메일에 대한 사용자 입력을 기준으로하며 활성 가입자의 총 수가 적은 경우 발송할 이메일에 대해 스로틀 플러그인없이 전송합니다.
따뜻한 안부, 조지 Girtsou