【发布时间】:2018-11-25 00:05:56
【问题描述】:
我的 phpmailer 有问题。我想发送多封不同内容的电子邮件。该脚本适用于多个地址,但不适用于数百个地址。当我尝试为 100 个用户发送电子邮件时,出现错误 503“服务不可用。由于维护停机或容量问题,服务器暂时无法满足您的请求。”
代码如下:
include('../config_inc.php');
include('../admin-settings.php');
if(isset($_POST['submit'])){
require("../phpmailer/class.smtp.php");
require("../phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
if(!empty($_POST['wyslijemail'])){
foreach($_POST['wyslijemail'] as $ids){
set_time_limit(60);
$iduser = $ids;
$tabelka = '1234567890qwertyuiopasdfghjklzxcvbnm';
$ticket = '';
for ($i=0; $i<7; $i++) {
$ticket .= $tabelka[rand()%(strlen($tabelka))];
}
$zapytanie_user = mysql_query("SELECT * FROM users WHERE id = ".$iduser."");
$user_row = mysql_fetch_array($zapytanie_user);
$admin_email = $settings_cms['email'];
$title_page = $settings['tytul_email'];
$login = $user_row['login'];
$haslo_encode = $user_row['haslo_encode'];
$tytul_aktywacja = $powiadomienia['tytul_aktywacja'];
$tresc_aktywacja = $powiadomienia['tresc_aktywacja'];
$email = $user_row['email'];
$message = $powiadomienia['aktywacja_oferta'];
$message = str_replace("{login}",$login,$message);
$message = str_replace("{domena}",$domena2,$message);
$message = str_replace("{ticket}",$ticket,$message);
$message = str_replace("{iduser}",$iduser,$message);
$message = str_replace("{haslo}",$haslo_encode,$message);
$message = str_replace("{tytul}",$title_page,$message);
$message = str_replace("tytul_aktywacja}",$tytul_aktywacja,$message);
$message = str_replace("tresc_aktywacja}",$tresc_aktywacja,$message);
$mail->IsSMTP();
$mail->CharSet = "UTF-8";
$mail->PluginDir = "phpmailer/";
$mail->From = "".$admin_email."";
$mail->FromName = "".$settings['tytul_email']."";
$mail->Host = "".$settings['smtp_serwer']."";
$mail->Mailer = "smtp";
$mail->Username = "".$settings['smtp_login']."";
$mail->Password = "".$settings['smtp_haslo']."";
$mail->IsHTML(true);
$mail->Port = "".$settings['smtp_port']."";
$mail->SetLanguage("pl", "phpmailer/language/");
$mail->Subject = $powiadomienia['tytul_aktywacja'];
$mail->Body = ''.$message.'';
$mail->AddAddress("".$email."","".$login."");
if($mail->Send()){
$check = 1;
} else {
header('Location: https://xxx?akcja=email_masowo_error');
}
$mail->ClearAddresses();
$mail->ClearAttachments();
}
if($check == 1){
header('Location: https://xxxx/show_users_list.php?akcja=email_masowo');
}
}
}
?>
【问题讨论】:
-
可能是服务器问题
-
在 if 子句中发送电子邮件后使用 sleep(1),然后检查邮件服务器的行为。很可能它已设置为仅在特定时间间隔内接受有限的电子邮件。
-
您是否尝试过在 PHPMailer 中设置 SMTPKeepAlive = true (即不为每条消息设置新连接),
-
请注意,您使用的 API mysql_* 自 PHP 7 以来已被删除。另外请注意,您的脚本对 SQL 注入广泛开放。您应该考虑切换到准备好的语句(mysqli_* 和 PDO 都支持)