📄 class.phpmailer.php
字号:
$formatted = sprintf('"%s" <%s>', addslashes($addr[1]), $addr[0]);
return $formatted;
}
/**
* Wraps message for use with mailers that do not
* automatically perform wrapping and for quoted-printable.
* Original written by philippe. Returns string.
* @private
* @returns string
*/
function word_wrap($message, $length, $qp_mode = false) {
if ($qp_mode)
$soft_break = sprintf(" =%s", $this->LE);
else
$soft_break = $this->LE;
$message = $this->fix_eol($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;
if ($e == 0)
$buf .= $word;
else
$buf .= " " . $word;
if (strlen($buf) > $length and $buf_o != "")
{
$message .= $buf_o . $soft_break;
$buf = $word;
}
}
}
$message .= $buf . $this->LE;
}
return ($message);
}
/**
* Assembles message header. Returns a string if successful
* or false if unsuccessful.
* @private
* @returns string
*/
function create_header() {
$header = array();
// Set the boundaries
$uniq_id = md5(uniqid(time()));
$this->boundary[1] = "b1_" . $uniq_id;
$this->boundary[2] = "b2_" . $uniq_id;
// To be created automatically by mail()
if(($this->Mailer != "mail") && (count($this->to) > 0))
$header[] = $this->addr_append("To", $this->to);
$header[] = sprintf("From: \"%s\" <%s>%s", addslashes($this->FromName),
trim($this->From), $this->LE);
if(count($this->cc) > 0)
$header[] = $this->addr_append("Cc", $this->cc);
// sendmail and mail() extract Bcc from the header before sending
if((($this->Mailer == "sendmail") || ($this->Mailer == "mail")) && (count($this->bcc) > 0))
$header[] = $this->addr_append("Bcc", $this->bcc);
if(count($this->ReplyTo) > 0)
$header[] = $this->addr_append("Reply-to", $this->ReplyTo);
// mail() sets the subject itself
if($this->Mailer != "mail")
$header[] = sprintf("Subject: %s%s", trim($this->Subject), $this->LE);
$header[] = sprintf("X-Priority: %d%s", $this->Priority, $this->LE);
$header[] = sprintf("X-Mailer: phpmailer [version %s]%s", $this->Version, $this->LE);
$header[] = sprintf("Return-Path: %s%s", trim($this->From), $this->LE);
if($this->ConfirmReadingTo != "")
$header[] = sprintf("Disposition-Notification-To: <%s>%s",
trim($this->ConfirmReadingTo), $this->LE);
// Add custom headers
for($index = 0; $index < count($this->CustomHeader); $index++)
$header[] = sprintf("%s%s", $this->CustomHeader[$index], $this->LE);
if($this->UseMSMailHeaders)
$header[] = $this->AddMSMailHeaders();
$header[] = sprintf("MIME-Version: 1.0%s", $this->LE);
// Determine what type of message this is
if(count($this->attachment) < 1 && strlen($this->AltBody) < 1)
$this->message_type = "plain";
else
{
if(count($this->attachment) > 0)
$this->message_type = "attachments";
if(strlen($this->AltBody) > 0 && count($this->attachment) < 1)
$this->message_type = "alt";
if(strlen($this->AltBody) > 0 && count($this->attachment) > 0)
$this->message_type = "alt_attachments";
}
switch($this->message_type)
{
case "plain":
$header[] = sprintf("Content-Transfer-Encoding: %s%s",
$this->Encoding, $this->LE);
$header[] = sprintf("Content-Type: %s; charset = \"%s\"",
$this->ContentType, $this->CharSet);
break;
case "attachments":
case "alt_attachments":
if($this->EmbeddedImageCount() > 0)
{
$header[] = sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s",
"multipart/related", $this->LE, $this->LE,
$this->boundary[1], $this->LE);
}
else
{
$header[] = sprintf("Content-Type: %s;%s",
"multipart/mixed", $this->LE);
$header[] = sprintf("\tboundary=\"%s\"%s", $this->boundary[1], $this->LE);
}
break;
case "alt":
$header[] = sprintf("Content-Type: %s;%s",
"multipart/alternative", $this->LE);
$header[] = sprintf("\tboundary=\"%s\"%s", $this->boundary[1], $this->LE);
break;
}
// No additional lines when using mail() function
if($this->Mailer != "mail")
$header[] = $this->LE.$this->LE;
return(join("", $header));
}
/**
* Assembles the message body. Returns a string if successful
* or false if unsuccessful.
* @private
* @returns string
*/
function create_body() {
$body = array();
// wordwrap the message body if set
if($this->WordWrap > 0)
$this->Body = $this->word_wrap($this->Body, $this->WordWrap);
switch($this->message_type)
{
case "alt":
// Return text of body
$bndry = new Boundary($this->boundary[1]);
$bndry->CharSet = $this->CharSet;
$bndry->Encoding = $this->Encoding;
$body[] = $bndry->GetSource();
$body[] = sprintf("%s%s", $this->AltBody, $this->LE.$this->LE);
$bndry = new Boundary($this->boundary[1]);
$bndry->CharSet = $this->CharSet;
$bndry->ContentType = "text/html";
$bndry->Encoding = $this->Encoding;
$body[] = $bndry->GetSource();
$body[] = sprintf("%s%s", $this->Body, $this->LE.$this->LE);
// End the boundary
$body[] = sprintf("%s--%s--%s", $this->LE,
$this->boundary[1], $this->LE.$this->LE);
break;
case "plain":
$body[] = $this->Body;
break;
case "attachments":
$bndry = new Boundary($this->boundary[1]);
$bndry->CharSet = $this->CharSet;
$bndry->ContentType = $this->ContentType;
$bndry->Encoding = $this->Encoding;
$body[] = sprintf("%s%s%s%s", $bndry->GetSource(false), $this->LE,
$this->Body, $this->LE);
if(!$body[] = $this->attach_all())
return false;
break;
case "alt_attachments":
$body[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
$body[] = sprintf("Content-Type: %s;%s" .
"\tboundary=\"%s\"%s",
"multipart/alternative", $this->LE,
$this->boundary[2], $this->LE.$this->LE);
// Create text body
$bndry = new Boundary($this->boundary[2]);
$bndry->CharSet = $this->CharSet;
$bndry->ContentType = "text/plain";
$bndry->Encoding = $this->Encoding;
$body[] = $bndry->GetSource() . $this->LE;
$body[] = sprintf("%s%s", $this->AltBody, $this->LE.$this->LE);
// Create the HTML body
$bndry = new Boundary($this->boundary[2]);
$bndry->CharSet = $this->CharSet;
$bndry->ContentType = "text/html";
$bndry->Encoding = $this->Encoding;
$body[] = $bndry->GetSource() . $this->LE;
$body[] = sprintf("%s%s", $this->Body, $this->LE.$this->LE);
$body[] = sprintf("%s--%s--%s", $this->LE,
$this->boundary[2], $this->LE.$this->LE);
if(!$body[] = $this->attach_all())
return false;
break;
}
// Add the encode string code here
$sBody = join("", $body);
$sBody = $this->encode_string($sBody, $this->Encoding);
return $sBody;
}
/////////////////////////////////////////////////
// ATTACHMENT METHODS
/////////////////////////////////////////////////
/**
* Adds an attachment from a path on the filesystem.
* Checks if attachment is valid and then adds
* the attachment to the list.
* Returns false if the file could not be found
* or accessed.
* @public
* @returns bool
*/
function AddAttachment($path, $name = "", $encoding = "base64", $type = "application/octet-stream") {
if(!@is_file($path))
{
$this->error_handler(sprintf("Could not access [%s] file", $path));
return false;
}
$filename = basename($path);
if($name == "")
$name = $filename;
// Append to $attachment array
$cur = count($this->attachment);
$this->attachment[$cur][0] = $path;
$this->attachment[$cur][1] = $filename;
$this->attachment[$cur][2] = $name;
$this->attachment[$cur][3] = $encoding;
$this->attachment[$cur][4] = $type;
$this->attachment[$cur][5] = false; // isStringAttachment
$this->attachment[$cur][6] = "attachment";
$this->attachment[$cur][7] = 0;
return true;
}
/**
* Attaches all fs, string, and binary attachments to the message.
* Returns a string if successful or false if unsuccessful.
* @private
* @returns string
*/
function attach_all() {
// Return text of body
$mime = array();
// Add all attachments
for($i = 0; $i < count($this->attachment); $i++)
{
// Check for string attachment
$isString = $this->attachment[$i][5];
if ($isString)
{
$string = $this->attachment[$i][0];
}
else
{
$path = $this->attachment[$i][0];
}
$filename = $this->attachment[$i][1];
$name = $this->attachment[$i][2];
$encoding = $this->attachment[$i][3];
$type = $this->attachment[$i][4];
$disposition = $this->attachment[$i][6];
$cid = $this->attachment[$i][7];
$mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
$mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE);
$mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);
if($disposition == "inline")
$mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
else
$mime[] = sprintf("Content-ID: <%s>%s", $name, $this->LE);
$mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s",
$disposition, $name, $this->LE.$this->LE);
// Encode as string attachment
if($isString)
{
if(!$mime[] = sprintf("%s%s", $this->encode_string($string, $encoding),
$this->LE.$this->LE))
return false;
}
else
{
if(!$mime[] = sprintf("%s%s", $this->encode_file($path, $encoding),
$this->LE.$this->LE))
return false;
$mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE);
}
}
return(join("", $mime));
}
/**
* Encodes attachment in requested format. Returns a
* string if successful or false if unsuccessful.
* @private
* @returns string
*/
function encode_file ($path, $encoding = "base64") {
if(!@$fd = fopen($path, "rb"))
{
$this->error_handler(sprintf("File Error: Could not open file %s", $path));
return false;
}
$file = fread($fd, filesize($path));
$encoded = $this->encode_string($file, $encoding);
fclose($fd);
return($encoded);
}
/**
* Encodes string to requested format. Returns a
* string if successful or false if unsuccessful.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -