2

可以说,我在 mysql 数据库中有 1000 个订阅用户。如果我想向所有用户发送电子邮件,我应该怎么做?

编辑:

什么是(每个人都在谈论)cron 工作?可以举个例子吗?

4

11 回答 11

6

我建议创建一个包含所有需要发送的电子邮件的数据库表。这可以相当迅速地完成。从那里,设置一个 cron 作业,获取第一行,通过电子邮件发送它,然后删除该行。通过这种方式,您可以并行处理琐事,并且用户不必在响应页面加载之前等待电子邮件发送完毕。

于 2009-06-10T04:10:22.490 回答
2

结合使用 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 封电子邮件并将它们发送出去。

于 2009-06-10T05:31:11.443 回答
1

最好的办法是用您选择的语言编写一个 cron 作业,在服务器通常处于最平静状态时执行任务。如果您想使用 PHP,仍然使用 cron 作业。不要在响应页面请求WTF-style时这样做。

于 2009-06-10T04:13:59.637 回答
1

我建议按照其他人所说的那样,创建一个单独的数据库表,其中包含消息、主题和电子邮件地址。我还会使用 PHPMailer ( http://phpmailer.codeworxtech.com/ ) 通过 SMTP 发送电子邮件。

于 2009-06-10T05:33:20.287 回答
1

从创建代码中分离邮件发送代码(如 stefan mai 建议的那样)。将所有地址/主题/正文写入一个表,稍后再处理该表。

然后,仅每 x 分钟运行一次 cron-job,并且仅发送 y 封邮件。如果您一次发送太多邮件,您可能会比您想象的更快被标记为垃圾邮件发送者。仅当发送成功时才从表中删除邮件任务。

  • 如果您要发送大量邮件(例如时事通讯),请执行此操作
  • 如果应该立即发送邮件(如注册确认),请不要这样做 - 用户讨厌等待

使用phpmailerswiftmailer 之类的库。

于 2009-06-10T05:35:09.863 回答
1

您也可以尝试使用PHP List

安装 PHP List,导出您的电子邮件地址数据库并将其作为 CSV 导入 PHP List。然后您不必担心管理用户等,您可以获得点击跟踪。

于 2009-06-10T06:17:42.367 回答
0

您可以首先设置一个查询以获取每个用户的每封电子邮件,类似于:

SELECT email FROM users;

将其存储在变量中后,您可以使用 foreach() 和 mail() 的组合向每个用户发送电子邮件。

于 2009-06-10T04:10:28.793 回答
0

我会创建一个包含所有用户和电子邮件以及状态的表。设置 2 或 3 个 Cronjobs 来处理此表。

在您的 php 脚本中,从数据库中获取 30 个条目(限制为 30)并使用 foreach 循环处理它们。每次运行后更改“电子邮件”的状态或从数据库中删除条目。

通过这种方式,您可以确保您的服务器能够处理系统负载。

于 2009-06-10T04:49:03.040 回答
0

编写一个 PHP 脚本,以您喜欢的方式处理发送邮件(Stefan Mai 的回答是这样做的好方法)。设计脚本,以便它记录它的工作,并且在运行时不打印任何内容(这为您提供了稍后查找错误的方法)。假设您正在运行 Linux,您可以设置 cron 在指定时间运行脚本。

通过键入crontab -e终端会话来编辑您的 cron 作业。然后您输入类似这样的内容(这将在每晚午夜运行该作业)。

 0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php
于 2009-06-10T14:39:39.937 回答
0

每个用户的每封电子邮件都应该是唯一的吗?如果没有,不要为每个用户发送新邮件,将密件抄送(Blind carbon copy)添加到单个邮件中。这将使您的 smtp 服务器满意。

于 2009-06-10T05:39:53.287 回答
-1

您的问题很简单如何在 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>");
   }
  }
 
   ?>

于 2021-07-10T11:36:57.120 回答