使用Zend Framework向多个订阅者发送电子邮件

And*_*rew 3 php email gmail zend-framework attachment

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

    $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);
Run Code Online (Sandbox Code Playgroud)

Bre*_*der 7

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

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

编辑:实际上,如果您阅读Zend_Mail上的文档,您可以调用$ message-> addTo()将additiional收件人(超过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();
Run Code Online (Sandbox Code Playgroud)

Zend_Mail - 添加收件人