Posted in PHP onAugust 21, 2009
<?php /* * php smtp发送邮件Scoket类 * ZhozPhpSmtpSendMail.php * Created on 2008/09/02 zhoz.com * @author zhoz * v 1.72 update 2008/09/26 zhoz.Com */ class ZhozPhpSmtpSendMail { //您的SMTP 服务器供应商,可以是域名或IP地址 var $smtp = ""; //SMTP需要要身份验证设值为 1, 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp 服务商联系。 var $check = 1; //您的email帐号名称 var $username = ""; //您的email密码 var $password = ""; //此email 必需是发信服务器上的email var $s_from = ""; /* * 功能:发信初始化设置 * $from 你的发信?衿魃系挠氏? * $password 你的邮箱密码 * $smtp 您的SMTP 服务器供应商,可以是域名或IP地址 * $check SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证 */ function ZhozPhpSmtpSendMail ( $from, $password, $smtp, $check = 1 ) { if( preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/", $from ) ) { $this->username = substr( $from, 0, strpos( $from , "@" ) ); $this->password = $password; $this->smtp = $smtp ? $smtp : $this->smtp; $this->check = $check; $this->s_from = $from; } } /* * 功能:发送邮件 * $to 目标邮箱 * $from 来源邮箱 * $subject 邮件标题 * $message 邮件内容 */ function zhoz_send ($to, $from, $subject, $message) { //连接服务器 $fp = fsockopen ( $this->smtp, 25, $errno, $errstr, 60); if (!$fp ) return "联接服务器失败".__LINE__; set_socket_blocking($fp, true ); $lastmessage=fgets($fp,512); if ( substr($lastmessage,0,3) != 220 ) return "错误信息1:$lastmessage".__LINE__; //HELO $yourname = "YOURNAME"; if($this->check == "1") $lastact="EHLO ".$yourname."\r\n"; else $lastact="HELO ".$yourname."\r\n"; fputs($fp, $lastact); $lastmessage == fgets($fp,512); if (substr($lastmessage,0,3) != 220 ) return "错误信息2:$lastmessage".__LINE__; while (true) { $lastmessage = fgets($fp,512); if ( (substr($lastmessage,3,1) != "-") or (emptyempty($lastmessage)) ) break; } //身份验证 if ($this->check=="1") { //验证开始 $lastact="AUTH LOGIN"."\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 334) return "错误信息3:$lastmessage".__LINE__; //用户姓名 $lastact=base64_encode($this->username)."\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 334) return "错误信息4:$lastmessage".__LINE__; //用户密码 $lastact=base64_encode($this->password)."\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != "235") return "错误信息5:$lastmessage".__LINE__; } //FROM: $lastact="MAIL FROM: <". $this->s_from . ">\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 250) return "错误信息6:$lastmessage".__LINE__; //TO: $lastact="RCPT TO: <". $to ."> \r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 250) return "错误信息7:$lastmessage".__LINE__; //DATA $lastact="DATA\r\n"; fputs($fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 354) return "错误信息8:$lastmessage".__LINE__; //处理Subject头 $head="Subject: $subject\r\n"; $message = $head."\r\n".$message; //处理From头 $head="From: $from\r\n"; $message = $head.$message; //处理To头 $head="To: $to\r\n"; $message = $head.$message; //加上结束串 $message .= "\r\n.\r\n"; //发送信息 fputs($fp, $message); $lastact="QUIT\r\n"; fclose($fp); error_log("send over------->ok!!", 0); return true; } } ?> <?php /* * php smtp发送邮件Scoket类 * ZhozPhpSmtpSendMail.php * Created on 2008/09/02 zhoz.com * @author zhoz * v 1.72 update 2008/09/26 zhoz.Com */ class ZhozPhpSmtpSendMail { //您的SMTP 服务器供应商,可以是域名或IP地址 var $smtp = ""; //SMTP需要要身份验证设值为 1, 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp 服务商联系。 var $check = 1; //您的email帐号名称 var $username = ""; //您的email密码 var $password = ""; //此email 必需是发信服务器上的email var $s_from = ""; /* * 功能:发信初始化设置 * $from 你的发信服务器上的邮箱 * $password 你的邮箱密码 * $smtp 您的SMTP 服务器供应商,可以是域名或IP地址 * $check SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证 */ function ZhozPhpSmtpSendMail ( $from, $password, $smtp, $check = 1 ) { if( preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/", $from ) ) { $this->username = substr( $from, 0, strpos( $from , "@" ) ); $this->password = $password; $this->smtp = $smtp ? $smtp : $this->smtp; $this->check = $check; $this->s_from = $from; } } /* * 功能:发送邮件 * $to 目标邮箱 * $from 来源邮箱 * $subject 邮件标题 * $message 邮件内容 */ function zhoz_send ($to, $from, $subject, $message) { //连接服务器 $fp = fsockopen ( $this->smtp, 25, $errno, $errstr, 60); if (!$fp ) return "联接服务器失败".__LINE__; set_socket_blocking($fp, true ); $lastmessage=fgets($fp,512); if ( substr($lastmessage,0,3) != 220 ) return "错误信息1:$lastmessage".__LINE__; //HELO $yourname = "YOURNAME"; if($this->check == "1") $lastact="EHLO ".$yourname."\r\n"; else $lastact="HELO ".$yourname."\r\n"; fputs($fp, $lastact); $lastmessage == fgets($fp,512); if (substr($lastmessage,0,3) != 220 ) return "错误信息2:$lastmessage".__LINE__; while (true) { $lastmessage = fgets($fp,512); if ( (substr($lastmessage,3,1) != "-") or (empty($lastmessage)) ) break; } //身份验证 if ($this->check=="1") { //验证开始 $lastact="AUTH LOGIN"."\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 334) return "错误信息3:$lastmessage".__LINE__; //用户姓名 $lastact=base64_encode($this->username)."\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 334) return "错误信息4:$lastmessage".__LINE__; //用户密码 $lastact=base64_encode($this->password)."\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != "235") return "错误信息5:$lastmessage".__LINE__; } //FROM: $lastact="MAIL FROM: <". $this->s_from . ">\r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 250) return "错误信息6:$lastmessage".__LINE__; //TO: $lastact="RCPT TO: <". $to ."> \r\n"; fputs( $fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 250) return "错误信息7:$lastmessage".__LINE__; //DATA $lastact="DATA\r\n"; fputs($fp, $lastact); $lastmessage = fgets ($fp,512); if (substr($lastmessage,0,3) != 354) return "错误信息8:$lastmessage".__LINE__; //处理Subject头 $head="Subject: $subject\r\n"; $message = $head."\r\n".$message; //处理From头 $head="From: $from\r\n"; $message = $head.$message; //处理To头 $head="To: $to\r\n"; $message = $head.$message; //加上结束串 $message .= "\r\n.\r\n"; //发送信息 fputs($fp, $message); $lastact="QUIT\r\n"; fclose($fp); error_log("send over------->ok!!", 0); return true; } } ?> 测试方法一样。 运行代码查看代码复制代码打印关于 <?php /** * ZhozPhpSmtpSendMail.php * Created on 2008/09/02 zhoz.com * php smtp发送邮件类 * 代替mail():因为它报错,我又不想 */ // 这里配置发信服务器信息,如果不改也可以正常使用: $from = 'zhoz@zhoz.com'; // 你的发信服务器上的邮箱 $password = 'zhoz'; // 你的邮箱密码 $smtp = 'smtp.zhoz.com'; // 您的SMTP 服务器供应商,可以是域名或IP地址 // 类初始化 $zhoz_obj = new ZhozPhpSmtpSendMail($from, $password, $smtp); // 发送开始 $status = $zhoz_obj->zhoz_send("zhoz008@126.com", "zhoz@zhoz.com", "subject is zhoz", "body is zhoz.com"); if($status) { echo $status; echo "no---------"; } else { echo "send ok-----------------!"; die; } // 结果当然是:send ok-----------------! ?>
php win下Socket方式发邮件类
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@