문제

저는 웹 애플리케이션에서 대량의 이메일 전송을 처리하는 방법과 이를 위한 모범 사례가 있는지 생각하고 있습니다.StackOverflow는 이미 이것을 '주관적'이라고 표시하고 있는데, 어느 정도 그럴 수도 있지만 이 시스템을 구현하는 가장 성공적인 방법이나 표준화된 접근 방식이 존재하는지 알아야 합니다.

내 웹앱에는 1~10,000명의 사용자 그룹의 대표인 사용자가 있습니다.이 사용자는 내 시스템을 통해 모든 사용자에게 이메일로 메시지를 보낼 수 있어야 합니다.따라서 내 시스템은 각 그룹장의 개별 사용자에게 최대 10,000개의 이메일을 보내는 일을 담당합니다.

내가 아는 한, Gmail에는 개인에게 메시지를 보내는 속도 제한이 없습니다(수신자는 최대 500명임에도 불구하고).

현재 내 현재 설정은 다음과 같습니다.

  • 메시지가 시스템을 통해 전송되면 이메일 대기열에 들어갑니다.
  • cron 스크립트는 몇 분마다 대기열에서 메시지를 가져와 해당 이메일을 보냅니다.
  • 모든 이메일은 Gmail의 SMTP 서버를 통해 이루어집니다.
  • 메일링을 수행하는 실제 애플리케이션은 PHPMailer입니다.

사용자 기반이 성장함에 따라 이 설정으로는 충분하지 않을 수 있습니다.내가 가진 질문은 다음과 같습니다.

  1. 대신 로컬 SMTP 서버를 사용해야 합니까?
  2. 대신 로컬 컴퓨터에서 메일 바이너리를 사용해야 합니까?이 경우 대기열을 완전히 건너뛸 수 있을까요?
  3. 이 작업을 수행하는 데 허용되는 방법이 있습니까?

감사해요!

도움이 되었습니까?

해결책

이메일 개수가 하루에 10,000개로 "높음"이므로 Gmail(또는 기타) SMTP에 의존하지 않을 것입니다.그들이 그것을 처리할 수 없다는 것이 아니라 분명히 그들은 훨씬 더 많은 것을 처리할 수 있습니다.그러나 그들은 아마도 원하지 않을 것입니다.

로컬 SMTP 서버를 갖는 것이 IMO의 방법입니다.

  • 설정하기가 매우 쉽습니다(강력한 인증 체계 없이 사람들이 사용하지 않도록 하세요).
  • 가장 현대적인 MTA 전송 대기열을 매우 잘 처리합니다.
  • 할당량 문제로 언젠가 귀하의 계정을 차단하기로 결정한 GMail(또는 다른 사람)과 거래할 필요가 없습니다.

다른 팁

Google App Engine

나는 이것을 Google App Engine (Python)에 작성하기 때문에 다음과 같습니다.

  • 잘 조정됩니다.
  • 좋은 이메일 API가 있습니다.
  • 액세스하기에 좋은 API가있는 작업 큐가 있습니다.
  • 파이썬은 정말 좋은 언어이기 때문입니다.
  • (상대적으로) 저렴합니다.

PHP

내가 PHP에서 구현한다면 나는 것이다

  • Gmail을 통해 이러한 종류의 볼륨을 보낼 수 없기 때문에이 볼륨을 보낼 수있는 좋은 SMTP 서버를 찾으십시오. 나는 이것이 당신에게 약간의 비용이들 것이라고 확신합니다.
  • 당신이 말한 것처럼 phpmailer와 같은 메시지를 보낼 수있는 괜찮은 PHP 이메일 라이브러리를 찾으십시오.
  • Beanstalkd와 같은 메시지 대기열을 사용하여 이메일 메시지를 대기열에 넣고 이메일을 비동기로 보냈습니다. 먼저 사용자에게는 더 큰 페이지로드가 발생하기 때문입니다. 두 번째로 Beanstalkd와 같은 메시지 대기열을 사용하면 더 나은 전송 속도를 조절할 수 있으며, 이는 작업으로 PC에 과부하가 걸리지 않습니다. Beanstalkd를 컴파일 (설치)하려면 서버에 SSH에 액세스해야합니다. Beanstalkd에서 찾을 수 있습니다 Beanstalkd
  • 또한 메시지 대기열을 처리하는 백그라운드에서 PHP 스크립트를 실행하려면 SSH 액세스가 필요합니다. Beanstalkd-client를 찾을 수 있습니다 PHP Beanstalkd-Client

PHP/Apache/웹 페이지에서

이것은 메시지를 사용자에게 보낼 페이지입니다. 이 페이지에서 당신은 이것의 줄에 무언가를 코딩하여 Beanstalkd로 메시지를 보냈습니다.

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

PUT 명령을 사용하여 메시지 대기열에 메시지를 넣어야합니다.

백그라운드에서 오랫동안 실행되는 PHP 스크립트에서 :

코드는 다음과 같이 보입니다.

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

내가 말했듯이 PHP와 Google App Engine은 모두 가능하지만 구현하기가 더 쉽기 때문에 App Engine으로 이동합니다.

Gmail 및 Google Apps는 하루에 약 500 개의 이메일로 제한됩니다. 그것이 500 명의 수신자 Max와 어떻게 결합되는지 잘 모르겠지만, 10,000 개의 이메일을 보내려면 다른 메일 서버를 찾기를 원할 것입니다. 저는 개인적으로 로컬 서버 또는 ISP 또는 Datacenter의 SMTP를 사용합니다.

많은 이메일을 보내는 경우 큐를 사용하여 사용자가 이메일을 보내기를 기다리지 않도록하는 것이 좋습니다.

도메인이 스팸 도메인으로 블랙리스트를받지 않도록주의하십시오. 그렇다면 대부분의 이메일이 차단, 지원, 판매 등을 기대할 수있어 매우 비쌀 수 있습니다.

대신 서비스를 사용하고 싶을 수도 있습니다 aweber. 그들은 이러한 양의 이메일을 처리하도록 설정했을뿐만 아니라 아마도 자신이 구현할 수있는 것보다 더 많은 메트릭을 줄 수 있습니다.

그것이 어디에나 게시되는지 확실하지 않지만 경험에서 한 번에 수백 개의 메시지를 보내기 시작하면 Gmail이 계정에 15 분 정도 동결 될 것이라고 말할 수 있습니다. 이것은 지난주에 나에게 일어났다. 나만의 SMTP 서버를 호스팅해야한다고 생각합니다. Mail () 함수를 사용하면 종종 메일을 누군가의 스팸 폴더에 넣습니다.

로컬 컴퓨터에 PostFix 또는 동일한 LAN에 기계를 설치하여 최대 액세스 속도를 제공하십시오. 외부에서 잘 고정되어 있고 내부에서 빠르게 접근 할 수 있는지 확인하십시오.

그런 다음 PHP 스크립트를 코딩하여 전자 메일을 PostFix 큐에 직접 주입하십시오. 이는 우편 배송의 처리 속도를 극적으로 증가시킬 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top