【问题标题】:How can I send an email to lots of users using a proper way in CodeIgniter 3如何在 CodeIgniter 3 中使用正确的方式向大量用户发送电子邮件
【发布时间】:2016-08-25 06:08:22
【问题描述】:

我需要一些建议,因为我正在构建一个订阅模块。我有这么多电子邮件的列表。假设有 1052 封电子邮件。我有这样的代码:

$email_list = $this->getClientEmails(); //all email for now returns 1052 valid emails
$valid_email = array();
$invalid_email = array();

if(count($email_list) > 0) {
    for($x = 0; $x < count($email_list); $x++) {
        if(valid_email($email_list[$x]['email'])) {
            $valid_email[]  = $email_list[$x]['email'];
        } 
        //get all invalid emails
        /*else {
            $invalid_email[] = array(
                'id'    =>  $email_list[$x]['id'],
                'email' =>  $email_list[$x]['email']
            );
        }*/
    }
}

$email_string = implode(',', $valid_email);


$this->email->set_mailtype("html");

$this->email->from($from, 'Sample Admin');
$this->email->to($email_string); //send an email to 1052 users
$this->email->cc('test@sampleemail.com.ph');
$this->email->subject($subj);
$this->email->message($content);

$send_mail = $this->email->send();

if($send_mail) {
    fp('success');
} else {
    fp('failed');
}   

如果我发送这样的电子邮件可以吗?或者我应该循环将我的电子邮件发送给不同的用户?意味着我不会使用我的内爆字符串。我会每周发送一次。还有,如果中途突然停止发送邮件怎么办?我需要重新发送吗?或者我应该在我的表格中创建一个列,如果电子邮件发送或不发送,它会更新吗?

你能给我一些建议吗?多谢了。

【问题讨论】:

    标签: php codeigniter email


    【解决方案1】:

    好的,因为您有一个邮件列表,所以我建议您将脚本推送到后台。使用 selinium 或 cron 以使页面渲染不会卡住。

    完成后,您可以通过任何一种方式发送电子邮件、发送给多个人或一次发送给一个人,它们都是有效的,不会造成任何问题。这里需要考虑的一点是您维护的SMTP 连接。

    如果您是单独发送它们,您不想关闭与 SMTP 服务器的连接并每次重新连接以发送邮件,这只会导致开销。

    我应该说,从您的情况来看,发送电子邮件的最有效方式是在某个数据库上创建一个队列,最好是 redis,并让任务在后台处理它们(cron job 如果您在 cpanel 上,selinium 如果您拥有服务器)

    最后,这是您可能想要测试的部分。因为你有一个邮件列表,我猜你不希望人们看到你的整个列表,所以当你一次向所有人发送邮件时检查标题,如果你没有看到来自其他用户的电子邮件,你很好go else 分别发送给他们每个人。

    还有最后一件事,未送达的电子邮件通常会被退回,这可能反映了您服务器上的问题,因此有一个脚本可以标记不断被拒绝的电子邮件并停止向相同的电子邮件发送邮件,否则您的ip address 可能会以错误的回购结束并且邮件可能最终成为垃圾邮件。

    【讨论】:

    • 感谢您对我的问题做出的翔实回复。我会尝试做一个 cron 工作。 (我对 cron 的事情还是很陌生……)。顺便说一句,我找到了一些关于我的问题的文章。你能看看这个stackoverflow.com/questions/21447471/…
    • @Jerielle 该问题已关闭,因此我无法在那里回答。无论如何,解决方案非常简单。正如我所说,排队。现在假设 cron 和 mysql,只需在 sql 中创建一个表,其中包含您需要发送的所有邮件。在 php 中创建一个每小时调用一次的 cron 脚本。从表中选择 100,发送邮件并删除这 100 行。这将确保每小时发送 100 封邮件。仅供参考,我注意到那里有一些关于浏览器的东西,你不需要打开浏览器来运行 cron 脚本:) 在后台运行
    【解决方案2】:

    您是否想过在您的 CodeIgniter 安装中使用 PHPMailer 作为库?

    你可以这样做:

    if(count($email_list) > 0) {
    for($x = 0; $x < count($email_list); $x++) {
        if(valid_email($email_list[$x]['email'])) {
            $mail->addAddress($email_list[$x]['email'], $x);
        } 
    }
    }
    

    PHPMailer的使用方法请参考this example

    我希望这会有所帮助,或者至少它可以让您对如何做到这一点有不同的看法。

    参考:

    或者我应该在我的表格中创建一个列,如果电子邮件发送或不发送,该列将更新?

    是的,我认为如果您想控制是否已发送电子邮件,您应该在表格中使用 1 个字符的字段作为“标志”,以确认电子邮件已发送给您的用户。

    【讨论】:

    • 这个问题有很多可能的方法,这只是一个关于如何做到这一点的快速解决方案。
    猜你喜欢
    • 2011-09-05
    • 2016-03-31
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2014-02-20
    • 2015-09-06
    • 2017-12-07
    • 2011-07-19
    相关资源
    最近更新 更多