$mail = new PHPMailer();//服务器配置$mail->CharSet ="UTF-8";                     //设定邮件编码$mail->SMTPDebug = 0;                        // 调试模式输出$mail->isSMTP();                             // 使用SMTP$mail->Host = 'smtp.qq.com';                // SMTP服务器$mail->SMTPAuth = true;                      // 允许 SMTP 认证$mail->Username = '10000@qq.com';                // SMTP 用户名  即邮箱的用户名$mail->Password = 'xxxxxxx';             // SMTP 密码  部分邮箱是授权码(例如163邮箱)$mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议$mail->Port = 465;                   // 服务器端口 25 或者465 具体要看邮箱服务器支持$mail->setFrom('10000@qq.com');  //发件人$mail->addAddress('10086@qq.com');  // 收件人//$mail->addAddress('ellen@example.com');  // 可添加多个收件人$mail->isHTML(true);// 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容$mail->Subject = '邮件标题';$html ="html内容";$mail->Body = $html;$a = $mail->send();
<?php
if(version_compare(PHP_VERSION,'5.0.0','<')){exit("Sorry, this version of PHPMailer will only run on PHP version 5 or greater!\n");
}
class PHPMailer{public $Priority=3;public $CharSet='iso-8859-1';public $ContentType='text/plain';public $Encoding='8bit';public $ErrorInfo='';public $From='root@localhost';public $FromName='Root User';public $Sender='';public $Subject='';public $Body='';public $AltBody='';public $WordWrap=0;public $Mailer='mail';public $Sendmail='/usr/sbin/sendmail';public $PluginDir='';public $ConfirmReadingTo='';public $Hostname='';public $MessageID='';public $Host='localhost';public $Port=25;public $Helo='';public $SMTPSecure='';public $SMTPAuth=false;public $Username='';public $Password='';public $Timeout=10;public $SMTPDebug=false;public $SMTPKeepAlive=false;public $SingleTo=false;public $SingleToArray=array();public $LE="\n";public $DKIM_selector='phpmailer';public $DKIM_identity='';public $DKIM_domain='';public $DKIM_private='';public $action_function='';public $Version='5.1';private $smtp=NULL;private $to=array();private $cc=array();private $bcc=array();private $ReplyTo=array();private $all_recipients=array();private $attachment=array();private $CustomHeader=array();private $message_type='';private $boundary=array();protected $language=array();private $error_count=0;private $sign_cert_file="";private $sign_key_file="";private $sign_key_pass="";private $exceptions=false;const STOP_MESSAGE=0;const STOP_CONTINUE=1;const STOP_CRITICAL=2;public function __construct($exceptions=false){$this->exceptions=($exceptions==true);}public function IsHTML($ishtml=true){if($ishtml){$this->ContentType='text/html';}else{$this->ContentType='text/plain';}}public function IsSMTP(){$this->Mailer='SMTP';}public function IsMail(){$this->Mailer='mail';}public function IsSendmail(){if(!stristr(ini_get('sendmail_path'),'sendmail')){$this->Sendmail='/var/qmail/bin/sendmail';}$this->Mailer='sendmail';}public function IsQmail(){if(stristr(ini_get('sendmail_path'),'qmail')){$this->Sendmail='/var/qmail/bin/sendmail';}$this->Mailer='sendmail';}public function AddAddress($address,$name=''){return $this->AddAnAddress('to',$address,$name);}public function AddCC($address,$name=''){return $this->AddAnAddress('cc',$address,$name);}public function AddBCC($address,$name=''){return $this->AddAnAddress('bcc',$address,$name);}public function AddReplyTo($address,$name=''){return $this->AddAnAddress('ReplyTo',$address,$name);}private function AddAnAddress($kind,$address,$name=''){if(!preg_match('/^(to|cc|bcc|ReplyTo)$/',$kind)){if($this->exceptions){throw new phpmailerException('Invalid recipient array: '.$kind);}return false;}$address=trim($address);$name=trim(preg_replace('/[\r\n]+/','',$name));if(!self::ValidateAddress($address)){$this->SetError($this->Lang('invalid_address').': '.$address);if($this->exceptions){throw new phpmailerException($this->Lang('invalid_address').': '.$address);}return false;}if($kind!='ReplyTo'){if(!isset($this->all_recipients[strtolower($address)])){array_push($this->$kind,array($address,$name));$this->all_recipients[strtolower($address)]=true;return true;}}else{if(!array_key_exists(strtolower($address),$this->ReplyTo)){$this->ReplyTo[strtolower($address)]=array($address,$name);return true;}}return false;}public function SetFrom($address,$name='',$auto=1){$address=trim($address);$name=trim(preg_replace('/[\r\n]+/','',$name));if(!self::ValidateAddress($address)){$this->SetError($this->Lang('invalid_address').': '.$address);if($this->exceptions){throw new phpmailerException($this->Lang('invalid_address').': '.$address);}return false;}$this->From=$address;$this->FromName=$name;if($auto){if(empty($this->ReplyTo)){$this->AddAnAddress('ReplyTo',$address,$name);}if(empty($this->Sender)){$this->Sender=$address;}}return true;}public static function ValidateAddress($address){if(function_exists('filter_var')){if(filter_var($address,FILTER_VALIDATE_EMAIL)===FALSE){return false;}else{return true;}}else{return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/',$address);}}public function Send(){try{if((count($this->to)+count($this->cc)+count($this->bcc))<1){throw new phpmailerException($this->Lang('provide_address'),self::STOP_CRITICAL);}if(!empty($this->AltBody)){$this->ContentType='multipart/alternative';}$this->error_count=0;$this->SetMessageType();$header=$this->CreateHeader();$body=$this->CreateBody();if(empty($this->Body)){throw new phpmailerException($this->Lang('empty_message'),self::STOP_CRITICAL);}if($this->DKIM_domain&&$this->DKIM_private){$header_dkim=$this->DKIM_Add($header,$this->Subject,$body);$header=str_replace("\r\n","\n",$header_dkim).$header;}switch($this->Mailer){case 'sendmail':return $this->SendmailSend($header,$body);case 'SMTP':return $this->SmtpSend($header,$body);default:return $this->MailSend($header,$body);}}catch(phpmailerException $e){$this->SetError($e->getMessage());if($this->exceptions){throw $e;}return false;}}protected function SendmailSend($header,$body){if($this->Sender!=''){$sendmail=sprintf("%s -oi -f %s -t",escapeshellcmd($this->Sendmail),escapeshellarg($this->Sender));}else{$sendmail=sprintf("%s -oi -t",escapeshellcmd($this->Sendmail));}if($this->SingleTo===true){foreach($this->SingleToArray as $key=>$val){if(!@$mail=popen($sendmail,'w')){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}fputs($mail,"To: ".$val."\n");fputs($mail,$header);fputs($mail,$body);$result=pclose($mail);$isSent=($result==0)?1:0;$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);if($result!=0){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}}}else{if(!@$mail=popen($sendmail,'w')){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}fputs($mail,$header);fputs($mail,$body);$result=pclose($mail);$isSent=($result==0)?1:0;$this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body);if($result!=0){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}}return true;}protected function MailSend($header,$body){$toArr=array();foreach($this->to as $t){$toArr[]=$this->AddrFormat($t);}$to=implode(', ',$toArr);$params=sprintf("-oi -f %s",$this->Sender);if($this->Sender!=''&&strlen(ini_get('safe_mode'))<1){$old_from=ini_get('sendmail_from');ini_set('sendmail_from',$this->Sender);if($this->SingleTo===true&&count($toArr)>1){foreach($toArr as $key=>$val){$rt=@mail($val,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header,$params);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);}}else{$rt=@mail($to,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header,$params);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body);}}else{if($this->SingleTo===true&&count($toArr)>1){foreach($toArr as $key=>$val){$rt=@mail($val,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header,$params);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);}}else{$rt=@mail($to,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body);}}if(isset($old_from)){ini_set('sendmail_from',$old_from);}if(!$rt){throw new phpmailerException($this->Lang('instantiate'),self::STOP_CRITICAL);}return true;}protected function SmtpSend($header,$body){$bad_rcpt=array();if(!$this->SmtpConnect()){throw new phpmailerException($this->Lang('smtp_connect_failed'),self::STOP_CRITICAL);}$smtp_from=($this->Sender=='')?$this->From:$this->Sender;if(!$this->smtp->Mail($smtp_from)){throw new phpmailerException($this->Lang('from_failed').$smtp_from,self::STOP_CRITICAL);}foreach($this->to as $to){if(!$this->smtp->Recipient($to[0])){$bad_rcpt[]=$to[0];$isSent=0;$this->doCallback($isSent,$to[0],'','',$this->Subject,$body);}else{$isSent=1;$this->doCallback($isSent,$to[0],'','',$this->Subject,$body);}}foreach($this->cc as $cc){if(!$this->smtp->Recipient($cc[0])){$bad_rcpt[]=$cc[0];$isSent=0;$this->doCallback($isSent,'',$cc[0],'',$this->Subject,$bodySendMail);}else{$isSent=1;$this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body);}}foreach($this->bcc as $bcc){if(!$this->smtp->Recipient($bcc[0])){$bad_rcpt[]=$bcc[0];$isSent=0;$this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body);}else{$isSent=1;$this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body);}}if(count($bad_rcpt)>0){$badaddresses=implode(', ',$bad_rcpt);throw new phpmailerException($this->Lang('recipients_failed').$badaddresses);}if(!$this->smtp->Data($header.$body)){throw new phpmailerException($this->Lang('data_not_accepted'),self::STOP_CRITICAL);}if($this->SMTPKeepAlive==true){$this->smtp->Reset();}return true;}public function SmtpConnect(){if(is_null($this->smtp)){$this->smtp=new SMTP();}$this->smtp->do_debug=$this->SMTPDebug;$hosts=explode(';',$this->Host);$index=0;$connection=$this->smtp->Connected();try{while($index<count($hosts)&&!$connection){$hostinfo=array();if(preg_match('/^(.+):([0-9]+)$/',$hosts[$index],$hostinfo)){$host=$hostinfo[1];$port=$hostinfo[2];}else{$host=$hosts[$index];$port=$this->Port;}$tls=($this->SMTPSecure=='tls');$ssl=($this->SMTPSecure=='ssl');if($this->smtp->Connect(($ssl?'ssl://':'').$host,$port,$this->Timeout)){$hello=($this->Helo!=''?$this->Helo:$this->ServerHostname());$this->smtp->Hello($hello);if($tls){if(!$this->smtp->StartTLS()){throw new phpmailerException($this->Lang('tls'));}$this->smtp->Hello($hello);}$connection=true;if($this->SMTPAuth){if(!$this->smtp->Authenticate($this->Username,$this->Password)){throw new phpmailerException($this->Lang('authenticate'));}}}$index++;if(!$connection){throw new phpmailerException($this->Lang('connect_host'));}}}catch(phpmailerException$e){$this->smtp->Reset();throw $e;}return true;}public function SmtpClose(){if(!is_null($this->smtp)){if($this->smtp->Connected()){$this->smtp->Quit();$this->smtp->Close();}}}function SetLanguage($langcode='en',$lang_path='language/'){$PHPMAILER_LANG=array();$PHPMAILER_LANG['authenticate']='SMTP 错误:登录失败。';$PHPMAILER_LANG['connect_host']='SMTP 错误:无法连接到 SMTP 主机。';$PHPMAILER_LANG['data_not_accepted']='SMTP 错误:数据不被接受。';$PHPMAILER_LANG['encoding']='未知编码: ';$PHPMAILER_LANG['execute']='无法执行:';$PHPMAILER_LANG['file_access']='无法访问文件:';$PHPMAILER_LANG['file_open']='文件错误:无法打开文件:';$PHPMAILER_LANG['from_failed']='发送地址错误:';$PHPMAILER_LANG['instantiate']='未知函数调用。';$PHPMAILER_LANG['mailer_not_supported']='发信客户端不被支持。';$PHPMAILER_LANG['provide_address']='必须提供至少一个收件人地址。';$PHPMAILER_LANG['recipients_failed']='SMTP 错误:收件人地址错误:';$l=true;$this->language=$PHPMAILER_LANG;return ($l==true);}public function GetTranslations(){return $this->language;}public function AddrAppend($type,$addr){$addr_str=$type.': ';$addresses=array();foreach($addr as $a){$addresses[]=$this->AddrFormat($a);}$addr_str.=implode(', ',$addresses);$addr_str.=$this->LE;return $addr_str;}public function AddrFormat($addr){if(empty($addr[1])){return $this->SecureHeader($addr[0]);}else{return $this->EncodeHeader($this->SecureHeader($addr[1]),'phrase')." <".$this->SecureHeader($addr[0]).">";}}public function WrapText($message,$length,$qp_mode=false){$soft_break=($qp_mode)?sprintf(" =%s",$this->LE):$this->LE;$is_utf8=(strtolower($this->CharSet)=="utf-8");$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($is_utf8){$len=$this->UTF8CharBoundary($word,$len);}elseif(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($is_utf8){$len=$this->UTF8CharBoundary($word,$len);}elseif(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;}public function UTF8CharBoundary($encodedText,$maxLength){$foundSplitPos=false;$lookBack=3;while(!$foundSplitPos){$lastChunk=substr($encodedText,$maxLength-$lookBack,$lookBack);$encodedCharPos=strpos($lastChunk,"=");if($encodedCharPos!==false){$hex=substr($encodedText,$maxLength-$lookBack+$encodedCharPos+1,2);$dec=hexdec($hex);if($dec<128){$maxLength=($encodedCharPos==0)?$maxLength:$maxLength-($lookBack-$encodedCharPos);$foundSplitPos=true;}elseif($dec>=192){$maxLength=$maxLength-($lookBack-$encodedCharPos);$foundSplitPos=true;}elseif($dec<192){$lookBack+=3;}}else{$foundSplitPos=true;}}return $maxLength;}public function SetWordWrap(){if($this->WordWrap<1){return ;}switch($this->message_type){case 'alt':case 'alt_attachments':$this->AltBody=$this->WrapText($this->AltBody,$this->WordWrap);break;default:$this->Body=$this->WrapText($this->Body,$this->WordWrap);break;}}public function CreateHeader(){$result='';$uniq_id=md5(uniqid(time()));$this->boundary[1]='b1_'.$uniq_id;$this->boundary[2]='b2_'.$uniq_id;$result.=$this->HeaderLine('Date',self::RFCDate());if($this->Sender==''){$result.=$this->HeaderLine('Return-Path',trim($this->From));}else{$result.=$this->HeaderLine('Return-Path',trim($this->Sender));}if($this->Mailer!='mail'){if($this->SingleTo===true){foreach($this->to as $t){$this->SingleToArray[]=$this->AddrFormat($t);}}else{if(count($this->to)>0){$result.=$this->AddrAppend('To',$this->to);}elseif(count($this->cc)==0){$result.=$this->HeaderLine('To','undisclosed-recipients:;');}}}$from=array();$from[0][0]=trim($this->From);$from[0][1]=$this->FromName;$result.=$this->AddrAppend('From',$from);if(count($this->cc)>0){$result.=$this->AddrAppend('Cc',$this->cc);}if((($this->Mailer=='sendmail')||($this->Mailer=='mail'))&&(count($this->bcc)>0)){$result.=$this->AddrAppend('Bcc',$this->bcc);}if(count($this->ReplyTo)>0){$result.=$this->AddrAppend('Reply-to',$this->ReplyTo);}if($this->Mailer!='mail'){$result.=$this->HeaderLine('Subject',$this->EncodeHeader($this->SecureHeader($this->Subject)));}if($this->MessageID!=''){$result.=$this->HeaderLine('Message-ID',$this->MessageID);}else{$result.=sprintf("Message-ID: <%s@%s>%s",$uniq_id,$this->ServerHostname(),$this->LE);}$result.=$this->HeaderLine('X-Priority',$this->Priority);$result.=$this->HeaderLine('X-Mailer','PHPMailer '.$this->Version.' (phpmailer.sourceforge.net)');if($this->ConfirmReadingTo!=''){$result.=$this->HeaderLine('Disposition-Notification-To','<'.trim($this->ConfirmReadingTo).'>');}for($index=0;$index<count($this->CustomHeader);$index++){$result.=$this->HeaderLine(trim($this->CustomHeader[$index][0]),$this->EncodeHeader(trim($this->CustomHeader[$index][1])));}if(!$this->sign_key_file){$result.=$this->HeaderLine('MIME-Version','1.0');$result.=$this->GetMailMIME();}return $result;}public function GetMailMIME(){$result='';switch($this->message_type){case 'plain':$result.=$this->HeaderLine('Content-Transfer-Encoding',$this->Encoding);$result.=sprintf("Content-Type: %s; charset=\"%s\"",$this->ContentType,$this->CharSet);break;case 'attachments':case 'alt_attachments':if($this->InlineImageExists()){$result.=sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s",'multipart/related',$this->LE,$this->LE,$this->boundary[1],$this->LE);}else{$result.=$this->HeaderLine('Content-Type','multipart/mixed;');$result.=$this->TextLine("\tboundary=\"".$this->boundary[1].'"');}break;case 'alt':$result.=$this->HeaderLine('Content-Type','multipart/alternative;');$result.=$this->TextLine("\tboundary=\"".$this->boundary[1].'"');break;}if($this->Mailer!='mail'){$result.=$this->LE.$this->LE;}return $result;}public function CreateBody(){$body='';if($this->sign_key_file){$body.=$this->GetMailMIME();}$this->SetWordWrap();switch($this->message_type){case 'alt':$body.=$this->GetBoundary($this->boundary[1],'','text/plain','');$body.=$this->EncodeString($this->AltBody,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->GetBoundary($this->boundary[1],'','text/html','');$body.=$this->EncodeString($this->Body,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->EndBoundary($this->boundary[1]);break;case 'plain':$body.=$this->EncodeString($this->Body,$this->Encoding);break;case 'attachments':$body.=$this->GetBoundary($this->boundary[1],'','','');$body.=$this->EncodeString($this->Body,$this->Encoding);$body.=$this->LE;$body.=$this->AttachAll();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);$body.=$this->GetBoundary($this->boundary[2],'','text/plain','').$this->LE;$body.=$this->EncodeString($this->AltBody,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->GetBoundary($this->boundary[2],'','text/html','').$this->LE;$body.=$this->EncodeString($this->Body,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->EndBoundary($this->boundary[2]);$body.=$this->AttachAll();break;}if($this->IsError()){$body='';}elseif($this->sign_key_file){try{$file=tempnam('','mail');file_put_contents($file,$body);$signed=tempnam("","signed");if(@openssl_pkcs7_sign($file,$signed,"file://".$this->sign_cert_file,array("file://".$this->sign_key_file,$this->sign_key_pass),NULL)){@unlink($file);@unlink($signed);$body=file_get_contents($signed);}else{@unlink($file);@unlink($signed);throw new phpmailerException($this->Lang("signing").openssl_error_string());}}catch(phpmailerException$e){$body='';if($this->exceptions){throw $e;}}}return $body;}private function GetBoundary($boundary,$charSet,$contentType,$encoding){$result='';if($charSet==''){$charSet=$this->CharSet;}if($contentType==''){$contentType=$this->ContentType;}if($encoding==''){$encoding=$this->Encoding;}$result.=$this->TextLine('--'.$boundary);$result.=sprintf("Content-Type: %s; charset = \"%s\"",$contentType,$charSet);$result.=$this->LE;$result.=$this->HeaderLine('Content-Transfer-Encoding',$encoding);$result.=$this->LE;return $result;}private function EndBoundary($boundary){return $this->LE.'--'.$boundary.'--'.$this->LE;}private function SetMessageType(){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';}}}public function HeaderLine($name,$value){return $name.': '.$value.$this->LE;}public function TextLine($value){return $value.$this->LE;}public function AddAttachment($path,$name='',$encoding='base64',$type='application/octet-stream'){try{if(!@is_file($path)){throw new phpmailerException($this->Lang('file_access').$path,self::STOP_CONTINUE);}$filename=basename($path);if($name==''){$name=$filename;}$this->attachment[]=array(0=>$path,1=>$filename,2=>$name,3=>$encoding,4=>$type,5=>false,6=>'attachment',7=>0);}catch(phpmailerException$e){$this->SetError($e->getMessage());if($this->exceptions){throw $e;}if($e->getCode()==self::STOP_CRITICAL){return false;}}return true;}public function GetAttachments(){return $this->attachment;}private function AttachAll(){$mime=array();$cidUniq=array();$incl=array();foreach($this->attachment as $attachment){$bString=$attachment[5];if($bString){$string=$attachment[0];}else{$path=$attachment[0];}if(in_array($attachment[0],$incl)){continue;}$filename=$attachment[1];$name=$attachment[2];$encoding=$attachment[3];$type=$attachment[4];$disposition=$attachment[6];$cid=$attachment[7];$incl[]=$attachment[0];if($disposition=='inline'&&isset($cidUniq[$cid])){continue;}$cidUniq[$cid]=true;$mime[]=sprintf("--%s%s",$this->boundary[1],$this->LE);$mime[]=sprintf("Content-Type: %s; name=\"%s\"%s",$type,$this->EncodeHeader($this->SecureHeader($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);}$mime[]=sprintf("Content-Disposition: %s; filename=\"%s\"%s",$disposition,$this->EncodeHeader($this->SecureHeader($name)),$this->LE.$this->LE);if($bString){$mime[]=$this->EncodeString($string,$encoding);if($this->IsError()){return '';}$mime[]=$this->LE.$this->LE;}else{$mime[]=$this->EncodeFile($path,$encoding);if($this->IsError()){return '';}$mime[]=$this->LE.$this->LE;}}$mime[]=sprintf("--%s--%s",$this->boundary[1],$this->LE);return join('',$mime);}private function EncodeFile($path,$encoding='base64'){try{if(!is_readable($path)){throw new phpmailerException($this->Lang('file_open').$path,self::STOP_CONTINUE);}if(function_exists('get_magic_quotes')){function get_magic_quotes(){return false;}}if(PHP_VERSION<6){$magic_quotes=get_magic_quotes_runtime();set_magic_quotes_runtime(0);}$file_buffer=file_get_contents($path);$file_buffer=$this->EncodeString($file_buffer,$encoding);if(PHP_VERSION<6){set_magic_quotes_runtime($magic_quotes);}return $file_buffer;}catch(Exception$e){$this->SetError($e->getMessage());return '';}}public function EncodeString($str,$encoding='base64'){$encoded='';switch(strtolower($encoding)){case 'base64':$encoded=chunk_split(base64_encode($str),76,$this->LE);break;case '7bit':case '8bit':$encoded=$this->FixEOL($str);if(substr($encoded,-(strlen($this->LE)))!=$this->LE)$encoded.=$this->LE;break;case 'binary':$encoded=$str;break;case 'quoted-printable':$encoded=$this->EncodeQP($str);break;default:$this->SetError($this->Lang('encoding').$encoding);break;}return $encoded;}public function EncodeHeader($str,$position='text'){$x=0;switch(strtolower($position)){case 'phrase':if(!preg_match('/[\200-\377]/',$str)){$encoded=addcslashes($str,"\0..\37\177\\\"");if(($str==$encoded)&&!preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/',$str)){return ($encoded);}else{return ("\"$encoded\"");}}$x=preg_match_all('/[^\040\041\043-\133\135-\176]/',$str,$matches);break;case 'comment':$x=preg_match_all('/[()"]/',$str,$matches);case 'text':default:$x+=preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/',$str,$matches);break;}if($x==0){return ($str);}$maxlen=75-7-strlen($this->CharSet);if(strlen($str)/3<$x){$encoding='B';if(function_exists('mb_strlen')&&$this->HasMultiBytes($str)){$encoded=$this->Base64EncodeWrapMB($str);}else{$encoded=base64_encode($str);$maxlen-=$maxlen%4;$encoded=trim(chunk_split($encoded,$maxlen,"\n"));}}else{$encoding='Q';$encoded=$this->EncodeQ($str,$position);$encoded=$this->WrapText($encoded,$maxlen,true);$encoded=str_replace('='.$this->LE,"\n",trim($encoded));}$encoded=preg_replace('/^(.*)$/m'," =?".$this->CharSet."?$encoding?\\1?=",$encoded);$encoded=trim(str_replace("\n",$this->LE,$encoded));return $encoded;}public function HasMultiBytes($str){if(function_exists('mb_strlen')){return (strlen($str)>mb_strlen($str,$this->CharSet));}else{return false;}}public function Base64EncodeWrapMB($str){$start="=?".$this->CharSet."?B?";$end="?=";$encoded="";$mb_length=mb_strlen($str,$this->CharSet);$length=75-strlen($start)-strlen($end);$ratio=$mb_length/strlen($str);$offset=$avgLength=floor($length*$ratio*.75);for($i=0;$i<$mb_length;$i+=$offset){$lookBack=0;do{$offset=$avgLength-$lookBack;$chunk=mb_substr($str,$i,$offset,$this->CharSet);$chunk=base64_encode($chunk);$lookBack++;}while(strlen($chunk)>$length);$encoded.=$chunk.$this->LE;}$encoded=substr($encoded,0,-strlen($this->LE));return $encoded;}public function EncodeQPphp($input='',$line_max=76,$space_conv=false){$hex=array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');$lines=preg_split('/(?:\r\n|\r|\n)/',$input);$eol="\r\n";$escape='=';$output='';while(list(,$line)=each($lines)){$linlen=strlen($line);$newline='';for($i=0;$i<$linlen;$i++){$c=substr($line,$i,1);$dec=ord($c);if(($i==0)&&($dec==46)){$c='=2E';}if($dec==32){if($i==($linlen-1)){$c='=20';}elseif($space_conv){$c='=20';}}elseif(($dec==61)||($dec<32)||($dec>126)){$h2=floor($dec/16);$h1=floor($dec%16);$c=$escape.$hex[$h2].$hex[$h1];}if((strlen($newline)+strlen($c))>=$line_max){$output.=$newline.$escape.$eol;$newline='';if($dec==46){$c='=2E';}}$newline.=$c;}$output.=$newline.$eol;}return $output;}public function EncodeQP($string,$line_max=76,$space_conv=false){if(function_exists('quoted_printable_encode')){return quoted_printable_encode($string);}$filters=stream_get_filters();if(!in_array('convert.*',$filters)){return $this->EncodeQPphp($string,$line_max,$space_conv);}$fp=fopen('php://temp/','r+');$string=preg_replace('/\r\n?/',$this->LE,$string);$params=array('line-length'=>$line_max,'line-break-chars'=>$this->LE);$s=stream_filter_append($fp,'convert.quoted-printable-encode',STREAM_FILTER_READ,$params);fputs($fp,$string);rewind($fp);$out=stream_get_contents($fp);stream_filter_remove($s);$out=preg_replace('/^\./m','=2E',$out);fclose($fp);return $out;}public function EncodeQ($str,$position='text'){$encoded=preg_replace('/[\r\n]*/','',$str);switch(strtolower($position)){case 'phrase':$encoded=preg_replace("/([^A-Za-z0-9!*+\/ -])/e","'='.sprintf('%02X', ord('\\1'))",$encoded);break;case 'comment':$encoded=preg_replace("/([\(\)\"])/e","'='.sprintf('%02X', ord('\\1'))",$encoded);case 'text':default:$encoded=preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',"'='.sprintf('%02X', ord('\\1'))",$encoded);break;}$encoded=str_replace(' ','_',$encoded);return $encoded;}public function AddStringAttachment($string,$filename,$encoding='base64',$type='application/octet-stream'){$this->attachment[]=array(0=>$string,1=>$filename,2=>basename($filename),3=>$encoding,4=>$type,5=>true,6=>'attachment',7=>0);}public function AddEmbeddedImage($path,$cid,$name='',$encoding='base64',$type='application/octet-stream'){if(!@is_file($path)){$this->SetError($this->Lang('file_access').$path);return false;}$filename=basename($path);if($name==''){$name=$filename;}$this->attachment[]=array(0=>$path,1=>$filename,2=>$name,3=>$encoding,4=>$type,5=>false,6=>'inline',7=>$cid);return true;}public function InlineImageExists(){foreach($this->attachment as $attachment){if($attachment[6]=='inline'){return true;}}return false;}public function ClearAddresses(){foreach($this->to as $to){unset($this->all_recipients[strtolower($to[0])]);}$this->to=array();}public function ClearCCs(){foreach($this->cc as $cc){unset($this->all_recipients[strtolower($cc[0])]);}$this->cc=array();}public function ClearBCCs(){foreach($this->bcc as $bcc){unset($this->all_recipients[strtolower($bcc[0])]);}$this->bcc=array();}public function ClearReplyTos(){$this->ReplyTo=array();}public function ClearAllRecipients(){$this->to=array();$this->cc=array();$this->bcc=array();$this->all_recipients=array();}public function ClearAttachments(){$this->attachment=array();}public function ClearCustomHeaders(){$this->CustomHeader=array();}protected function SetError($msg){$this->error_count++;if($this->Mailer=='smtp' and !is_null($this->smtp)){$lasterror=$this->smtp->getError();if(!empty($lasterror) and array_key_exists('smtp_msg',$lasterror)){$msg.='<p>'.$this->Lang('smtp_error').$lasterror['smtp_msg']."</p>\n";}}$this->ErrorInfo=$msg;}public static function RFCDate(){$tz=date('Z');$tzs=($tz<0)?'-':'+';$tz=abs($tz);$tz=(int)($tz/3600)*100+($tz%3600)/60;$result=sprintf("%s %s%04d",date('D, j M Y H:i:s'),$tzs,$tz);return $result;}private function ServerHostname(){if(!empty($this->Hostname)){$result=$this->Hostname;}elseif(isset($_SERVER['SERVER_NAME'])){$result=$_SERVER['SERVER_NAME'];}else{$result='localhost.localdomain';}return $result;}private function Lang($key){if(count($this->language)<1){$this->SetLanguage('en');}if(isset($this->language[$key])){return $this->language[$key];}else{return 'Language string failed to load: '.$key;}}public function IsError(){return ($this->error_count>0);}private function FixEOL($str){$str=str_replace("\r\n","\n",$str);$str=str_replace("\r","\n",$str);$str=str_replace("\n",$this->LE,$str);return $str;}public function AddCustomHeader($custom_header){$this->CustomHeader[]=explode(':',$custom_header,2);}public function MsgHTML($message,$basedir=''){preg_match_all("/(src|background)=\"(.*)\"/Ui",$message,$images);if(isset($images[2])){foreach($images[2] as $i=>$url){if(!preg_match('#^[A-z]+://#',$url)){$filename=basename($url);$directory=dirname($url);($directory=='.')?$directory='':'';$cid='cid:'.md5($filename);$ext=pathinfo($filename,PATHINFO_EXTENSION);$mimeType=self::_mime_types($ext);if(strlen($basedir)>1&&substr($basedir,-1)!='/'){$basedir.='/';}if(strlen($directory)>1&&substr($directory,-1)!='/'){$directory.='/';}if($this->AddEmbeddedImage($basedir.$directory.$filename,md5($filename),$filename,'base64',$mimeType)){$message=preg_replace("/".$images[1][$i]."=\"".preg_quote($url,'/')."\"/Ui",$images[1][$i]."=\"".$cid."\"",$message);}}}}$this->IsHTML(true);$this->Body=$message;$textMsg=trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));if(!empty($textMsg)&&empty($this->AltBody)){$this->AltBody=html_entity_decode($textMsg);}if(empty($this->AltBody)){$this->AltBody='To view this email message, open it in a program that understands HTML!'."\n\n";}}public static function _mime_types($ext=''){$mimes=array('hqx'=>'application/mac-binhex40','cpt'=>'application/mac-compactpro','doc'=>'application/msword','bin'=>'application/macbinary','dms'=>'application/octet-stream','lha'=>'application/octet-stream','lzh'=>'application/octet-stream','exe'=>'application/octet-stream','class'=>'application/octet-stream','psd'=>'application/octet-stream','so'=>'application/octet-stream','sea'=>'application/octet-stream','dll'=>'application/octet-stream','oda'=>'application/oda','pdf'=>'application/pdf','ai'=>'application/postscript','eps'=>'application/postscript','ps'=>'application/postscript','smi'=>'application/smil','smil'=>'application/smil','mif'=>'application/vnd.mif','xls'=>'application/vnd.ms-excel','ppt'=>'application/vnd.ms-powerpoint','wbxml'=>'application/vnd.wap.wbxml','wmlc'=>'application/vnd.wap.wmlc','dcr'=>'application/x-director','dir'=>'application/x-director','dxr'=>'application/x-director','dvi'=>'application/x-dvi','gtar'=>'application/x-gtar','php'=>'application/x-httpd-php','php4'=>'application/x-httpd-php','php3'=>'application/x-httpd-php','phtml'=>'application/x-httpd-php','phps'=>'application/x-httpd-php-source','js'=>'application/x-javascript','swf'=>'application/x-shockwave-flash','sit'=>'application/x-stuffit','tar'=>'application/x-tar','tgz'=>'application/x-tar','xhtml'=>'application/xhtml+xml','xht'=>'application/xhtml+xml','zip'=>'application/zip','mid'=>'audio/midi','midi'=>'audio/midi','mpga'=>'audio/mpeg','mp2'=>'audio/mpeg','mp3'=>'audio/mpeg','aif'=>'audio/x-aiff','aiff'=>'audio/x-aiff','aifc'=>'audio/x-aiff','ram'=>'audio/x-pn-realaudio','rm'=>'audio/x-pn-realaudio','rpm'=>'audio/x-pn-realaudio-plugin','ra'=>'audio/x-realaudio','rv'=>'video/vnd.rn-realvideo','wav'=>'audio/x-wav','bmp'=>'image/bmp','gif'=>'image/gif','jpeg'=>'image/jpeg','jpg'=>'image/jpeg','jpe'=>'image/jpeg','png'=>'image/png','tiff'=>'image/tiff','tif'=>'image/tiff','css'=>'text/css','html'=>'text/html','htm'=>'text/html','shtml'=>'text/html','txt'=>'text/plain','text'=>'text/plain','log'=>'text/plain','rtx'=>'text/richtext','rtf'=>'text/rtf','xml'=>'text/xml','xsl'=>'text/xml','mpeg'=>'video/mpeg','mpg'=>'video/mpeg','mpe'=>'video/mpeg','qt'=>'video/quicktime','mov'=>'video/quicktime','avi'=>'video/x-msvideo','movie'=>'video/x-sgi-movie','doc'=>'application/msword','word'=>'application/msword','xl'=>'application/excel','eml'=>'message/rfc822');return (!isset($mimes[strtolower($ext)]))?'application/octet-stream':$mimes[strtolower($ext)];}public function set($name,$value=''){try{if(isset($this->$name)){$this->$name=$value;}else{throw new phpmailerException($this->Lang('variable_set').$name,self::STOP_CRITICAL);}}catch(Exception$e){$this->SetError($e->getMessage());if($e->getCode()==self::STOP_CRITICAL){return false;}}return true;}public function SecureHeader($str){$str=str_replace("\r",'',$str);$str=str_replace("\n",'',$str);return trim($str);}public function Sign($cert_filename,$key_filename,$key_pass){$this->sign_cert_file=$cert_filename;$this->sign_key_file=$key_filename;$this->sign_key_pass=$key_pass;}public function DKIM_QP($txt){$tmp="";$line="";for($i=0;$i<strlen($txt);$i++){$ord=ord($txt[$i]);if(((0x21<=$ord)&&($ord<=0x3A))||$ord==0x3C||((0x3E<=$ord)&&($ord<=0x7E))){$line.=$txt[$i];}else{$line.="=".sprintf("%02X",$ord);}}return $line;}public function DKIM_Sign($s){$privKeyStr=file_get_contents($this->DKIM_private);if($this->DKIM_passphrase!=''){$privKey=openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase);}else{$privKey=$privKeyStr;}if(openssl_sign($s,$signature,$privKey)){return base64_encode($signature);}}public function DKIM_HeaderC($s){$s=preg_replace("/\r\n\s+/"," ",$s);$lines=explode("\r\n",$s);foreach($lines as $key=>$line){list($heading,$value)=explode(":",$line,2);$heading=strtolower($heading);$value=preg_replace("/\s+/"," ",$value);$lines[$key]=$heading.":".trim($value);}$s=implode("\r\n",$lines);return $s;}public function DKIM_BodyC($body){if($body=='')return "\r\n";$body=str_replace("\r\n","\n",$body);$body=str_replace("\n","\r\n",$body);while(substr($body,strlen($body)-4,4)=="\r\n\r\n"){$body=substr($body,0,strlen($body)-2);}return $body;}public function DKIM_Add($headers_line,$subject,$body){$DKIMsignatureType='rsa-sha1';$DKIMcanonicalization='relaxed/simple';$DKIMquery='dns/txt';$DKIMtime=time();$subject_header="Subject: $subject";$headers=explode("\r\n",$headers_line);foreach($headers as $header){if(strpos($header,'From:')===0){$from_header=$header;}elseif(strpos($header,'To:')===0){$to_header=$header;}}$from=str_replace('|','=7C',$this->DKIM_QP($from_header));$to=str_replace('|','=7C',$this->DKIM_QP($to_header));$subject=str_replace('|','=7C',$this->DKIM_QP($subject_header));$body=$this->DKIM_BodyC($body);$DKIMlen=strlen($body);$DKIMb64=base64_encode(pack("H*",sha1($body)));$ident=($this->DKIM_identity=='')?'':" i=".$this->DKIM_identity.";";$dkimhdrs="DKIM-Signature: v=1; a=".$DKIMsignatureType."; q=".$DKIMquery."; l=".$DKIMlen."; s=".$this->DKIM_selector.";\r\n"."\tt=".$DKIMtime."; c=".$DKIMcanonicalization.";\r\n"."\th=From:To:Subject;\r\n"."\td=".$this->DKIM_domain.";".$ident."\r\n"."\tz=$from\r\n"."\t|$to\r\n"."\t|$subject;\r\n"."\tbh=".$DKIMb64.";\r\n"."\tb=";$toSign=$this->DKIM_HeaderC($from_header."\r\n".$to_header."\r\n".$subject_header."\r\n".$dkimhdrs);$signed=$this->DKIM_Sign($toSign);return "X-PHPMAILER-DKIM: phpmailer.worxware.com\r\n".$dkimhdrs.$signed."\r\n";}protected function doCallback($isSent,$to,$cc,$bcc,$subject,$body){if(!empty($this->action_function)&&function_exists($this->action_function)){$params=array($isSent,$to,$cc,$bcc,$subject,$body);call_user_func_array($this->action_function,$params);}}
}class phpmailerException extends Exception{public function errorMessage(){return $this->getMessage();}
}class SMTP{public $SMTP_PORT=25;public $CRLF="\r\n";public $do_debug;public $do_verp=false;private $smtp_conn;private $error;private $helo_rply;public function __construct(){$this->smtp_conn=0;$this->error=null;$this->helo_rply=null;$this->do_debug=0;}public function Connect($host,$port=0,$tval=30){$this->error=null;if($this->connected()){$this->error=array("error"=>"Already connected to a server");return false;}if(empty($port)){$port=$this->SMTP_PORT;}$this->smtp_conn=@fsockopen($host,$port,$errno,$errstr,$tval);stream_set_blocking($this->smtp_conn, true); //重要,设置为非阻塞模式stream_set_timeout($this->smtp_conn,10); //设置超时if(empty($this->smtp_conn)){$this->error=array("error"=>"Failed to connect to server","errno"=>$errno,"errstr"=>$errstr);if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": $errstr ($errno)".$this->CRLF.'<br />';}return false;}if(substr(PHP_OS,0,3)!="WIN")socket_set_timeout($this->smtp_conn,$tval,0);$announce=$this->get_lines();if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$announce.$this->CRLF.'<br />';}return true;}public function StartTLS(){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called StartTLS() without being connected");return false;}fputs($this->smtp_conn,"STARTTLS".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=220){$this->error=array("error"=>"STARTTLS not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}if(!stream_socket_enable_crypto($this->smtp_conn,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)){return false;}return true;}public function Authenticate($username,$password){fputs($this->smtp_conn,"AUTH LOGIN".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($code!=334){$this->error=array("error"=>"AUTH not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}fputs($this->smtp_conn,base64_encode($username).$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($code!=334){$this->error=array("error"=>"Username not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}fputs($this->smtp_conn,base64_encode($password).$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($code!=235){$this->error=array("error"=>"Password not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}return true;}public function Connected(){if(!empty($this->smtp_conn)){$sock_status=socket_get_status($this->smtp_conn);if($sock_status["eof"]){if($this->do_debug>=1){echo "SMTP -> NOTICE:".$this->CRLF."EOF caught while checking if connected";}$this->Close();return false;}return true;}return false;}public function Close(){$this->error=null;$this->helo_rply=null;if(!empty($this->smtp_conn)){fclose($this->smtp_conn);$this->smtp_conn=0;}}public function Data($msg_data){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Data() without being connected");return false;}fputs($this->smtp_conn,"DATA".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=354){$this->error=array("error"=>"DATA command not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}$msg_data=str_replace("\r\n","\n",$msg_data);$msg_data=str_replace("\r","\n",$msg_data);$lines=explode("\n",$msg_data);$field=substr($lines[0],0,strpos($lines[0],":"));$in_headers=false;if(!empty($field)&&!strstr($field," ")){$in_headers=true;}$max_line_length=998;while(list(,$line)=@each($lines)){$lines_out=null;if($line==""&&$in_headers){$in_headers=false;}while(strlen($line)>$max_line_length){$pos=strrpos(substr($line,0,$max_line_length)," ");if(!$pos){$pos=$max_line_length-1;$lines_out[]=substr($line,0,$pos);$line=substr($line,$pos);}else{$lines_out[]=substr($line,0,$pos);$line=substr($line,$pos+1);}if($in_headers){$line="\t".$line;}}$lines_out[]=$line;while(list(,$line_out)=@each($lines_out)){if(strlen($line_out)>0){if(substr($line_out,0,1)=="."){$line_out=".".$line_out;}}fputs($this->smtp_conn,$line_out.$this->CRLF);}}fputs($this->smtp_conn,$this->CRLF.".".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=250){$this->error=array("error"=>"DATA not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}return true;}public function Hello($host=''){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Hello() without being connected");return false;}if(empty($host)){$host="localhost";}if(!$this->SendHello("EHLO",$host)){if(!$this->SendHello("HELO",$host)){return false;}}return true;}private function SendHello($hello,$host){fputs($this->smtp_conn,$hello." ".$host.$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER: ".$rply.$this->CRLF.'<br />';}if($code!=250){$this->error=array("error"=>$hello." not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}$this->helo_rply=$rply;return true;}public function Mail($from){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Mail() without being connected");return false;}$useVerp=($this->do_verp?"XVERP":"");fputs($this->smtp_conn,"MAIL FROM:<".$from.">".$useVerp.$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=250){$this->error=array("error"=>"MAIL not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}return true;}public function Quit($close_on_error=true){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Quit() without being connected");return false;}fputs($this->smtp_conn,"quit".$this->CRLF);$byemsg=$this->get_lines();if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$byemsg.$this->CRLF.'<br />';}$rval=true;$e=null;$code=substr($byemsg,0,3);if($code!=221){$e=array("error"=>"SMTP server rejected quit command","smtp_code"=>$code,"smtp_rply"=>substr($byemsg,4));$rval=false;if($this->do_debug>=1){echo "SMTP -> ERROR: ".$e["error"].": ".$byemsg.$this->CRLF.'<br />';}}if(empty($e)||$close_on_error){$this->Close();}return $rval;}public function Recipient($to){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Recipient() without being connected");return false;}fputs($this->smtp_conn,"RCPT TO:<".$to.">".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=250&&$code!=251){$this->error=array("error"=>"RCPT not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}return true;}public function Reset(){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Reset() without being connected");return false;}fputs($this->smtp_conn,"RSET".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=250){$this->error=array("error"=>"RSET failed","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}return true;}public function SendAndMail($from){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called SendAndMail() without being connected");return false;}fputs($this->smtp_conn,"SAML FROM:".$from.$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'<br />';}if($code!=250){$this->error=array("error"=>"SAML not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'<br />';}return false;}return true;}public function Turn(){$this->error=array("error"=>"This method, TURN, of the SMTP "."is not implemented");if($this->do_debug>=1){echo "SMTP -> NOTICE: ".$this->error["error"].$this->CRLF.'<br />';}return false;}public function getError(){return $this->error;}private function get_lines(){$data="";while($str=@fgets($this->smtp_conn,515)){$info = stream_get_meta_data($this->smtp_conn);if($this->do_debug>=4){echo "SMTP -> get_lines(): \$data was \"$data\"".$this->CRLF.'<br />';echo "SMTP -> get_lines(): \$str is \"$str\"".$this->CRLF.'<br />';}$data.=$str;if($this->do_debug>=4){echo "SMTP -> get_lines(): \$data is \"$data\"".$this->CRLF.'<br />';}if(substr($str,3,1)==" "){break;}}return $data;}
}
function SendMail($address,$title,$message,$fromname='NONE',$img='',$file=''){$mail= new PHPMailer(true);try {$mail->IsSMTP();$mail->CharSet='utf-8';$mail->AddAddress($address);$mail->Body=$message;$mail->From= "123@qq.com";$mail->FromName=$fromname;$mail->Subject=$title;$mail->Host="smtp.qq.com";$mail->SMTPAuth=true;$mail->Port='25';$mail->SMTPSecure= false;$mail->Username="123@qq.com";$mail->Password="tktwhqfpwavdbeaf";$mail->IsHTML(true);$mail->MsgHTML($message);return($mail->Send());} catch (phpmailerException $e) {return $e->errorMessage();} catch (Exception $e) {return $e->getMessage();}
}
?>

使用PHPMailer发送邮件相关推荐

  1. php邮件发送tp,在Thinkphp3.2 中使用PHPMailer 发送邮件

    phpmailer发送邮件是php开发者首选的一个邮件发送插件了,下面我来介绍怎么集成phpmailer到thinkphp框架了,有需要了解的朋友可参考. phpmailer发送邮件功能很强大,今天真 ...

  2. php phpmailer qq邮箱,QQ邮箱利用PHPmailer发送邮件

    require_once("class.phpmailer.php"); $mail = new PHPMailer(); //是否启用smtp的debug进行调试 开发环境建议开 ...

  3. php xls 邮件,PHPMailer发送邮件

    PHPMailer是一个封装好的PHP邮件发送类,支持发送HTML内容的电子邮件,以及图片附件,前提要设置好邮件服务器就能实现邮件发送功能. HTML 首先我们先放置一个收件箱的输入框和一个发送邮件按 ...

  4. php邮件中文乱码,phpmailer 发送邮件中文乱码问题的解决方法总结

    $mail = new PHPMailer();复制代码 2:设置邮件的编码: $mail->Charset='UTF-8';复制代码 相信有不少朋友是设置成"GBK"或&q ...

  5. php推送消息到邮箱,thinkphp3.2通过PHPMailer发送邮件推送消息

    thinkphp3.2通过PHPMailer发送邮件推送消息 1.首先下载PHPMailer: 2.在Controller中新增方法public function sendmail($title,$c ...

  6. phpmailer 私密抄送_使用PHPMailer发送邮件实例

    本文实例为大家分享了PHPMailer发送邮件的具体代码,供大家参考,具体内容如下 /* to: 邮件接收地址 subject: 邮件主题 body: 邮件内容 attachpath:附件地址 cc: ...

  7. 虚拟主机使用phpmailer发送邮件

    摘要:phpmailer发送邮件在本地测试正常,但是放大虚拟主机上不能用,上网查阅了各种资料,发现原因有以下几种,只要保证一下几点实现,就能发送了,当然不排除例外,如果无法发送,可以联系我QQ1435 ...

  8. php fsockopen smtp,PHPmailer发送邮件 出现无法连接服务器、函数 fsockopen()被禁用 解决办法 Subjectn...

    发现使用PHPmailer发送邮件不成功,提示"不能连接SMTP服务器."(Error: Could not connect to SMTP host). 找了很多的方法花费了很多 ...

  9. php 发送邮件端口,PHP 使用 PHPMailer 发送邮件

    最近准备写一个个人博客,博客的用户注册和找回密码都需要邮件验证.PHP 虽然提供了 mail 函数来发送邮件,但是 mail 函数的功能限制较多,只能发送普通文本,如果要发送 HTML 或附件就比较麻 ...

  10. 使用PHPmailer发送邮件的详细代码

    一.使用PHPMailer发送邮件的原因 PHP有内置的mail()方法,但是由于一些主机空间不支持该方法,所以经常会遇到无法发送邮件的情况. 所以,可以下载PHPMailer类,实现邮件发送. 二. ...

最新文章

  1. 又被 AI 抢饭碗?2457 亿参数规模,全球最大中文人工智能巨量模型 “源1.0”正式开源...
  2. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]
  3. 连接API:如何将iOS和JSON框架集成
  4. 奔跑吧linux内核_别了,Linux 的魔法时代!
  5. 删除电脑中的mysql数据库吗_【数据库】怎么彻底删除mysql服务?
  6. Java对象转换方案分析与mapstruct实践
  7. Linux基本命令之pidof和kill/killall
  8. xcode 配置wechat_友盟微信、QQ等分享提示未验证应用配置
  9. 不要让别人左右自己的心情
  10. python穷举法_python 穷举指定长度的密码例子
  11. 原装世嘉土星手柄(Sega Saturn)转USB小板,软硬件全开源
  12. RAC 网络心跳 磁盘心跳 本地心跳 控制文件磁盘心跳
  13. 一款免费的PDF转换工具-LightPDF完美版(PDF编辑器) 最新版
  14. java播放音频文件mp3
  15. useCapture
  16. 100英寸的电视机尺寸到底有多大?需要多少钱?
  17. ios点击大头针气泡不弹出_高德 ios 自定义气泡添加点击事件无效问题
  18. 一串单精度字符存入文件c语言,C语言文件选择题
  19. Unity2D瓦片地图tilemap出现瓦片间间隙问题解决
  20. 基于MSP430G2231实现的频率计

热门文章

  1. MediaPlayer详解和使用
  2. 牛客在线编程-华为机试-中等
  3. 绝对定位absolute与相对定位
  4. 为什么索引会加快查询速度?索引原理和使用原则
  5. autom4te.cache简介及可能引发的问题
  6. java 判断文章的重复率_5个避免意外论文重复率高的方法
  7. 机器学习网络安全公司Sift Science获3000万美元C轮融资
  8. 【第10篇】Python爬虫实战-手机归属地查询
  9. 学习python总结
  10. 决胜 Flutter 系列之第一章:熟悉战场