2011-02-24 5 views
2

모든 가입자를 반복하면서 루프 내에서 mail()을 사용하는 PHP 메일 링리스트 코드를 개선하고 있습니다. 스크립트에서 "최대 실행 시간 30 초 초과"오류를 표시하는 데 사용하여 set_time_limit(0);을 추가하여 해결했습니다.BCC는 PHP 메일()을 TO와 다른 방식으로 메일 링리스트에 보냅니 까?

이제 오류는 없지만 100 개의 메시지를 보내는 데 약 7 분이 걸렸습니다. 내 옵션은 무엇입니까?

BCC 도움말에있는 모든 가입자와 단 하나의 메시지를 보내거나 "뒷 배경"과 동일한 메시지를 보내겠습니까?

+1

PHP는 아마 대량 메일 응용 프로그램에 사용하는 잘못된 도구 일 것입니다. – Spudley

+1

PHP로 대량 메일을 보내기 위해 cron 작업을 사용하는 것이 더 빠릅니다 ... 훨씬 더 빠르게 작동합니다 ... –

답변

1

BCC로 모두에게 보내는 것은 로트 일 것입니다. 코드가 더 빨리 실행되고 mail()은 한 번만 실행됩니다.

이것은 빠른 해결 방법이지만 큰 BCC 목록은 스팸 폴더의 안전한 길입니다. 그러나 mail()을 사용하면 스팸도 확실합니다.

실제로 개선하려는 경우 PHPMailer from SourceForge을 사용하고 cron을 사용하여 X 전자 메일의 일괄 처리로 스팸이 적은 SMTP를 통해 한 번만 보냅니다.

PHP의 워드 프로세서 상태 :

참고
그것은 mail() 함수 루프에서 이메일의 큰 볼륨에 적합하지 않은 것을 주목할 가치가있다. 이 함수는 전자 메일마다 SMTP 소켓을 열고 닫습니다. 이는 그리 효율적이지 않습니다.

많은 양의 이메일을 보내려면 » PEAR::Mail» PEAR::Mail_Queue 패키지를 참조하십시오.

+0

메일을 사용하는 것과 전자 메일을 전송하는 것의 차이점은 무엇입니까?)'와 'phpMailer via SMTP'? 'mail()'은 결국 같은 SMTP를 사용하지 않습니까? :) – binaryLV

+0

반드시 * 같은 * smtp. 보통 php.ini에 접근하여 그것을 변경할 수 없다면 메일은 로컬 메일 서버를 사용합니다. 배 또는 phpmailer와 같은 도서관에서 Google의 smtp를 사용할 수 있습니다. 프로토콜에 관한 것이 아니라 로컬 알 수없는 서버가 스팸 필터로 인해 안전하지 않은 것으로 간주되기 때문입니다. –

+0

@binaryLV : phpMailer는 진짜 전자 메일처럼 보이기 위해 사용할 적절한 SMTP 헤더를 알고있는 반면, 누군가 mail()과 특별한 전문 기술을 사용하지 않고 손으로 메일을 만드는 것은 꽤 뼈없는 전자 메일을 생성하게됩니다. 스팸 필터가 따로 따로 걸릴 것이라는 메일을 보내주십시오. 사실, 그러한 스팸 필터는 이러한 경우를 위해 주로 설계되었습니다. 빠르고 쉽고 저렴한 대용량 메일 링을하는 사람입니다. –

0

당신은 단순히 옵션을 요구하고 있기 때문에, 여기에 몇 가지 :

  • 는 코드를 프로파일 링하고, 가 느린 참조하십시오. 어쩌면 몇 가지 효율성 문제를 해결할 수 있습니다.
  • mail() 기능에 의존하는 것은 일반적으로 바람직하지 않습니다. 특히 swiftmail 또는 Zend_mail과 같은 더 나은 대안이 존재하기 때문에. 이러한 메일은 작은 메일 요구 사항에 과도 함일 수 있지만
  • 서버 관련 문제 일 수 있습니까? 어쩌면 서버 관리자에게 문의하십시오.
1

모든 가입자에게 BCC shouold에 지정하여 보내는 것은 더 빠르게 작동합니다. 비록 일부 사적인 환경에서는 좋은 선택 일지 모르지만 공개 웹 페이지/시스템에서는 그러한 전자 메일을 스팸으로 간주 할 수 있으므로 권장하지 않습니다.

하나의 옵션은 cron 작업을 통해 이메일을 보내는 것입니다. 이 경우 모든 전자 메일이 최종적으로 전송되는 한 전자 메일을 보내는 데 걸리는 시간은 중요하지 않습니다.

+0

500 개의 전자 메일 주소와 하나의 전자 메일 본문을 포함하는 하나의 요청은 전체 전자 메일을 포함한 500 개의 요청보다 무한히 빠릅니다. –

0

크론 작업이 더 좋습니다. 나는 이것을 사용하고 그것이 작동 ... 프로필 코드는 당신이 문제를 파악하는 데 도움이 될 것입니다.

0

BCC를 통해 메일을 보내는 것이 더 빠를 것이므로 권장합니다. 귀하의 스크립트는 SMTP 서버에 하나의 연결 만하면되며이 서버가 나머지 작업을 처리합니다.

예를 들어 PHPMailer 또는 PEAR :: Mail을 살펴 보겠습니다. 대량 메일에 대한 mail() 메소드의 나쁜 점은 전송하는 모든 이메일에 대해 SMTP 서버에 대한 새 소켓을 열 것이라는 점입니다. 좋은 메일 라이브러리는 SMTP 서버에 대한 소켓 연결을 한 번 생성 한 다음 모든 전자 메일을 보내고 끝에 닫습니다.

속도를 조금 더 높이려면 가능한 경우 SMTP 서버 구성을 살펴보고 데몬 등을 늘리십시오. 일부 SMTP 서버는 보낼 수있는 최대 값이 있음을 고려할 수도 있습니다 .