2009-04-22 74 views
3

我想我在这里必须做错事,因为我的代码只发送一封电子邮件给表中的最后一个用户。当我登录订阅者数组时,显然有多个订阅者试图发送。我认为这个问题与尝试将它们批处理在一起......对我来说这样做的最好方法是什么?我试图用附件创建一条消息,然后分别发送每个地址的地址,并将它们作为一个批处理进程发送出去。这里是我的代码:用Zend Framework向多个用户发送电子邮件

$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' => '[email protected]', 'password' => 'password'); 
    $smtpConnection = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); 

    foreach ($subscribers as $subscriber) { 
     $message = new Zend_Mail('utf-8'); 
     $message->setFrom('[email protected]', '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); 

回答

7

这看起来像一个范围问题:您创建foreach循环在$消息,只发送最后一个(因为$ MESSAGE-> send()方法在foreach之后被称为

基本上,你覆盖值。每次foreach循环都要迭代$ message-> send到foreach循环中,每次迭代发送一封邮件。可能还有另一种方法来创建一个消息并一次发送它们,但我不是熟悉ZendMail

编辑:其实,如果你阅读Zend_Mail上的文档,你可以调用$ message-> addTo()来添加additiional收件人(超过1)到一条消息。 :

$message = new Zend_Mail(); 
$message->setFrom('[email protected]', 'My Fake Mailing List') 
           ->setSubject($subject) 
           ->setBodyText($body); 

foreach($subscribers as $subscriber){ 

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

Zend_Mail - adding recipients

2

我看来像你为每个用户创建一个对象,然后没有做对任何人任何东西,除了最后一个。在foreach循环内移动$message->send调用。

0

把 “send” 方法调用代码foreach循环$message->send($smtpConnection);
内,如下图所示:

foreach ($subscribers as $subscriber) { 
    $message = new Zend_Mail('utf-8'); 
    $message->setFrom('[email protected]', '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); 
} 
相关问题