可以说,我在 mysql 数据库中有 1000 个订阅用户。如果我想向所有用户发送电子邮件,我应该怎么做?
编辑:
什么是(每个人都在谈论)cron 工作?可以举个例子吗?
我建议创建一个包含所有需要发送的电子邮件的数据库表。这可以相当迅速地完成。从那里,设置一个 cron 作业,获取第一行,通过电子邮件发送它,然后删除该行。通过这种方式,您可以并行处理琐事,并且用户不必在响应页面加载之前等待电子邮件发送完毕。
结合使用 for 循环和 mail 函数,例如:
$rs = mysql_query('SELECT email from emailList LIMIT 0, 10');
while(list($email) = mysql_fetch_row($rs))
{
// Send Email
mail($email, 'Your Subject', 'Your Message');
}
但正如大家所说,不要一口气运行它。我严重怀疑任何服务器都能处理发出 1000 个电子邮件请求的负载。运行一个 cron 作业,这样您的代码在每次运行时都会检索到 30 到 50 封电子邮件并将它们发送出去。
最好的办法是用您选择的语言编写一个 cron 作业,在服务器通常处于最平静状态时执行任务。如果您想使用 PHP,仍然使用 cron 作业。不要在响应页面请求WTF-style时这样做。
我建议按照其他人所说的那样,创建一个单独的数据库表,其中包含消息、主题和电子邮件地址。我还会使用 PHPMailer ( http://phpmailer.codeworxtech.com/ ) 通过 SMTP 发送电子邮件。
从创建代码中分离邮件发送代码(如 stefan mai 建议的那样)。将所有地址/主题/正文写入一个表,稍后再处理该表。
然后,仅每 x 分钟运行一次 cron-job,并且仅发送 y 封邮件。如果您一次发送太多邮件,您可能会比您想象的更快被标记为垃圾邮件发送者。仅当发送成功时才从表中删除邮件任务。
使用phpmailer或swiftmailer 之类的库。
您也可以尝试使用PHP List。
安装 PHP List,导出您的电子邮件地址数据库并将其作为 CSV 导入 PHP List。然后您不必担心管理用户等,您可以获得点击跟踪。
您可以首先设置一个查询以获取每个用户的每封电子邮件,类似于:
SELECT email FROM users;
将其存储在变量中后,您可以使用 foreach() 和 mail() 的组合向每个用户发送电子邮件。
我会创建一个包含所有用户和电子邮件以及状态的表。设置 2 或 3 个 Cronjobs 来处理此表。
在您的 php 脚本中,从数据库中获取 30 个条目(限制为 30)并使用 foreach 循环处理它们。每次运行后更改“电子邮件”的状态或从数据库中删除条目。
通过这种方式,您可以确保您的服务器能够处理系统负载。
编写一个 PHP 脚本,以您喜欢的方式处理发送邮件(Stefan Mai 的回答是这样做的好方法)。设计脚本,以便它记录它的工作,并且在运行时不打印任何内容(这为您提供了稍后查找错误的方法)。假设您正在运行 Linux,您可以设置 cron 在指定时间运行脚本。
通过键入crontab -e
终端会话来编辑您的 cron 作业。然后您输入类似这样的内容(这将在每晚午夜运行该作业)。
0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php
每个用户的每封电子邮件都应该是唯一的吗?如果没有,不要为每个用户发送新邮件,将密件抄送(Blind carbon copy)添加到单个邮件中。这将使您的 smtp 服务器满意。
您的问题很简单如何在 php 中向所有用户发送电子邮件?这是简单的答复
块引用
<?php
echo "In Send mail file...</br></br>";
include 'database.php';
$sql = "SELECT * FROM users ";
$get = mysqli_query($db,$sql);
echo "Database selected email will start now....</br>";
$c = 1;
while($row = mysqli_fetch_array($get))
{
echo "sending ".$c."</br>";
$c =$c+1;
$to = $row['email'];
$subject = 'thank you..';
$headers = "From: example@gmail.com";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "CC: example@gmail.com\r\n";
$message = '<html><body>';
$message .= '<img src="example." />';
$message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
$message .= "<tr style='background: #eee;'><td><strong>UserName:</strong> </td><td>" . $row['username']. "</td></tr>";
$message .= "<tr style='background: #eee;'><td><strong>Password:</strong> </td><td>***</td></tr>";
$message .= "<tr><td><strong>Email:</strong> </td><td>" .$row['email']. "</td></tr>";
$message .= "<tr><td><strong>Registeration</strong> </td><td>Success</td></tr>";
$message .= "<strong>We want to thank you for your time while waiting with us during, Remember we were once known lot more...</strong> ";
$message .= "</table>";
$message .= "</body></html>";
if ( mail($to, $subject, $message, $headers)) {
echo("Email successfully sent to $to...");
} else {
echo("Email sending failed...</br>");
}
}
?>