📄 class.phpmailer.php
字号:
$sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, $this->Sender); } else { $sendmail = sprintf("%s -oi -t", $this->Sendmail); } if (!@$mail = popen($sendmail, "w")) { $this->SetError($this->Lang("execute") . $this->Sendmail); return false; } fputs($mail, $header); fputs($mail, $body); $result = pclose($mail) >> 8 & 0xFF; if ($result != 0) { $this->SetError($this->Lang("execute") . $this->Sendmail); return false; } return true; } /** * Sends mail using the PHP mail() function. * * @access private * * @param string $header Header * @param string $body Body * * @return bool */ function MailSend($header, $body) { $to = ""; for ($i = 0; $i < count($this->to); $i++) { if ($i != 0) { $to .= ", "; } // This will not use the name in the header using // mail. // If you want to force phpmailer to append the name // you should substitute the following line with this // $to .= $this->AddrFormat($this->to[$i]); // The to parameter should not be an address // in the form of "Something <someone@example.com>". // The mail command may not parse this properly while // talking with the MTA (Particularly under Windows). $to .= $this->to[$i][0]; } if ($this->Sender != "" && ini_get("safe_mode") == 0 && strtolower(ini_get("safe_mode")) != "on") { $old_from = ini_get("sendmail_from"); ini_set("sendmail_from", $this->Sender); $params = sprintf("-oi -f %s", $this->Sender); $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header, $params); } else { $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header); } if (isset($old_from)) { ini_set("sendmail_from", $old_from); } if (!$rt) { $this->SetError($this->Lang("instantiate")); return false; } return true; } /** * Sends mail via SMTP using PhpSMTP (Author: * Chris Ryan). Returns bool. Returns false if there is a * bad MAIL FROM, RCPT, or DATA input. * @access private * * @param string $header Header * @param string $body Body * * @return bool */ function SmtpSend($header, $body) { include_once $this->PluginDir . "class.smtp.php"; $error = ""; $bad_rcpt = array(); if (!$this->SmtpConnect()) { return false; } $smtp_from = ($this->Sender == "") ? $this->From : $this->Sender; if (!$this->smtp->Mail($smtp_from)) { $error = $this->Lang("from_failed") . $smtp_from; $this->SetError($error); $this->smtp->Reset(); return false; } // Attempt to send attach all recipients for ($i = 0; $i < count($this->to); $i++) { if (!$this->smtp->Recipient($this->to[$i][0])) { $bad_rcpt[] = $this->to[$i][0]; } } for ($i = 0; $i < count($this->cc); $i++) { if (!$this->smtp->Recipient($this->cc[$i][0])) { $bad_rcpt[] = $this->cc[$i][0]; } } for ($i = 0; $i < count($this->bcc); $i++) { if (!$this->smtp->Recipient($this->bcc[$i][0])) { $bad_rcpt[] = $this->bcc[$i][0]; } } if (count($bad_rcpt) > 0) { // Create error message for ($i = 0; $i < count($bad_rcpt); $i++) { if ($i != 0) { $error .= ", "; } $error .= $bad_rcpt[$i]; } $error = $this->Lang("recipients_failed") . $error; $this->SetError($error); $this->smtp->Reset(); return false; } if (!$this->smtp->Data($header . $body)) { $this->SetError($this->Lang("data_not_accepted")); $this->smtp->Reset(); return false; } if ($this->SMTPKeepAlive == true) { $this->smtp->Reset(); } else { $this->SmtpClose(); } return true; } /** * Initiates a connection to an SMTP server. Returns false if the * operation failed. * * @access private * @return bool */ function SmtpConnect() { if ($this->smtp == null) { $this->smtp = new SMTP(); } $this->smtp->do_debug = $this->SMTPDebug; $hosts = explode(";", $this->Host); $index = 0; $connection = ($this->smtp->Connected()); // Retry while there is no connection while ($index < count($hosts) && $connection == false) { if (strstr($hosts[$index], ":")) { list($host, $port) = explode(":", $hosts[$index]); } else { $host = $hosts[$index]; $port = $this->Port; } if ($this->smtp->Connect($host, $port, $this->Timeout)) { if ($this->Helo != '') { $this->smtp->Hello($this->Helo); } else { $this->smtp->Hello($this->ServerHostname()); } $connection = true; if ($this->SMTPAuth) { if (!$this->smtp->Authenticate($this->Username, $this->Password)) { $this->SetError($this->Lang("authenticate")); $this->smtp->Reset(); $connection = false; } } } $index++; } if (!$connection) { $this->SetError($this->Lang("connect_host")); } return $connection; } /** * Closes the active SMTP session if one exists. * * @return void */ function SmtpClose() { if ($this->smtp != null) { if ($this->smtp->Connected()) { $this->smtp->Quit(); $this->smtp->Close(); } } } /** * Sets the language for all class error messages. Returns false * if it cannot load the language file. The default language type * is English. * * @access public * * @param string $lang_type Type of language (e.g. Portuguese: "br") * @param string $lang_path Path to the language file directory * * @return bool */ function SetLanguage($lang_type, $lang_path = null) { if ($lang_path === null) { $lang_path = dirname(__FILE__).'/language/'; } if (file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) { include $lang_path.'phpmailer.lang-'.$lang_type.'.php'; } else if (file_exists($lang_path.'phpmailer.lang-en.php')) { include $lang_path.'phpmailer.lang-en.php'; } else { $this->SetError("Could not load language file"); return false; } $this->language = $PHPMAILER_LANG; return true; } ///////////////////////////////////////////////// // MESSAGE CREATION METHODS ///////////////////////////////////////////////// /** * Creates recipient headers. * * @access private * * @param string $type Type * @param array $addr Address * * @return string */ function AddrAppend($type, $addr) { $addr_str = $type . ": "; $addr_str .= $this->AddrFormat($addr[0]); if (count($addr) > 1) { for ($i = 1; $i < count($addr); $i++) { $addr_str .= ", " . $this->AddrFormat($addr[$i]); } } $addr_str .= $this->LE; return $addr_str; } /** * Formats an address correctly. * * @access private * * @param array $addr Address * * @return string */ function AddrFormat($addr) { if (empty($addr[1])) { $formatted = $addr[0]; } else { $formatted = $this->EncodeHeader($addr[1], 'phrase') . " <" . $addr[0] . ">"; } return $formatted; } /** * Wraps message for use with mailers that do not * automatically perform wrapping and for quoted-printable. * Original written by philippe. * * @access private * * @param string $message Message * @param int $length Length of message * @param bool $qp_mode Optional * * @return string */ function WrapText($message, $length, $qp_mode = false) { $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; $message = $this->FixEOL($message); if (substr($message, -1) == $this->LE) { $message = substr($message, 0, -1); } $line = explode($this->LE, $message); $message = ""; for ($i=0 ;$i < count($line); $i++) { $line_part = explode(" ", $line[$i]); $buf = ""; for ($e = 0; $e<count($line_part); $e++) { $word = $line_part[$e]; if ($qp_mode and (strlen($word) > $length)) { $space_left = $length - strlen($buf) - 1; if ($e != 0) { if ($space_left > 20) { $len = $space_left; if (substr($word, $len - 1, 1) == "=") { $len--; } elseif (substr($word, $len - 2, 1) == "=") { $len -= 2; } $part = substr($word, 0, $len); $word = substr($word, $len); $buf .= " " . $part; $message .= $buf . sprintf("=%s", $this->LE); } else { $message .= $buf . $soft_break; } $buf = ""; } while (strlen($word) > 0) { $len = $length; if (substr($word, $len - 1, 1) == "=") { $len--; } elseif (substr($word, $len - 2, 1) == "=") { $len -= 2; } $part = substr($word, 0, $len); $word = substr($word, $len); if (strlen($word) > 0) { $message .= $part . sprintf("=%s", $this->LE); } else { $buf = $part; } } } else { $buf_o = $buf; $buf .= ($e == 0) ? $word : (" " . $word); if (strlen($buf) > $length and $buf_o != "") { $message .= $buf_o . $soft_break; $buf = $word; } } } $message .= $buf . $this->LE; } return $message; } /** * Set the body wrapping. * * @access private * @return void */ function SetWordWrap() { if ($this->WordWrap < 1) { return; } switch($this->message_type) { case "alt": // fall through case "alt_attachments": $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); break; default: $this->Body = $this->WrapText($this->Body, $this->WordWrap); break; } } /** * Assembles message header. * * @access private * @return string */ function CreateHeader() { $result = ""; // Set the boundaries $uniq_id = md5(uniqid(time())); $this->boundary[1] = "b1_" . $uniq_id; $this->boundary[2] = "b2_" . $uniq_id;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -