3

我想我一定是在这里做错了什么,因为我的代码只向表中的最后一个订阅者发送了一封电子邮件。当我记录订阅者数组时,很明显它试图发送给多个订阅者。我认为问题与尝试将它们批量处理有关......对我来说最好的方法是什么?我正在尝试创建一条带有附件的消息,然后分别发送每个地址,并将它们作为一个批处理过程全部发送出去。这是我的代码:

    $subscribersManager = new DD_Subscribers_Manager();
    $subscribers = $subscribersManager->getAllSubscribers();


    $subject = $form->getElement('subject')->getValue();
    $body = $form->getElement('body')->getValue();
    $filename = $form->getElement('bulletin')->getValue();
    $filepath = Zend_Registry::get('rootDir') . '/public/downloads/archive/' . $filename;

    $config = array('ssl' => 'tls', 'port' => 587, 'auth' => 'login', 'username' => 'fake@email.com', 'password' => 'password');
    $smtpConnection = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);

    foreach ($subscribers as $subscriber) {
        $message = new Zend_Mail('utf-8');
        $message->setFrom('fake@email.com', 'My Fake Mailing List')
                ->addTo($subscriber->email)
                ->setSubject($subject)
                ->setBodyText($body);
        $attachment = $message->createAttachment(file_get_contents($filepath));
        $attachment->type = 'application/pdf';
        $attachment->filename = $filename;
    }
    $message->send($smtpConnection);
4

4 回答 4

7

这看起来像一个范围问题:您在 foreach 循环中创建 $message 并且只发送最后一个(因为在 foreach 之后调用了 $message->send() 。

基本上,每次 foreach 循环迭代时,您都会覆盖 $message 的值。将 $message->send 移动到 foreach 循环中,每次迭代发送一封电子邮件。可能还有另一种方法可以创建一组消息并同时发送它们,但我不熟悉 ZendMail。

编辑:实际上,如果您阅读 Zend_Mail 上的文档,您可以调用 $message->addTo() 将其他收件人(超过 1 个)添加到单个消息中。您的代码可能会更改为:

$message = new Zend_Mail();
$message->setFrom('fake@email.com', 'My Fake Mailing List')
                                ->setSubject($subject)
                                ->setBodyText($body);

foreach($subscribers as $subscriber){

    $message->addTo($subscriber->email);
}
$message->send();

Zend_Mail - 添加收件人

于 2009-04-22T17:31:45.180 回答
2

在我看来,您正在为每个订阅者创建一个对象,然后除了最后一个之外,没有对它们中的任何一个做任何事情。在循环内移动$message->send调用。foreach

于 2009-04-22T17:30:26.010 回答
0

将“send”方法调用代码放入foreach循环$message->send($smtpConnection);
中,如下所示:

foreach ($subscribers as $subscriber) {
    $message = new Zend_Mail('utf-8');
    $message->setFrom('fake@email.com', 'My Fake Mailing List')
                     ->addTo($subscriber->email)
                     ->setSubject($subject)
                     ->setBodyText($body);
    $attachment = $message->createAttachment(file_get_contents($filepath));
    $attachment->type = 'application/pdf';
    $attachment->filename = $filename;
    $message->send($smtpConnection);
}
于 2009-09-24T08:52:37.333 回答
0

这不是真的。看看这个http://framework.zend.com/manual/1.12/en/zend.mail.multiple-emails.html。我也尝试过这样做,我可以向所有人发送邮件

于 2013-03-02T05:35:58.717 回答