2010-12-13 11 views
1

ニュースレターを送信したいメーリングリストが増えています。現時点では、1日あたり約1200通を送信していますが、これはかなり増加します。私はキューから電子メールを送信するために30分ごとに実行されるPHPスクリプトを作成しました。問題は、それが非常に遅いことです(例えば、106の電子メールを送信するには、合計74.37秒かかります)。私は最大実行時間を90秒に増やす必要がありました。私は質問が間違っていないことを確認しました、そして、それは特に長い時間がかかっている送信メール部分のようです。PHP PEARメールとALT-N Mdaemonプロで大量メールを送信する

私はMail :: factory( 'mail'、$ params)を使用しています。電子メールサーバは別のサーバでホストされているWindows用のALT-N Mdaemon proです。また、テストを行っているうちに、HotmailやYahooのアドレスには配信されていないことがわかりました。

これはなぜ起こっているのでしょうか?

foreach($leads as $k=>$lead){ 

$t1->start(); 

$job_data = $jobObj->get(array('id'=>$lead['job_id'])); 

$email = $emailObj->get($job_data['email_id']); 


$message = new Mail_mime(); 
//$html = file_get_contents("1032.html"); 

//$message->setTXTBody($text); 

$recipient_name = $lead['fname'] . ' ' . $lead['lname']; 

if ($debug){ 
    $email_address = DEBUG_EXPORT_EMAIL; 
} else { 
    $email_address = $lead['email']; 
} 
// Get from job 
$to = "$recipient_name <$email_address>"; 
//echo $to . " $email_address ".$lead['email']."<br>"; 

$message->setHTMLBody($email['content']); 

$options = array(); 
$options['head_encoding'] = 'quoted-printable'; 
$options['text_encoding'] = 'quoted-printable'; 
$options['html_encoding'] = 'base64'; 
$options['html_charset'] = 'utf-8'; 
$options['text_charset'] = 'utf-8'; 

$body = $message->get($options); 

// Get from email table 
$extraheaders = array(
     "From" => "Sender <[email protected]>", 
     "Subject" => $email['subject'] 
    ); 

$headers = $message->headers($extraheaders); 

$params = array(); 
$params["host"] = "mail.domain.com"; 
$params["port"] = 25; 
$params["auth"] = false; 
$params["timeout"] = null; 
$params["debug"] = true; 

$smtp = Mail::factory('mail', $params); 

$mail = $smtp->send($to, $headers, $body); 



if (PEAR::isError($mail)) { 

    $logObj->insert(array(
    'type' => 'process_email', 
    'message' => 'PEAR Error: '.$mail->getMessage() 
    )); 
    $failed++; 
} else { 
    $successful++; 
    if (DEBUG) echo("<!-- Message successfully sent! -->"); 

    // Delete from queue 
    $deleted = $queueObj->deleteById($lead['eq_id']); 

    if ($deleted){ 
    // Add to history 
    $history_res = $ehObj->create(array(
     'lead_id' => $lead['lead_id'], 
      'job_id' => $lead['job_id'] 
     ) 
     ); 

    if (!$history_res){ 
    $logObj->insert(array(
    'type' => 'process_email', 
    'message' => 'Error: add to history failed' 
    )); 
    } 
    } else { 
     $logObj->insert(array(
    'type' => 'process_email', 
    'message' => 'Delete from queue failed' 
    ));  
    } 
} 

$t1->stop(); 

} 
+0

これで問題は解決しませんが、私はあなたのメールを管理するメーリングリスト会社を雇うことを検討します。自分で大量メールを送信し始めると、間違いを犯すことになります。あなたのユーザーが悪いサービスを受ける最善のケース、最悪の場合、あなたのIPはメールプロバイダによってブラックリストに載せられます。 – Stephen

+0

大量メール配信を専門とする企業は、自社のソリューションよりもはるかに効率的かつ効果的です。これにより、コア製品や資産の作業にも時間を費やすことができます。 – Stephen

+0

オプションになります。電子メールを管理しキューに入れるシステムを既に持っているので、外部に電子メールを送ることを検討しているだけです。あなたが推奨するサービスはどれですか?私はブラスターを送って見ましたが、私たちが既に持っているシステムの代わりになるようです。 – Greg

答えて

0

難しい。あなたはコードをxdebugでプロファイリングして、ぶら下がっている果実を見つけ出す必要があります。

また、私は、受信者ごとの$ 0.0001(あなたは、電子メール(Redisの/ beanstalkd/gearmand /チョウゲンボウ)非同期または非常に安価である例えばのようなサードパーティの依存関係を使用して、Googleアプリのエンジンを処理するために、メッセージキューを使用して検討するかもしれないと思います/最初の1000電子メールは無料)/信頼できる。あなたの負荷を考慮すると、それはあなたに1日約10セントの費用がかかります。

+0

あなたはこのようなものを参照していますか? http://code.google.com/appengine/docs/python/mail/sendingmail.html私はすでにPHPでビルドされたカスタムメッセージキューを使用しています。キュー自体は送信側の部分であるようです。 – Greg

+0

それはまさに私が参考にしていたものでした。たぶんプロファイリングはあなたにもう少し洞察を与えるだろうか? – Alfred

0

あなたはいくつかの異なる問題に直面しています。このリンクは、あなたのニーズに関連しているが完全に固有のものではない - あなたが本当にそのキューからメールを取得し、ひいては(round robin style <にメールを処理するためにメーラーキューと、いくつかのメールサーバーを必要とする電子メールを大量に送信するために

1) 。 [あなたを始めるには十分だ])。

2.)あなたのメールは、2つの理由のいずれかでHotmail/yahooに届かない可能性があります。

)。RDNSが正しく設定されておらず、あなたのIPを探しているとき(ヘッダーから)、ヘッダーのドメインに正しくマッピングされていません。または

b)。既に、あなたはSPAMHAUSのブラックリストサービスであるかどうかにかかわらず、スパマーとしてフラグが立てられています。

関連する問題