문제

나는 현재 음악 블로그를 쓰고 있습니다. 관리자는 2-3 일마다 새 기사를 게시합니다. 관리자가 기사를 게시하면 대량 이메일이 즉시 약 5000 명의 가입자에게 전송됩니다.

대량 메일 기능을 구현하는 가장 좋은 방법은 무엇입니까?

다음 기능이 작동합니까?

function massmail() 
{
  $content = '...';
  foreach ($recipients as $r) {
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
    mail($r, 'subject', $_content);
  }
}

또 다른 질문 : 5000 명의 가입자가 모두 Yahoo Mail을 사용하는 경우 Yahoo는 DDOS 공격으로 취급하고 SMTP 서버의 IP 주소를 차단합니까?

도움이 되었습니까?

해결책

먼저, PHP와 함께 제공되는 Mail () 함수를 사용하는 것은 최적의 솔루션이 아닙니다. 스팸으로 쉽게 표시되며 HTML 이메일을 올바르게 보내도록 헤더를 설정해야합니다. 코드 스 니펫이 작동하는지 여부에 관해서는, 그것은 당신이 HTML 코드를 올바르게하지 않고 올바르게 얻을 것이라고 의심합니다. 추가 헤더 지정

나는 당신이 살펴볼 것을 제안 할 것입니다 스위프트 메일러, HTML 지원, 다양한 MIME 유형에 대한 지원 및 SMTP 인증 (메일을 스팸으로 표시 할 가능성이 적음)이 있습니다.

다른 팁

모든 이메일을 데이터베이스 (대기열과 같은)에 삽입 한 다음 코드에서 수행 한대로 한 번에 하나씩 처리합니다 (Swiftmailer 또는 Phpmailer 등을 사용하려면 그렇게 할 수 있습니다).

각 메일이 전송 된 후에는 데이터베이스를 업데이트하여 전송 된 날짜/시간을 기록하십시오.

먼저 데이터베이스에 넣음으로써

  1. 당신이 그것을 보낸 사람의 기록
  2. 스크립트가 시간이 소요되거나 실패하고 다시 실행 해야하는 경우, 같은 이메일을 사람들에게 두 번 보내지 않을 것입니다.
  3. CRON 작업에서 보내기 프로세스를 실행하고 한 번에 한 번씩 배치를 수행하여 메일 서버가 압도되지 않도록하고 전송 된 내용을 추적 할 수 있습니다.

바운스 된 이메일 또는 유효하지 않은 이메일을 자동으로 목록에서 제거 할 수 있도록 자동으로 제거하는 방법을 명심하십시오.

많은 이메일을 보내는 경우 몇 번의 바운스를 얻을 수 있습니다.

이것은 대답이 아닌 조언입니다. 당신은 전용 메일 링리스트 소프트웨어를 사용하는 것이 훨씬 좋습니다. 우편 집배원 종종 사용되는 예이지만 단순한 것만 큼 mlmmj 충분할 수 있습니다. 대량 메일을 보내는 것은 실제로 실제로 보이는 것보다 더 어려운 작업입니다. 메일을 보내야 할뿐만 아니라 메일을 피하기 위해 "죽은"주소를 추적하거나 스팸으로 표시되는 메일 서버를 피해야합니다. 당신은 같은 이유로 구독을 취소하는 사람들을 처리해야합니다.

이러한 것들을 직접 구현할 수 있지만 특히 바운스 취급은 어렵고 보상이없는 작업입니다. 메일 링리스트 관리자를 사용하면 상황이 훨씬 쉬워집니다.

야후의 우편물을 맛볼 수있는 방법에 관해서는, 그것은 전적으로 또 다른 문제입니다. 모든 결점에 대해 그들은 큰 주식을 넣는 것 같습니다. SPF 그리고 도메인 키. 메일 서버 관리자의 협력이 필요할 것입니다.

그런 종류의 작업에 CRON을 사용하는 것을 고려할 수 있습니다. 한 번에 대량 메일을 보내는 것은 확실히 좋지 않으며 스팸, DDOS, 서버 충돌로 감지 될 수 있습니다.

따라서 Cron은 훌륭한 솔루션이 될 수 있고 한 번에 100 개의 메일을 보내고 몇 분 동안 기다리며 다음 100 등을 기다립니다.

하지 마라 표준 PHP 도구를 사용하여 5,000 명에게 이메일을 보내십시오. 대부분의 ISP에 의해 몇 초 만에 금지 될 수 있으며 결코 알지 못할 것입니다. 메일 링리스트 소프트웨어를 사용하거나 이메일 서비스 제공 업체 이것에 대해.

오히려 사용하지 않는 이유는 무엇입니까? phplist? 또한 PHP 메일러 위에 세워졌으며 많은 업계 리더들이 그것을 사용하고 있습니다. 나는 고객에게 대량 메일을 보내기 위해 몇 번 스스로 사용했습니다. Phplist의 좋은 점은 메시지를 도메인 레벨과 시간 제한 레벨에서 스로틀 할 수 있다는 것입니다.

우리가 가지고있는 몇 가지 내부 캡처 시스템으로 수행 한 작업은 사용자 기반을 Mailling 목록으로 밀고 매일 주어진 메일을 트리거하는 것입니다. 가능성은 끝이 없습니다. 그것은 오픈 소스에 대한 멋진 것입니다!

또한 배 패키지 :

http://pear.php.net/package/mail_mime http://pear.php.net/package/mail http://pear.php.net/package/mail_queue

흐느낌.

추신 : Mail ()을 사용하여 5000 개의 이메일을 보내지 마십시오. 다른 사람들이 말한 것 외에도 Mail ()가 동일한 MTA에도 이메일 세트 당 별도의 소켓을 생성하기 때문에 매우 비효율적입니다.

또한 phpmailer 클래스를 살펴보십시오. phpmailer

나는 이미 그것을 사용했다 Lotus Notus 그리고 PHP. 이 솔루션은 메일 서버에 액세스하거나 무언가를 요청할 수있는 경우 작동합니다. mail server 관리자:

1)에서 그룹을 만듭니다 mail server: "영업 부서".
2) 할당 group 그룹에 있어야하는 계정.
3) 인터넷 주소를 그룹에 할당하십시오 : salesdept@domain.com.
4) 메일 함수를 사용하여 PHP 스크립트를 만듭니다.
$ to = "salesdept@domain.com";
Mail ($ to, $ 주제, $ 메시지, $ 헤더);

그것은 나에게 효과가 있었고 그룹에 포함 된 모든 계정은 메일을받습니다.

행운의 최고.

Swiftmailer를 사용할 수 있습니다. 배치 프로세스를 사용하여.

<?php
    $message = Swift_Message::newInstance()
      ->setSubject('Let\'s get together today.')
      ->setFrom(array('myfrom@domain.com' => 'From Me'))
      ->setBody('Here is the message itself')
      ->addPart('<b>Test message being sent!!</b>', 'text/html');

    $data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error());
    while($row = mysql_fetch_assoc($data))
    {
       $message->addTo($row['email'], $row['first'] . ' ' . $row['last']);
    }

    $message->batchSend();
?>

왜 자신을 괴롭히는가? 블로그입니다 Google Feedburner 이메일을 통해 구독자에게 업데이트를 자동으로 푸시합니다.

이것의 무료 그리고 그것은 사용합니다 Google의 인프라. 그보다 더 나은 것을 얻을 수 없습니다. 나는 내 사이트 / 블로그 중 일부에 그것을 사용하며 훌륭하게 작동합니다.

단점입니다 그렇지 않습니다 적극적으로 개발 된 것 같습니다 지원되지 않습니다 더 이상. 비즈니스에 대해 진지하다면 상업용 이메일 목록으로 눈살을 찌푸 리도록 제안합니다.

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