static function sendNewsletterMail(eZNewsletter $newsletter, $sendPreview = false) { $sendMailSettings = eZINI::instance('ezsendmailsettings.ini'); $hostname = $sendMailSettings->variable('SendNewsletter', 'Host'); $sys = eZSys::instance(); // Check that the newsletter type exists, if not, process next newsletter if (!$newsletter->attribute('newsletter_type')) { return false; } if ($sendPreview) { // Fetch the draft because the object is not published during preview $contentObject = $newsletter->contentObjectVersion(); } else { $contentObject = $newsletter->contentObject(); } $mailTemplate = $newsletter->generateNewsletter($contentObject); $partCounter = 0; // 4. Go through revceivers, and send emails. if (!$sendPreview) { $idcounter = 0; $sendCount = 0; $skipCount = 0; while ($receiverList = eZSendNewsletterItem::fetchByNewsletterID($newsletter->attribute('id'))) { foreach ($receiverList as $receiver) { $mail = clone $mailTemplate; $userData = $receiver->attribute('user_data'); if (!$userData) { //When no userdata is found, it is usually the result of a deleted subscription, //we mark the mail as being sent, without sending it. $receiver->setAttribute('send_status', eZSendNewsletterItem::SendStatusSent); $receiver->setAttribute('send_ts', time()); $receiver->sync(); continue; } //personalize if set in type $newsletter_type = eZNewsletterType::fetch($newsletter->attribute('newslettertype_id')); if ($newsletter_type->attribute('personalise') === '1') { $mail->personalize($userData, true); } else { $mail->personalize($userData, false); } $mail->generateMessageId($receiver->attribute('id') . '.' . $newsletter->attribute('id')); $mail->to = array(); $mail->addTo(new ezcMailAddress($userData['email'], null, 'utf-8')); $mail->build(); $mailResult = eZNewsletterMailTransport::send($mail, false); $sendCount++; $receiver->setAttribute('send_status', eZSendNewsletterItem::SendStatusSent); $receiver->setAttribute('send_ts', time()); $receiver->sync(); } } return array('sendCount' => $sendCount, 'skipCount' => $skipCount); } else { $mail = clone $mailTemplate; //send preview $user = eZUser::currentUser(); $userObject = $user->attribute('contentobject'); //personalize if set in type $newsletter_type = eZNewsletterType::fetch($newsletter->attribute('newslettertype_id')); if ($newsletter_type->attribute('personalise') === '1') { $mail->personalize(array('name' => $userObject->attribute('name')), true); } else { $mail->personalize(array('name' => $userObject->attribute('name')), false); $newsletterMail = $newsletter->personalize($mail->plainText, array('name' => $userObject->attribute('name')), false); } $mail->addTo(new ezcMailAddress($newsletter->attribute('preview_email'))); $mail->build(); $mailResult = eZNewsletterMailTransport::send($mail, true); } }