如何向php中的所有用户发送电子邮件?

时间:2009-06-10 04:06:46

标签: php mysql email send

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

编辑:

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

11 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

使用for循环和邮件功能的组合,例如:

$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封电子邮件并将其发送出去。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

  • 如果您必须发送批量邮件(例如简报)
  • ,请执行此操作
  • 如果邮件应立即发送(如注册确认),请不要这样做 - 用户讨厌等待

使用phpmailerswiftmailer等库。

答案 5 :(得分:1)

您也可以尝试使用PHP List

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

答案 6 :(得分:0)

您可以首先设置查询以获取每个用户的每封电子邮件,具体内容如下:

SELECT email FROM users;

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

答案 7 :(得分:0)

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

在你的php脚本中,fetch 30来自db(限制30)并使用foreach循环处理它们。每次运行后更改“email”的状态或从db中删除条目。

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

编写一个PHP脚本,以您希望的方式处理发送邮件(Stefan Mai的答案是一个很好的方法)。设计脚本以便它记录它的工作,并且在它运行时不打印任何东西(这使你有办法在以后找到错误)。假设你正在运行Linux,你可以设置cron在指定的时间运行脚本。

通过在终端会话中键入crontab -e来编辑您的cron作业。然后你输入这样的东西(这将在每晚午夜运行工作)。

 0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php

答案 10 :(得分:-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>");
   }
  }
 
   ?>