headers = array(); $config = Kohana::config("sendmail"); foreach ($config as $key => $value) { $this->$key($value); } } public function __get($key) { return null; } public function __call($key, $value) { switch ($key) { case "to": $this->to = is_array($value[0]) ? $value[0] : array($value[0]); break; case "header": if (count($value) != 2) { throw new Exception("@todo INVALID_HEADER_PARAMETERS"); } $this->headers[$value[0]] = $value[1]; break; case "from": $this->headers["From"] = $value[0]; break; case "reply_to": $this->headers["Reply-To"] = $value[0]; break; default: $this->$key = $value[0]; } return $this; } public function send() { if (empty($this->to)) { throw new Exception("@todo TO_IS_REQUIRED_FOR_MAIL"); } $to = implode(", ", $this->to); $headers = array(); foreach ($this->headers as $key => $value) { $key = ucfirst($key); $headers[] = "$key: $value"; } // The docs say headers should be separated by \r\n, but occasionaly that doesn't work and you // need to use a single \n. This can be set in config/sendmail.php $headers = implode($this->header_separator, $headers); $message = wordwrap($this->message, $this->line_length, "\n"); if (!$this->mail($to, $this->subject, $message, $headers)) { Kohana::log("error", wordwrap("Sending mail failed:\nTo: $to\n $this->subject\n" . "Headers: $headers\n $this->message")); throw new Exception("@todo SEND_MAIL_FAILED"); } return $this; } public function mail($to, $subject, $message, $headers) { // This function is completely different from the original // Gallery Sendmail script. Outside of this function, // no other changes were made. require(module::get_var("phpmailer", "phpmailer_path")); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = module::get_var("phpmailer", "smtp_server"); if (module::get_var("phpmailer", "smtp_login") != "") { $mail->SMTPAuth = true; $mail->Username = module::get_var("phpmailer", "smtp_login"); $mail->Password = module::get_var("phpmailer", "smtp_password"); } else { $mail->SMTPAuth = false; } $mail->From = module::get_var("phpmailer", "phpmailer_from_address"); $mail->FromName = module::get_var("phpmailer", "phpmailer_from_name"); $mail->AddAddress($to); $mail->IsHTML(true); $mail->Subject = $subject; $mail->Body = $message; if ($mail->Send()) { return true; } else { return false; } } }