【问题标题】:How to send emails in large quantities with PHP script and cronjobs [closed]如何使用 PHP 脚本和 cronjobs 发送大量电子邮件 [关闭]
【发布时间】:2014-02-22 05:21:50
【问题描述】:

我需要向 8000 个订阅者发送简报,但我的主机仅支持每小时发送 100 条消息。我需要一个 php 脚本来完成这项工作,发送 8000 封电子邮件,限制为每小时 100 封电子邮件,如果可能的话,使用 cronjobs 让我不必在脚本运行时保持浏览器打开。

谢谢

【问题讨论】:

  • 您准备为上述程序员支付多少费用?为什么不把钱花在电子邮件限制更高的服务器上,或者使用 MailChimp 之类的服务(或没有品牌的替代品)
  • 因为我没钱。而且邮件数量从不超过8000。
  • 你应该看看PHPList。这是一个开源电子邮件平台,可以让您的生活更轻松。还有很多事情需要考虑,比如 ESP 通常帮助/处理的 CAN-SPAM、可传递性和抑制列表。

标签: php email cron sendmail send


【解决方案1】:

您应该有一个包含这些列的数据库表:

===============
Suscribers Table
===============
|id (int)|email (varchar)|sent (tinyint)
|1|example1@domain.com|0
|2|example2@domain.com|0
|3|example3@domain.com|0

然后是这样的 PHP 脚本:

// DB Connection
require_once 'db.php';

// Check if we have users with a 0 sent value
$query = mysql_query("SELECT COUNT(id) FROM suscribers WHERE sent = 0");
$results = mysql_num_rows($query);

// If there's one or more suscribers with a 0 sent value
if ($results >= 1) {
    // Initialize and require Swift or any other email library for PHP
    require_once 'swift/lib/swift_required.php';
    $transport = Swift_SmtpTransport::newInstance('mail.domain.com', 587)
      ->setUsername('mail@domain.com')
      ->setPassword('password');
    $mailer = Swift_Mailer::newInstance($transport);

    // Body of the email
    $body = '<html><head></head><body>Hello suscriber!</body></html>'

    // Message parameters
    $message = Swift_Message::newInstance();
    $message->setSubject('Newsletter');
    $message->setFrom(array('mail@domain.com' => 'Domain Newsletter'));
    $message->setSender('mail@domain.com');
    $message->setBody($body, 'text/html');

    // Use a query to get only 100 suscribers from the table who have a 0 sent value
    $query = mysql_query("SELECT id, email FROM suscribers WHERE sent = 0 LIMIT 100");
    while ($data = mysql_fetch_array($query)) {
        $idEmail = $data['id'];
        $message->setTo($data['email']);

        // Update the email sender ID "sent" value to "1"
        mysql_query("UPDATE suscribers SET sent = 1 WHERE id = $idEmail");
        $mailer->send($message);
    }
}

最后使用像这样指向 PHP cron 文件的 cron 作业:

/usr/bin/php -q /home/domain/public_html/newsletter_cron.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 2015-07-18
    • 2015-08-07
    • 2011-10-07
    • 2010-11-10
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多