2009-04-22 102 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); 
} 
相關問題