PHP中如何使用发送电子邮件的类?
- 内容介绍
- 文章标签
- 相关推荐
本文共计733个文字,预计阅读时间需要3分钟。
php/** * 发送邮件类 * * 使用说明: * $m=new SendM('smtp服务器地址', '账号', '密码', 端口, 超时重试时间); * $m->Send('收件人邮箱', '主题', '邮件正文'); */class SendM { private $smtp_host; private $smtp_user; private $smtp_pass; private $smtp_port; private $timeout;
public function __construct($smtp_host, $smtp_user, $smtp_pass, $smtp_port, $timeout) { $this->smtp_host=$smtp_host; $this->smtp_user=$smtp_user; $this->smtp_pass=$smtp_pass; $this->smtp_port=$smtp_port; $this->timeout=$timeout; }
public function Send($to, $subject, $body) { $this->connect(); $headers=[ 'From: ' . $this->smtp_user, 'To: ' . $to, 'Subject: ' . $subject, 'Content-Type: text/; charset=UTF-8' ]; $this->sendCommand('HELO ' . $this->smtp_host); $this->sendCommand('AUTH LOGIN'); $this->sendCommand(base64_encode($this->smtp_user)); $this->sendCommand(base64_encode($this->smtp_pass)); $this->sendCommand('MAIL FROM: smtp_user . '>'); $this->sendCommand('RCPT TO: '); $this->sendCommand('DATA'); $this->sendCommand(implode(\r\n, $headers) . \r\n\r\n . $body . \r\n.\r\n); $this->sendCommand('QUIT'); $this->disconnect(); }
private function connect() { $this->socket=fsockopen('ssl://' . $this->smtp_host, $this->smtp_port, $errno, $errstr, $this->timeout); if (!$this->socket) { throw new Exception('无法连接到SMTP服务器:' . $errstr . ' (' . $errno . ')'); } stream_set_timeout($this->socket, $this->timeout); }
private function disconnect() { fclose($this->socket); }
private function sendCommand($command) { fwrite($this->socket, $command . \r\n); $response=fgets($this->socket, 515); if (substr($response, 0, 3) !='250') { throw new Exception('SMTP错误:' . $response); } }}
<?php /*********************************************************************************** 使用说明: $m= new SendM('smtp服务器地址','账号','密码',端口(int),超时重试时间(int)); $m->Send('收件人邮箱 ','主题','邮件正文内容'); 使用范例: $m= new SendM('smtp.yeah.net','testuser','testuserpwd',25,30); $m->Send('[emailprotected] ','测试邮件','这是一封邮件发送类的测试邮件,谢谢您的支持'); *************************************************************************************/ class SendM{ private $Mailhost,$Mailuser,$Mailpwd,$Mailport,$Mailtimeout,$ms,$ending = "\r\n",$endingc="\n"; function __construct($Mailhost,$Mailuser,$Mailpwd,$Mailport,$Mailtimeout){ $this->Mailhost=$Mailhost; $this->Mailuser=$Mailuser; $this->Mailpwd=$Mailpwd; $this->Mailport=$Mailport; $this->Mailtimeout=$Mailtimeout; $this->ConnectSmtpServer(); } private function ConnectSmtpServer(){ if(!is_string($this->Mailhost)){ settype(trim($this->Mailhost),"string"); } if(!is_integer($this->Mailport)){ settype(trim($this->Mailport),"integer"); } if(!is_integer($this->Mailtimeout)){ settype(trim($this->Mailtimeout),"integer"); } $this->[emailprotected]($this->Mailhost,$this->Mailport,$this->errorno,$this->errorstr,$this->Mailtimeout); if(substr(PHP_OS,0,3) != "WIN"){ stream_set_timeout($this->ms, $this->Mailtimeout, 0);} $rcp = $this->get_echo(); fputs($this->ms,"ehlo bobo".$this->ending); $rcp = $this->get_echo(); if(substr($rcp,0,3)!='250'){ return false; } fputs($this->ms,'auth login'.$this->ending); $rcp = $this->get_echo(); if(substr($rcp,0,3)=='334'){ $this->Auth($this->Mailuser,$this->Mailpwd); }else{ return false; } } private function Auth($Mailuser,$Mailpwd){ $this->Mailuseren=base64_encode($Mailuser); $this->Mailpwden=base64_encode($Mailpwd); fputs($this->ms,$this->Mailuseren.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,$this->Mailpwden.$this->ending); $rcp = $this->get_echo(); } private function get_echo(){ $edata=""; while([emailprotected]($this->ms,600)){ $edata .= $estr; if(substr($estr,3,1) == " ") { break; } } return $edata; } public function Send($to,$subject,$connect){ $host=explode('.',$this->Mailhost); $fromaddress=$this->Mailuser.'@'.$host[1].'.'.$host[2]; fputs($this->ms,'mail from:<'.$fromaddress.'>'.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,'rcpt to:<'.$to.'>'.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,'data'.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,"to:$to".$this->endingc); fputs($this->ms,"from:$fromaddress".$this->endingc); fputs($this->ms,"subject:$subject".$this->endingc.$this->endingc); fputs($this->ms,"$connect".$this->endingc); fputs($this->ms,'.'.$this->ending); $rcp = $this->get_echo(); if(substr($rcp,0,3)=='250'){header("Location:main_pro.php?act=msg&errors=on&msg=邮件发送成功!已成功提交至对方服务器!"); }else{ header("Location:main_pro.php?act=msg&errors=on&msg=很遗憾,邮件发送失败了!请检查邮件账户配置是否正确!"); } } } ?>
本文共计733个文字,预计阅读时间需要3分钟。
php/** * 发送邮件类 * * 使用说明: * $m=new SendM('smtp服务器地址', '账号', '密码', 端口, 超时重试时间); * $m->Send('收件人邮箱', '主题', '邮件正文'); */class SendM { private $smtp_host; private $smtp_user; private $smtp_pass; private $smtp_port; private $timeout;
public function __construct($smtp_host, $smtp_user, $smtp_pass, $smtp_port, $timeout) { $this->smtp_host=$smtp_host; $this->smtp_user=$smtp_user; $this->smtp_pass=$smtp_pass; $this->smtp_port=$smtp_port; $this->timeout=$timeout; }
public function Send($to, $subject, $body) { $this->connect(); $headers=[ 'From: ' . $this->smtp_user, 'To: ' . $to, 'Subject: ' . $subject, 'Content-Type: text/; charset=UTF-8' ]; $this->sendCommand('HELO ' . $this->smtp_host); $this->sendCommand('AUTH LOGIN'); $this->sendCommand(base64_encode($this->smtp_user)); $this->sendCommand(base64_encode($this->smtp_pass)); $this->sendCommand('MAIL FROM: smtp_user . '>'); $this->sendCommand('RCPT TO: '); $this->sendCommand('DATA'); $this->sendCommand(implode(\r\n, $headers) . \r\n\r\n . $body . \r\n.\r\n); $this->sendCommand('QUIT'); $this->disconnect(); }
private function connect() { $this->socket=fsockopen('ssl://' . $this->smtp_host, $this->smtp_port, $errno, $errstr, $this->timeout); if (!$this->socket) { throw new Exception('无法连接到SMTP服务器:' . $errstr . ' (' . $errno . ')'); } stream_set_timeout($this->socket, $this->timeout); }
private function disconnect() { fclose($this->socket); }
private function sendCommand($command) { fwrite($this->socket, $command . \r\n); $response=fgets($this->socket, 515); if (substr($response, 0, 3) !='250') { throw new Exception('SMTP错误:' . $response); } }}
<?php /*********************************************************************************** 使用说明: $m= new SendM('smtp服务器地址','账号','密码',端口(int),超时重试时间(int)); $m->Send('收件人邮箱 ','主题','邮件正文内容'); 使用范例: $m= new SendM('smtp.yeah.net','testuser','testuserpwd',25,30); $m->Send('[emailprotected] ','测试邮件','这是一封邮件发送类的测试邮件,谢谢您的支持'); *************************************************************************************/ class SendM{ private $Mailhost,$Mailuser,$Mailpwd,$Mailport,$Mailtimeout,$ms,$ending = "\r\n",$endingc="\n"; function __construct($Mailhost,$Mailuser,$Mailpwd,$Mailport,$Mailtimeout){ $this->Mailhost=$Mailhost; $this->Mailuser=$Mailuser; $this->Mailpwd=$Mailpwd; $this->Mailport=$Mailport; $this->Mailtimeout=$Mailtimeout; $this->ConnectSmtpServer(); } private function ConnectSmtpServer(){ if(!is_string($this->Mailhost)){ settype(trim($this->Mailhost),"string"); } if(!is_integer($this->Mailport)){ settype(trim($this->Mailport),"integer"); } if(!is_integer($this->Mailtimeout)){ settype(trim($this->Mailtimeout),"integer"); } $this->[emailprotected]($this->Mailhost,$this->Mailport,$this->errorno,$this->errorstr,$this->Mailtimeout); if(substr(PHP_OS,0,3) != "WIN"){ stream_set_timeout($this->ms, $this->Mailtimeout, 0);} $rcp = $this->get_echo(); fputs($this->ms,"ehlo bobo".$this->ending); $rcp = $this->get_echo(); if(substr($rcp,0,3)!='250'){ return false; } fputs($this->ms,'auth login'.$this->ending); $rcp = $this->get_echo(); if(substr($rcp,0,3)=='334'){ $this->Auth($this->Mailuser,$this->Mailpwd); }else{ return false; } } private function Auth($Mailuser,$Mailpwd){ $this->Mailuseren=base64_encode($Mailuser); $this->Mailpwden=base64_encode($Mailpwd); fputs($this->ms,$this->Mailuseren.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,$this->Mailpwden.$this->ending); $rcp = $this->get_echo(); } private function get_echo(){ $edata=""; while([emailprotected]($this->ms,600)){ $edata .= $estr; if(substr($estr,3,1) == " ") { break; } } return $edata; } public function Send($to,$subject,$connect){ $host=explode('.',$this->Mailhost); $fromaddress=$this->Mailuser.'@'.$host[1].'.'.$host[2]; fputs($this->ms,'mail from:<'.$fromaddress.'>'.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,'rcpt to:<'.$to.'>'.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,'data'.$this->ending); $rcp = $this->get_echo(); fputs($this->ms,"to:$to".$this->endingc); fputs($this->ms,"from:$fromaddress".$this->endingc); fputs($this->ms,"subject:$subject".$this->endingc.$this->endingc); fputs($this->ms,"$connect".$this->endingc); fputs($this->ms,'.'.$this->ending); $rcp = $this->get_echo(); if(substr($rcp,0,3)=='250'){header("Location:main_pro.php?act=msg&errors=on&msg=邮件发送成功!已成功提交至对方服务器!"); }else{ header("Location:main_pro.php?act=msg&errors=on&msg=很遗憾,邮件发送失败了!请检查邮件账户配置是否正确!"); } } } ?>

