`
txf2004
  • 浏览: 7131827 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

php在win下Socket方式发邮件类

 
阅读更多

<?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 发送邮件

    PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式,固php还得openssl的支持,可以查看phpinfo,如下两项均存在则可以使用,其中openssl版本号之类不用管;许多虚拟主机中的php是不支持...

    phpwind2.0邮件增强插件(支持esmtp)

    1 使用默认mail函数 2 通过SOCKET连接SMTP服务器发送(支持 ESMTP 验证) 3 通过调用CDONTS.NewMail(虚拟SMTP发信)组件发送Email(仅 win32 下有效) 4 通过调用jmail 组件发送Email(仅 win32 下有效...

    php学习心得.doc

    在win32平台下,mail()函数不能发送电子邮件,需要调用SMTP服务器来发送电子邮件。可以修改php.ini的smtp = ip,其中ip是没有验证功能的SMTP服务器。php发送邮件的最好解决方法是使用socket直接发送到对方email...

    php心得体验自我学习结果总结

    在 Win32 平台下,使用 mail() 函数不能发送电子邮件,需要调用 SMTP 服务器来发送电子邮件,或者使用 socket 直接发送到对方 Email 服务器。 6. MySQL 使用 在安装 MySQL 时,如果没有设置密码,需要使用 `update ...

    初学者最感迷茫的PHP问题

    5. **Win32下的邮件发送**:在Windows环境下,需要配置SMTP服务器来发送邮件。在`php.ini`中设置`SMTP`为SMTP服务器的IP地址,并考虑使用直接通过socket连接目标邮件服务器的方式发送邮件,避免依赖本地SMTP服务。 ...

    php-4.4.8

    面向对象编程(OOP)在PHP 4中得到了显著加强,虽然不如PHP 5那样全面,但仍然引入了类、对象、继承、封装和多态等核心概念。这使得开发者能够编写更加结构化和可维护的代码,尤其是对于大型项目,OOP是必不可少的...

    php实习报告范文.doc

    5. **Win32下mail()函数邮件发送**: 在Windows下,需要配置SMTP服务器才能发送邮件。在php.ini中设置`SMTP = IP`,其中IP是不需验证的SMTP服务器地址。更好的解决方案是直接通过socket连接到目标邮件服务器发送...

    令PHP初学者们最头疼的几个问题及解决办法

    5. **Win32环境下mail()函数无法发送邮件**: 在Windows系统中,需要配置SMTP服务器来发送邮件。在php.ini中设置`SMTP = IP`,IP为无认证的SMTP服务器。更佳方案是直接使用socket连接目标邮件服务器发送邮件。 6. ...

    php帮助文档,php。chm,php必备的中文手册

    49. 邮件列表 50. 获取 PHP 51. 数据库问题 52. 安装常见问题 53. 编译问题 54. 使用 PHP 55. PHP 和 HTML 56. PHP 和 COM 57. PHP 和其它语言 58. 从 PHP/FI 2 移植到 PHP 3 59. 从 PHP 3 移植到 PHP 4 60. 从 PHP ...

    PHP5 完整官方 中文教程

    win32service — win32service Functions xattr — xattr Functions xdiff — xdiff Functions XML — XML 语法解析函数 XML-RPC — XML-RPC 函数 XMLReader — XMLReader functions XMLWriter — XMLWriter ...

    PHP手册2007整合中文版

    PHP,即“PHP: Hypertext Preprocessor”,是一种被广泛使用的开放源代码多用途脚本语言,尤其适用于 web 开发并可以嵌入到 HTML 中去。其语法利用了 C,Java 和 Perl,非常容易学习。该语言的主要目标是让 web 开发...

    PHP官方手册中文版

    5. Mac OS X 系统下的安装 6. Windows 系统下的安装 7. PECL 扩展库安装 8. 还有问题? 9. 运行时配置 III. 语言参考 10. 基本语法 11. 类型 12. 变量 13. 常量 14. 表达式 15. 运算符 16. 控制结构 17...

    PHP5中文参考手册

    win32service — win32service Functions xattr — xattr Functions xdiff — xdiff Functions XML — XML 语法解析函数 XML-RPC — XML-RPC 函数 XMLReader — XMLReader functions XMLWriter — XMLWriter ...

    十四条令PHP初学者头疼问题大总结

    5. **Win32下mail()函数无法发送邮件**:在Windows环境中,需要配置SMTP服务器。可以考虑使用socket直接连接目标邮件服务器发送邮件。 6. **MySQL无密码设置**:首次安装MySQL后,若未设置密码,可以使用SQL命令`...

    apache php mysql_配置图解

    - 在“Administrator's Email Address”处填写系统管理员的联系电子邮件地址。 - 可选择为所有用户安装(使用默认的80端口,并作为系统服务自动启动)或仅为当前用户安装(使用端口8080,手动启动)。推荐选择为...

    PHP5 开发手册 简体中文手册

    49. 邮件列表 50. 获取 PHP 51. 数据库问题 52. 安装常见问题 53. 编译问题 54. 使用 PHP 55. PHP 和 HTML 56. PHP 和 COM 57. PHP 和其它语言 58. 从 PHP/FI 2 移植到 PHP 3 59. 从 PHP 3 移植到 PHP 4 60. 从 PHP ...

    php+mysql+apache环境配置手册.pdf

    - 解压缩到适当的位置,例如与Apache安装在同一目录下的子目录。 - 配置Apache,打开`httpd.conf`文件,添加PHP模块加载指令,通常是在文件末尾加入`LoadModule php5_module "path/to/php/php5apache2_2.dll"`,...

    PHP安全配置之实现安全的两个重点

    此外,邮件发送功能可能也需要重新配置,因为在php.ini中的设置如`SMTP = localhost`和`sendmail_from = me@localhost.com`都是针对Win32平台,需要在chroot环境中调整sendmail配置以确保正常工作。 其次,关注PHP...

Global site tag (gtag.js) - Google Analytics