📄 mail.php
字号:
<?php/*邮件发送类showin@2008-8-14 modify支持base64验证登录*/class Easy_Mail{ public $server = array(); //smtp服务器 public $subject = 'subject'; //标题 public $to = array(); //接受者邮箱数组 public $htmlbody = ''; public $textbody = ''; public $debug = true; public $indexno = 0; public $ErrorInfo = array(); public $auth = true; public $fromname = '技术部测试'; public $mailtype = 'HTML'; public $charset ='GB2312'; public $limit = 100; /* 邮件发送 */ public function sendMail(){ if(!$fp = fsockopen ( $this->server[$this->indexno]['server'], $this->server[$this->indexno]['port'], $errno, $error, 20) ) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) CONNECT - Unable to connect to the SMTP server", 0); } stream_set_blocking($fp, true); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != '220') { $this->errorlog('SMTP', "$this->server[$this->indexno]['server']:$this->server[$this->indexno]['port'] CONNECT - $lastmessage", 0); } fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." discuz\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { $this->errorlog('SMTP', "($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", __LINE__); } while(1) { if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) { break; } $lastmessage = fgets($fp, 512); } if($this->auth) { fputs($fp, "AUTH LOGIN\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) AUTH LOGIN - $lastmessage", __LINE__); } fputs($fp, base64_encode(trim($this->server[$this->indexno]['user']))."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) USERNAME - $lastmessage", __LINE__); } fputs($fp, base64_encode(trim($this->server[$this->indexno]['pass']))."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 235) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) PASSWORD - $lastmessage", __LINE__); } $email_from = trim($this->server[$this->indexno]['from']); } fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) MAIL FROM - $lastmessage", __LINE__); } } $email_tos = $this->to; foreach($email_tos as $touser) { $touser = trim($touser); if($touser) { fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n"); $lastmessage = fgets($fp, 512); $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) RCPT TO - $lastmessage", 0); } } } $headers = ''; $maildelimiter = "\r\n"; $subject = '=?'.$this->charset.'?B?'.base64_encode(str_replace("\r", '', str_replace("\n", '', $this->subject))).'?='; $email_message = chunk_split(base64_encode(str_replace("\r\n.", " \r\n..", str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $this->htmlbody))))))); $email_from = '=?'.$this->charset.'?B?'.base64_encode($this->fromname)."?= <".$this->server[$this->indexno]['from'].">"; if ($this->mailtype == 'HTML' ){ $headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: vodcms.com! {$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=".$this->charset."{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}"; } fputs($fp, "DATA\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 354) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) DATA - $lastmessage", 99); } $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}"; fputs($fp, "Date: ".gmdate('r')."\r\n"); fputs($fp, "To: ".$email_to."\r\n"); fputs($fp, "Subject: ".$subject."\r\n"); fputs($fp, $headers."\r\n"); fputs($fp, "\r\n\r\n"); fputs($fp, "$email_message\r\n.\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { $this->errorlog('SMTP', "($this->server[$this->indexno]['server']:$this->server[$this->indexno]['port']) END - $lastmessage", __LINE__); } fputs($fp, "QUIT\r\n"); return true; } public function errorlog($message, $error, $line=0){ if ($this->debug == true){ echo $message. $error.'line:'.$line.'<br />'; }else{ $this->ErrorInfo = $message.$error.'line:'.$line.'<br />'; $this->indexno = $this->indexno + 1; //发送失败尝试使用下一组服务器发送 if ($this->server[$this->indexno]){ //若服务器存在就发送 $this->sendmail(); } } }}/*$mail = new smtpMailer;$mail->server[] = array( 'server'=>'mail.gol.com', 'port' => 587 , 'user' => 'ko-wa.inter.n@gol.com', 'pass' => 'bSrfpdY%', 'from'=> 'b2b@made-in-china.co.jp');$mail->server[] = array( 'server'=>'mail.163.com', 'port' => 25 , 'user' => 'zangguoping@163.com', 'pass' => 'yzmbhack<>?', 'from'=> 'zangguoping@163.com');$mail->to = array('10514873@qq.com', '24498936@qq.com','jin@made-in-china.co.jp','zangguoping@163.com');$mail->subject = '测试幽默';$mail->htmlbody = '测试的邮件内容';$mail->sendmail();*/?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -