Отправка электронных писем нескольким подписчикам с Zend Framework - PullRequest
3 голосов
/ 22 апреля 2009

Я думаю, что я, должно быть, что-то делаю не так, потому что мой код отправил электронное письмо только последнему подписчику в таблице. Когда я регистрирую массив подписчиков, становится очевидным, что существует более одного, кому он пытается отправить. Я думаю, что проблема связана с попыткой объединить их вместе ... Как мне лучше всего это сделать? Я пытаюсь создать одно сообщение с вложением, затем отправить адрес по отдельности и отправить их как один пакетный процесс. Вот мой код:

    $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 ]

7 голосов
/ 22 апреля 2009

Это выглядит как проблема области: вы создаете $ message внутри цикла foreach и отправляете только последний (поскольку $ message-> send () вызывается после foreach.

По сути, вы перезаписываете значение $ message каждый раз, когда цикл foreach повторяется. Переместите $ 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 - добавление получателей

2 голосов
/ 22 апреля 2009

Мне кажется, что вы создаете один объект для каждого подписчика, а затем ничего не делаете с кем-либо из них, кроме последнего. Переместите вызов $message->send в цикл foreach.

0 голосов
/ 02 марта 2013

Это не правда. Проверьте это http://framework.zend.com/manual/1.12/en/zend.mail.multiple-emails.html. Я также попытался сделать то же самое, и я могу отправить почту всем

0 голосов
/ 24 сентября 2009

поместите код вызова метода 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);
}
...