PHPMailerを使用して、データベース内のメールリストからニュースレターを送信しています。スクリプトはデータベースを照会し、whileループを使用してデータを配列に入れ、whileループで電子メールを作成して送信します。PHPMailerは約175件のメールを送信した後、ランダムにメールの送信を停止します
150以上の電子メールが送信されるまでうまくいき、ランダムに停止します。例として、161件の電子メールを送信した後、電子メールの爆発#1は失敗し、165件の電子メールを送信した後、電子メールの爆発2は失敗し、182の電子メールを送信した後、電子メールの爆発#3は失敗しました。
私は研究して研究しており、原因を見つけることができません。今私は各電子メールをTo:メッセージに送り、BCC:ルートを使ってそれらを送信しません。それは私のサーバー上の設定ですか?もしそうなら、私は何を探していますか?
また、デバッグ用のスクリプトが少しあります。最後にSQLスクリプトが送信された特定の時刻とともにデータベースに追加されます。送信されたメールの数、プロセスを停止し、どれくらい時間がかかります。
停止している電子メールはパターンが表示されていません(異なる電子メールプロバイダであることを意味します)。その電子メールを送信するには約10〜12分かかります。サーバー上のスクリプトのタイムアウトはそれよりも高いので、それは原因ではありません。次のように
私のコードは次のとおりです。
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "*server ip here*"; // specify main and backup server
$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent
$mail->SMTPAuth = false; // turn on SMTP authentication
$mail->Username = "*user*"; // SMTP username
$mail->Password = "*pass*"; // SMTP password
while($select2 = sqlsrv_fetch_array($select)) {
$email = $select2['email'];
$unid = $select2['id'];
$unemail = $select2['email'];
$to = $email;
$from = "[email protected]";
$new_date = date("n/j/y - g:i:s a");
$headers = "From: $from\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$message2 = "<html><body>";
$message2 .= $message;
$message2 .= "</body></html>";
$mail->From = "[email protected]";
$mail->FromName = "Newsletter";
$mail->AddAddress($to);
$mail->AddReplyTo("[email protected]", "Website.com");
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = $subject;
$mail->Body = $message2;
if(!$mail->Send()) {
die("mail() Failed to send email to $to.");
echo "<br><br>Mailer Error: " . $mail->ErrorInfo;
exit;
} else {
$make_sent_query = "INSERT INTO emailssent (email_signup_id, email, datesent) VALUES (?, ?, ?)";
$params_sent = array($unid, $to, $new_date);
$add_to_sent = sqlsrv_query($conn, $make_sent_query, $params_sent);
if($add_to_sent) {
echo "Message sent for email $to<br>";
} else {
die("Mail sent, but failed to insert into Sent Emails database.");
}
}
$mail->ClearAddresses(); //clear addresses for next loop
}
PHPやウェブサーバーのタイムアウトに遭っていませんか? – Nate
私が知る限り、どちらも。ランダムに停止しています。スクリプトの実行時間を1時間に設定し、15分後に停止します。 –
ループ内にメッセージをエコーしますか? – Nate