【问题标题】:SWiFT + TWIG loop different sendersSWiFT + TWIG 循环不同的发件人
【发布时间】:2014-10-17 17:50:33
【问题描述】:

我们有一个监控数据库的脚本。在数据库中存储 JSON 数据以及 fromName 和 fromEmail。如果handledAt 时间戳为空,则仍需发送电子邮件。所以我们创建了一个 cronjob 来监控handledAt 列。如果为空,则应发送电子邮件。

我们的脚本运行良好,但速度有点慢。因此,我想知道我们是否以适当的方式这样做。

抓取所有需要发送的电子邮件

foreach($ResultSelectEmails AS $key => $value)
{
        require_once '../library/Twig/Autoloader.php';

        Twig_Autoloader::register();
        $loader = new Twig_Loader_String();

        $twig = new Twig_Environment($loader, array(
                'cache' => '../tmp/cache/'
        ));

        $Contents = $twig->render(stripslashes($Templ['templateHTML']), $EData);
        $Subject = $twig->render(stripslashes($Templ['templateSubject']), $EData);

        $WriteFile = fopen('logs/'.$PDFLogFile.'.html','w');
        fwrite($WriteFile, $Contents);
        fclose($WriteFile);

        // Create the Transport
        $transport = Swift_SmtpTransport::newInstance('mail.example.com', 25)
        ->setUsername('info@example.com')
        ->setPassword('examplePassword')
        ;

        // Create the Mailer using your created Transport
        $mailer = Swift_Mailer::newInstance($transport);

        $message = Swift_Message::newInstance($Subject)
        ->setFrom(array($ResultSelectEmails[$key]['fromEmail'] => $ResultSelectEmails[$key]['fromName']))
        ->setTo(array($ResultSelectEmails[$key]['toEmail']))
        ->setBody($Contents, 'text/html', 'UTF-8')
        ;

        if(isset($EmailAttachements))
        {
            foreach($EmailAttachements AS $key => $value)
                $message->attach(Swift_Attachment::fromPath($value));
        }

        $result = $mailer->send($message);
}

在脚本中,我们为每封电子邮件创建单独的传输。有时邮件服务器会抛出错误。主要是无法登录。

我们可以提高脚本性能吗?

期待你的想法……

【问题讨论】:

    标签: php twig swiftmailer


    【解决方案1】:

    我看到一些你不应该在 foreach 循环中进行的调用。我不知道您要发送多少封邮件,但这不是最佳选择。由于您没有并行处理循环,因此您可以将几行移到外面,这应该可以防止一遍又一遍地创建一些实例。我不知道你的代码的确切用途,而且没有任何细节,很难说这是否是一个显着的改进,但你可以试一试:

    require_once '../library/Twig/Autoloader.php';
    
    Twig_Autoloader::register();
    $loader = new Twig_Loader_String();
    
    $twig = new Twig_Environment($loader, array(
        'cache' => '../tmp/cache/'
    ));
    
    // Create the Transport
    $transport = Swift_SmtpTransport::newInstance('mail.example.com', 25)
            ->setUsername('info@example.com')
            ->setPassword('examplePassword')
    ;
    
    // Create the Mailer using your created Transport
    $mailer = Swift_Mailer::newInstance($transport);
    
    foreach ($ResultSelectEmails AS $key => $value) {
        $Contents = $twig->render(stripslashes($Templ['templateHTML']), $EData);
        $Subject = $twig->render(stripslashes($Templ['templateSubject']), $EData);
    
        $WriteFile = fopen('logs/' . $PDFLogFile . '.html', 'w');
        fwrite($WriteFile, $Contents);
        fclose($WriteFile);
    
        $message = Swift_Message::newInstance($Subject)
                ->setFrom(array($ResultSelectEmails[$key]['fromEmail'] => $ResultSelectEmails[$key]['fromName']))
                ->setTo(array($ResultSelectEmails[$key]['toEmail']))
                ->setBody($Contents, 'text/html', 'UTF-8')
        ;
    
        if (isset($EmailAttachements)) {
            foreach ($EmailAttachements AS $key => $value)
                $message->attach(Swift_Attachment::fromPath($value));
        }
    
        $result = $mailer->send($message);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多