headers = array(); $this->from(module::get_var("gallery", "email_from", "")); $this->reply_to(module::get_var("gallery", "email_reply_to", "")); $this->line_length(module::get_var("gallery", "email_line_length", 70)); $separator = module::get_var("gallery", "email_header_separator", null); $this->header_separator(empty($separator) ? "\n" : unserialize($separator)); } 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) { Kohana_Log::add("error", wordwrap("Invalid header parameters\n" . Kohana::debug($value))); 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)) { Kohana_Log::add("error", wordwrap("Sending mail failed:\nNo to address specified")); 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)) { 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. // Make sure phpmailer_path is valid. if(!file_exists(module::get_var("phpmailer", "phpmailer_path"))) { Kohana_Log::add("error", wordwrap("File Not Found: " . module::get_var("phpmailer", "phpmailer_path"))); return false; } require_once(module::get_var("phpmailer", "phpmailer_path")); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = module::get_var("phpmailer", "smtp_server"); $mail->Port = module::get_var("phpmailer", "smtp_port"); $mail->SMTPDebug = 1; if (module::get_var("phpmailer", "smtp_login") != "") { $mail->SMTPAuth = true; if (module::get_var("phpmailer", "use_ssl") == true) { $mail->SMTPSecure = "ssl"; } $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); // demdel's fix for the ecard module. $boundaryLine = explode("\n", $message, -1); $newboundary = substr($boundaryLine[0],2); if (preg_match("/--/", $boundaryLine[0])) { if (preg_match("/--".$newboundary."--/", end($boundaryLine))) { $mail->CharSet = "UTF-8"; $mail->ContentType = "multipart/related; boundary=\"".$newboundary."\""; } } $mail->Subject = $subject; $mail->Body = $message; // Log any errors. if (!$mail->Send()) { Kohana_Log::add("error", wordwrap($mail->ErrorInfo)); return false; } else { return true; } } }