失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【升级】php socket通过smtp发送邮件(纯文本 HTML 多收件人

【升级】php socket通过smtp发送邮件(纯文本 HTML 多收件人

时间:2020-06-23 06:01:26

相关推荐

【升级】php socket通过smtp发送邮件(纯文本 HTML 多收件人

php教程|php手册

升级,php,socket,smtp,发送,邮件,文本

php教程-php手册

手游下载站源码,ubuntu下载bluez,搭建tomcat为了做什么,爬虫技术 前景,java和php那个好学,什么是seo技巧留痕快速排名lzw

上一篇的升级:/code/snippet_1182150_25127 附件功能没写,只是预留了一点位置。 PHP 源码与演示: 源码出处 ?php/*** 邮件发送类* 支持发送纯文本邮件和HTML格式的邮件,可以多收件人,多抄送,多秘密抄送* @example* $mail = new My

易语言粉碎文件夹源码,ubuntu如何退出目录,用tomcat做支付页面,月季生爬虫,php经典实例教程,Seo tsexolzw

java 毕业设计 源码,vscode设置白色,ubuntu鼠标光标怎么出来,tomcat 超时 504,用sqlite打开db,百度地图定位插件,前端框架有哪些vue,骷髅爬虫采星,php保护,刘建民seo视频教程,食品销售网站html,网页源代码批量提取,小米商城后台模板,jquery导航栏切换页面,web 项目 管理系统 下载,开源相册程序picwindlzw

上一篇的升级:/code/snippet_1182150_25127

附件功能没写,只是预留了一点位置。

PHP

源码与演示:源码出处

.CodeEntity .code_pieces ul.piece_anchor{width:25px;position:absolute;top:25px;left:-30px;z-index:1000;}.CodeEntity .code_pieces ul.piece_anchor li{width:25px;background: #efe;margin-bottom:2px;}.CodeEntity .code_pieces ul.piece_anchor li{border-left:3px #40AA63 solid;border-right:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li:hover{border-right:3px #40AA63 solid;border-left:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li a{color: #333;padding: 3px 10px;}.CodeEntity .code_pieces .jump_to_code{visibility:hidden;position:relative;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code{visibility:visible;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code a{text-decoration:none;}.CodeEntity .code_pieces h2 i{float:right;font-style:normal;font-weight:normal;}.CodeEntity .code_pieces h2 i a{font-size:9pt;background: #FFFFFF;color:#00A;padding: 2px 5px;text-decoration:none;}

setServer("XXXXX", "XXXXX@XXXXX", "XXXXX"); 设置smtp服务器* $mail->setFrom("XXXXX"); 设置发件人* $mail->setReceiver("XXXXX"); 设置收件人,多个收件人,调用多次* $mail->setCc("XXXX"); 设置抄送,多个抄送,调用多次* $mail->setBcc("XXXXX"); 设置秘密抄送,多个秘密抄送,调用多次* $mail->setMailInfo("test", "test"); 设置邮件主题、内容* $mail->sendMail(); 发送*/class MySendMail {/*** @var string 邮件传输代理用户名* @access private*/private $_userName;/*** @var string 邮件传输代理密码* @access private*/private $_password;/*** @var string 邮件传输代理服务器地址* @access protected*/protected $_sendServer;/*** @var int 邮件传输代理服务器端口* @access protected*/protected $_port=25;/*** @var string 发件人* @access protected*/protected $_from;/*** @var string 收件人* @access protected*/protected $_to;/*** @var string 抄送* @access protected*/protected $_cc;/*** @var string 秘密抄送* @access protected*/protected $_bcc;/*** @var string 主题* @access protected*/protected $_subject;/*** @var string 邮件正文* @access protected*/protected $_body;/*** @var string 附件* @access protected*/protected $_attachment;/*** @var boolean 是否是纯文本邮件* @access protected*/protected $_isPlain=false;/*** @var reource socket资源* @access protected*/protected $_socket;/*** @var string 错误信息* @access protected*/protected $_errorMessage;/*** 设置邮件传输代理* @access public* @param string $server 代理服务器的ip或者域名* @param string $username 认证账号* @param string $password 认证密码* @param int $port 代理服务器的端口,smtp默认25号端口* @return boolean*/public function setServer($server, $username="", $password="", $port=25) {$this->_sendServer = $server;$this->_port = $port;if(!empty($username)) {$this->_userName = base64_encode($username);}if(!empty($password)) {$this->_password = base64_encode($password);}return true;}/*** 设置发件人* @access public* @param string $from 发件人地址* @return boolean*/public function setFrom($from) {$this->_from = $from;return true;}/*** 设置收件人,多个收件人,连续调用多次.* @access public* @param string $to 收件人地址* @return boolean*/public function setReceiver($to) {if(isset($this->_to)) {if(is_string($this->_to)) {$this->_to = array($this->_to);$this->_to[] = $to;return true;}elseif(is_array($this->_to)) {$this->_to[] = $to;return true;}else {return false;}}else {$this->_to = $to;return true;}}/*** 设置抄送,多个抄送,连续调用多次.* @access public* @param string $cc 抄送地址* @return boolean*/public function setCc($cc) {if(isset($this->_cc)) {if(is_string($this->_cc)) {$this->_cc = array($this->_cc);$this->_cc[] = $cc;return true;}elseif(is_array($this->_cc)) {$this->_cc[] = $cc;return true;}else {return false;}}else {$this->_cc = $cc;return true;}}/*** 设置秘密抄送,多个秘密抄送,连续调用多次* @access public* @param string $bcc 秘密抄送地址* @return boolean*/public function setBcc($bcc) {if(isset($this->_bcc)) {if(is_string($this->_bcc)) {$this->_bcc = array($this->_bcc);$this->_bcc[] = $bcc;return true;}elseif(is_array($this->_bcc)) {$this->_bcc[] = $bcc;return true;}else {return false;}}else {$this->_bcc = $bcc;return true;}}/*** 设置邮件信息* @access public* @param string $body 邮件主题* @param string $subject 邮件主体内容* @param boolean $isPlain 是否是纯文本邮件,默认否* @param string $attachment 附件,文件地址* @return boolean*/public function setMailInfo($subject, $body, $isPlain=false, $attachment="") {$this->_subject = $subject;$this->_body = $body;$this->_isPlain = $isPlain;if(!empty($attachment)) {$this->_attachment = $attachment;}return true;}/*** 发送邮件* @access public* @return boolean*/public function sendMail() {$command = $this->getCommand();$this->socket();//print_r($command);exit;foreach ($command as $value) {if($this->sendCommand($value[0], $value[1])) {continue;}else{return false;}}$this->close(); //其实这里也没必要关闭,smtp命令:QUIT发出之后,服务器就关闭了连接,本地的socket资源会自动释放echo Mail OK!;return true;}/*** 返回错误信息* @return string*/public function error(){if(!isset($this->_errorMessage)) {$this->_errorMessage = "";}return $this->_errorMessage;}/*** 返回mail命令* @access protected* @return array*/protected function getCommand() {$command = array(array("HELO sendmail\r\n", 250),array("AUTH LOGIN\r\n", 334),array($this->_userName . "\r\n", 334),array($this->_password . "\r\n", 235),array("MAIL FROM:_from . ">\r\n", 250));//邮件头$header = "MIME-Version:1.0\r\n";if($this->_isPlain) {$header .= "Content-type:text/plain;charset=utf-8\r\n";}else{$header .= "Content-type:text/html;charset=utf-8\r\n";}//设置发件人$header .= "FROM:test_from . ">\r\n";//设置收件人if(is_array($this->_to)) {$count = count($this->_to);for($i=0; $i<$count; $i++){$command[] = array("RCPT TO:_to[$i] . ">\r\n", 250);$header .= "TO:_to[$i] . ">\r\n";}}else{$command[] = array("RCPT TO:_to . ">\r\n", 250);$header .= "TO:_to . ">\r\n";}//设置抄送if(isset($this->_cc)) {if(is_array($this->_cc)) {$count = count($this->_cc);for($i=0; $i<$count; $i++){$command[] = array("RCPT TO:_cc[$i] . ">\r\n", 250);$header .= "CC:_cc[$i] . ">\r\n";}}else{$command[] = array("RCPT TO:_cc . ">\r\n", 250);$header .= "CC:_cc . ">\r\n";}}//设置秘密抄送if(isset($this->_bcc)) {if(is_array($this->_bcc)) {$count = count($this->_bcc);for($i=0; $i<$count; $i++){$command[] = array("RCPT TO:_bcc[$i] . ">\r\n", 250);$header .= "BCC:_bcc[$i] . ">\r\n";}}else{$command[] = array("RCPT TO:_bcc . ">\r\n", 250);$header .= "BCC:_bcc . ">\r\n";}}$header .= "Subject:" . $this->_subject ."\r\n\r\n";$body= $this->_body . "\r\n.\r\n";$command[] = array("DATA\r\n", 354);$command[] = array($header, "");$command[] = array($body, 250);$command[] = array("QUIT\r\n", 221);return $command;}/*** @access protected* @param string $command 发送到服务器的smtp命令* @param int $code 期望服务器返回的响应吗* @param boolean*/protected function sendCommand($command, $code) {echo Send command: . $command . ,expected code: . $code .

;//发送命令给服务器try{if(socket_write($this->_socket, $command, strlen($command))){//当邮件内容分多次发送时,没有$code,服务器没有返回if(empty($code)) {return true;}//读取服务器返回$data = trim(socket_read($this->_socket, 1024));echo esponse: . $data .

;if($data) {$pattern = "/^".$code."/";if(preg_match($pattern, $data)) {return true;}else{$this->_errorMessage = "Error:" . $data . "|**| command:";return false;}}else{$this->_errorMessage = "Error:" . socket_strerror(socket_last_error());return false;}}else{$this->_errorMessage = "Error:" . socket_strerror(socket_last_error());return false;}}catch(Exception $e) {$this->_errorMessage = "Error:" . $e->getMessage();}}/*** 读取附件文件内容,返回base64编码后的文件内容* @access protected* @return mixed*/protected function readFile() {if(isset($this->_attachment) && file_exists($this->_attachment)) {$file = file_get_contents($this->_attachment);return base64_encode($file);}else {return false;}}/*** 建立到服务器的网络连接* @access private* @return boolean*/private function socket() {if(!function_exists("socket_create")) {$this->_errorMessage = "Extension sockets must be enabled";return false;}//创建socket资源$this->_socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname( cp));if(!$this->_socket) {$this->_errorMessage = socket_strerror(socket_last_error());return false;}socket_set_block($this->_socket);//设置阻塞模式//连接服务器if(!socket_connect($this->_socket, $this->_sendServer, $this->_port)) {$this->_errorMessage = socket_strerror(socket_last_error());return false;}socket_read($this->_socket, 1024);return true;}/*** 关闭socket* @access private* @return boolean*/private function close() {if(isset($this->_socket) && is_object($this->_socket)) {$this->_socket->close();return true;}$this->_errorMessage = "No resource can to be close";return false;}}/**************************** Test ***********************************/$mail = new MySendMail();$mail->setServer("XXXXX", "XXXXX@XXXXX", "XXXXX");$mail->setFrom("XXXXX");$mail->setReceiver("XXXXX");$mail->setReceiver("XXXXX");//$mail->setCc("XXXXXX");//$mail->setCc("XXXXXX");$mail->setBcc("XXXXX");$mail->setBcc("XXXXX");$mail->setMailInfo("test", "test");$mail->sendMail();

如果觉得《【升级】php socket通过smtp发送邮件(纯文本 HTML 多收件人》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。