我有 1000 个成员的数据库,其中包含用户的电子邮件 ID,并开发了使用单个管理员帐户向数据库中的所有用户发送邮件的代码 - 管理员登录在代码中被硬编码。
现在我想把它带到下一个级别,所有管理员的登录名都将存储在另一个数据库中,代码将从数据库中读取登录名并发送邮件。例如,代码将使用 admin#1 登录向 user#1-50 发送邮件,并使用 admin2 登录向 user#51-100 发送邮件,依此类推。
下面是我正在尝试的代码,似乎多个循环存在一些问题。有人可以帮忙吗。
<?php
error_reporting(E_ALL);
//error_reporting(E_STRICT);
ini_set("display_errors", "on");
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
ini_set('memory_limit', '6500M'); //Maximum amount of memory a script may consume (128MB by default)
date_default_timezone_set('UTC');
require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$body = file_get_contents("contents.html");
$body = preg_replace('/[\]/','',$body);
$mail->IsSMTP();
$mail->Host = "ssl://smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPKeepAlive = true;
$mail->Port = 465;
$mail->Subject = "Subject";
$mail->AddReplyTo ('example@domain.com', 'test');
$mail->body = $body;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->IsHTML(true);
$mail->MsgHTML($body);
$con = mysql_connect("localhost","root","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test") or die(mysql_error()); //Databasename
$query1 = "SELECT * FROM loginids WHERE Count >= 1"; //count is column name in table loginids
$result1 = mysql_query($query1) or die(mysql_error());
$row1 = mysql_fetch_array ($result1);
$Counter = 1;
$startnum1 = 0;
$endnum1 = 0;
while ($Counter <= 3) {
$mail->Username = $row1["UserName"];
$mail->Password = $row1["Password"];
$mail->From = $row1["UserName"];
$mail->FromName = $row1["FromName"];
$startnum1 = $endnum1;
$endnum1 = $startnum1 + 2;
$query2 = "SELECT EmailID FROM dummy Limit $startnum1,$endnum1";
$result2 = mysql_query($query2) or die(mysql_error());
while ($row2 = mysql_fetch_array ($result2)) {
$mail->AddAddress($row2["EmailID"]);
//$mail->AddStringAttachment($row["EmailID"], "contents.html");
if(!$mail->Send()) {
echo "Mailer Error (" . str_replace("@", "@", $row2["EmailID"]) . ') ' . $mail->ErrorInfo . '<br />';
} else {
echo "Message sent From : " .$row1["UserName"]." Message sent to :" . $row2["EmailID"] . ' (' . str_replace("@", "@", $row2["EmailID"]) . ')<br />';
}
$mail->ClearAddresses();
}
$Counter++;
}
?>
嗨,伙计们,感谢您的宝贵反馈,非常感谢。我仍在学习,似乎还有很多事情要做。我已经相应地更新了我的代码(上面),但仍然无法发送邮件。我不确定我是否正确使用了循环。所以这就是我我正在尝试在代码中进行操作。我想使用每个帐户发送(比如说)50 封邮件。我有 3 个电子邮件帐户,$Counter 正在检查我的帐号。startnum1/endnum1 表示每个帐户应发送的电子邮件数量。
so $startnum1, $endnum1 should also be changed dynamically for each account #.
for e.g.
account#1, $startnum1=1, $endnum1=50
account#2, $startnum1=51, $endnum1=100
and so on..
现在,当我尝试此代码时,我收到“Mailer Error (recipient at domain.com) 以下发件人地址失败:gmail.com 上的 sender1 :在未连接的情况下调用 Mail()”