【问题标题】:Debugging the sending of bulk emails调试批量电子邮件的发送
【发布时间】:2016-03-25 00:58:53
【问题描述】:

我的应用程序允许用户一次性发送多封电子邮件。问题是,如果用户一次选择多封电子邮件,例如4000+。它显示connection time out。而且我无法调试问题,我试图增加脚本执行时间但没有运气。

我需要一个建议或方法来主要调试它。

我正在使用 Amazon 的 SES 和 php 框架 Codeigniter。

这是控制器中的代码:

function send_email(){



    $data = array();
    $sub = $this->input->post('subject');
    $msg = $this->input->post('message_email');
    $msg = str_replace("\r\n", '<br>',$msg);
    $msg = str_replace("\r", '<br>',$msg);
    $msg = str_replace("\n", '<br>',$msg);
        $emails = $this->input->post('email');
        $emails = explode(",",$emails);


            $message_m = $msg;

                $msg_t = '<html><body>';
                $msg_t .= $message_m;
                $msg_t .= '</body></html>';


                $this->load->library('email');

                    $config = array(
                        'protocol' => 'smtp',
                        'smtp_host' => 'email-smtp.us-west-2.amazonaws.com',
                        'smtp_user' => 'user',
                        'smtp_pass' => 'pass',
                        'smtp_port' => 25,
                        'mailtype' => 'html'
                    );
                    foreach ($emails as $em) {

                        $this->email->initialize($config);

                        $this->email->from('something@somewhere.com', 'Somename');


                        $this->email->to($em);

                        $this->email->subject($sub);
                        $this->email->message($msg_t);
                        $this->email->set_newline("\r\n");


                        $this->email->send();

                    }


            $this->index();


  }

【问题讨论】:

    标签: php codeigniter email debugging amazon-web-services


    【解决方案1】:

    一些想法和解决方案:

    如果您想知道可以在不超时的情况下安全地发送多少封电子邮件。我会使用日志文件进行调试,并每隔几封电子邮件打印一行。 因此,请使用计数器,每 100 封电子邮件左右打印一行带有计时器的信息,这样您就可以看到它何时中断以及发送 100 封电子邮件需要多长时间。

    我还要确保您知道亚马逊允许一次性发送这么多电子邮件。也许你应该每隔几百封电子邮件就使用睡眠功能。如果不允许,那可能是脚本正在等待的。

    关于 codeigniter 电子邮件类的另一个建议。您只需初始化一次并使用 $this->email->clear(true);功能重置所有变量。所以初始化一次并使用:

    $this->email->clear(TRUE); // you can omit the TRUE if you don't have attachements
    

    这应该会节省一些加载时间。

    看起来您正在向不同的用户发送相同的消息,所以也许密件抄送是一种选择(这样您就可以减少对亚马逊的调用)。我不知道亚马逊是否可以做到这一点,这样可能会被视为垃圾邮件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 2014-08-19
      • 2018-09-29
      • 2016-04-04
      • 2010-12-11
      相关资源
      最近更新 更多