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);
     }
 }