/** * Swift's SendEvent listener. * Invoked when Swift sends a message * @param Swift_Events_SendEvent The event information * @throws Swift_ConnectionException If mail() returns false */ public function sendPerformed(Swift_Events_SendEvent $e) { $message = $e->getMessage(); $recipients = $e->getRecipients(); $to = array(); foreach ($recipients->getTo() as $addr) { if ($this->isWindows()) { $to[] = substr($addr->build(true), 1, -1); } else { $to[] = $addr->build(); } } $to = implode(", ", $to); $bcc_orig = $message->headers->has("Bcc") ? $message->headers->get("Bcc") : null; $subject_orig = $message->headers->has("Subject") ? $message->headers->get("Subject") : null; $to_orig = $message->headers->has("To") ? $message->headers->get("To") : null; $bcc = array(); foreach ($recipients->getBcc() as $addr) { $bcc[] = $addr->build(); } if (!empty($bcc)) { $message->headers->set("Bcc", $bcc); } $bcc = null; $body_data = $message->buildData(); $message_body = $body_data->readFull(); $subject_enc = $message->headers->has("Subject") ? $message->headers->getEncoded("Subject") : ""; $message->headers->set("To", null); $message->headers->set("Subject", null); $sender = $e->getSender(); $this->returnPath = $sender->build(); if ($message->headers->has("Return-Path")) { $this->returnPath = $message->headers->get("Return-Path"); } if (preg_match("~<([^>]+)>[^>]*\$~", $this->returnPath, $matches)) { $this->returnPath = $matches[1]; } $this->doMail($to, $subject_enc, $message_body, $message->headers, sprintf($this->getAdditionalParams(), $this->returnPath)); $message->setLE($this->oldLE); $message->headers->set("To", $to_orig); $message->headers->set("Subject", $subject_orig); $message->headers->set("Bcc", $bcc_orig); }