www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/mail.fun.php

    <?
!defined('M_COM') && exit('No Permisson');
function sys_mail(&$to,&$subject,&$msg,&$from){
	global $mail_smtp,$mail_mode,$mail_port,$mail_auth,$mail_from,$mail_user,$mail_pwd,$mail_delimiter,$mail_silent,
	$adminemail,$mcharset,$cmsname;
	if($mail_silent) error_reporting(0);
	$delimiter = $mail_delimiter == 1 ? "\r\n" : ($mail_delimiter == 2 ? "\r" : "\n");
	$user = isset($mail_user) ? $mail_user : 1;
	$subject = '=?'.$mcharset.'?B?'.base64_encode(str_replace(array("\r","\n"),'','['.$cmsname.'] '.$subject)).'?=';
	$msg = chunk_split(base64_encode(str_replace(array("\n\r","\r\n","\r","\n","\r\n.",),array("\r","\n","\n","\r\n"," \r\n..",),$msg)));
	$from = $from == '' ? '=?'.$mcharset.'?B?'.base64_encode($cmsname)."?= <$adminemail>" : (preg_match('/^(.+?)\<(.+?)\>$/',$from, $v) ? '=?'.$mcharset.'?B?'.base64_encode($v[1])."?= <$v[2]>" : $from);
	$toarr = array();
	foreach(explode(',',$to) as $k) $toarr[] = preg_match('/^(.+?)\<(.+?)\>$/',$k,$v) ? ($user ? '=?'.$mcharset.'?B?'.base64_encode($v[1])."?= <$v[2]>" : $v[2]) : $k;
	$to = implode(',',$toarr);
	$headers = "From: $from{$delimiter}X-Priority: 3{$delimiter}X-Mailer: 08CMS{$delimiter}MIME-Version: 1.0{$delimiter}Content-type: text/plain; charset=$mcharset{$delimiter}Content-Transfer-Encoding: base64{$delimiter}";
	$mail_port = $mail_port ? $mail_port : 25;
	if($mail_mode == 1 && function_exists('mail')){
		@mail($to,$subject,$msg,$headers);
	}elseif($mail_mode == 2){
		if(!$fp = fsockopen($mail_smtp, $mail_port,$errno,$errstr,30)) return "($mail_smtp:$mail_port) CONNECT - Unable to connect to the SMTP server";
		stream_set_blocking($fp,true);
	
		$nmsg = fgets($fp,512);
		if(substr($nmsg,0,3) != '220') return "$mail_smtp:$mail_port CONNECT - $nmsg";
	
		fputs($fp, ($mail_auth ? 'EHLO' : 'HELO')." 08CMS\r\n");
		$nmsg = fgets($fp,512);
		if(substr($nmsg,0,3) != 220 && substr($nmsg,0,3) != 250) return "($mail_smtp:$mail_port) HELO/EHLO - $nmsg";
	
		while(1){
			if(substr($nmsg,3,1) != '-' || empty($nmsg)) break;
			$nmsg = fgets($fp,512);
		}
	
		if($mail_auth) {
			fputs($fp,"AUTH LOGIN\r\n");
			$nmsg = fgets($fp,512);
			if(substr($nmsg, 0, 3) != 334) return "($mail_smtp:$mail_port) AUTH LOGIN - $nmsg";
	
			fputs($fp,base64_encode($mail_user)."\r\n");
			$nmsg = fgets($fp,512);
			if(substr($nmsg,0,3) != 334) return "($mail_smtp:$mail_port) USERNAME - $nmsg";
	
			fputs($fp,base64_encode($mail_pwd)."\r\n");
			$nmsg = fgets($fp,512);
			if(substr($nmsg,0,3) != 235) return "($mail_smtp:$mail_port) PASSWORD - $nmsg";
			$from = $mail_from;
		}
	
		fputs($fp,"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$from).">\r\n");
		$nmsg = fgets($fp,512);
		if(substr($nmsg,0,3) != 250) {
			fputs($fp,"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$from).">\r\n");
			$nmsg = fgets($fp,512);
			if(substr($nmsg,0,3) != 250) return "($mail_smtp:$mail_port) MAIL FROM - $nmsg";
		}
	
		foreach(explode(',',$to) as $v){
			$v = trim($v);
			if($v){
				fputs($fp,"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $v).">\r\n");
				$nmsg = fgets($fp,512);
				if(substr($nmsg,0,3) != 250){
					fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/","\\1",$v).">\r\n");
					$nmsg = fgets($fp,512);
					return "($mail_smtp:$mail_port) RCPT TO - $nmsg";
				}
			}
		}
	
		fputs($fp,"DATA\r\n");
		$nmsg = fgets($fp,512);
		if(substr($nmsg,0,3) != 354) return "($mail_smtp:$mail_port) DATA - $nmsg";
		$headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($msg.microtime()),0,6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$delimiter}";
		fputs($fp,"Date: ".gmdate('r')."\r\n");
		fputs($fp,"To: ".$to."\r\n");
		fputs($fp,"Subject: ".$subject."\r\n");
		fputs($fp,$headers."\r\n");
		fputs($fp,"\r\n\r\n");
		fputs($fp,"$msg\r\n.\r\n");
		$nmsg = fgets($fp, 512);
		if(substr($nmsg, 0, 3) != 250) return "($mail_smtp:$mail_port) END - $nmsg";
		fputs($fp, "QUIT\r\n");
	}elseif($mail_mode == 3){
		ini_set('SMTP',$mail_smtp);
		ini_set('smtp_port',$mail_port);
		ini_set('sendmail_from',$from);
		@mail($to,$subject,$msg,$headers);
	}
	return '';

}
?>