php邮件发送类smtp.class.php在服务器上发送失败
开启php配置文件的两个扩展:extension=php_socketsdll和extension=php_openssldll,将前面的两个分号去掉就行。
这两个函数呢 然后重启服务
直接用sendmail插件就可以实现了,配置好对应值即可。
PHPini的配置。
[mail function]
; For Win32 only
; SMTP = localhost
; smtp_port = 25
; For Win32 only
; sendmail_from = me@examplecom
; For Unix only You may supply arguments as well (default: "sendmail -t -i")
sendmail_path = "D:\PHP5\sendmail\sendmailexe -t"
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode
;mailforce_extra_parameters =
其实,上面的配置中就那么么一句是有用的,其它的关掉就可以了。
sendmail_path的用来指定sendmailexe的路径,就是上面看到的,‘-t’写上就好,不用管。
接着是sendmail的配置
smtp_server=smtp服务器地址
auth_username=邮箱登录名
auth_password=邮箱密码
force_sender=发件人地址全写
这里由于没有自己的STMP服务器,就得用别人的,经测试可以用QQ和163的。例如QQ的smtp_server地址为:smtpqqcom。auth_username就是登陆名,如果用QQ的就是QQ号码。auth_password邮箱密码。force_sender这是其实可以不填。
接着到你用的邮箱里面设置一下,将SMTP功能打开就OK了。
下面是测试用的PHP代码:
<php$to = "123@qqcom";$now = date("Y-m-d h:i:s");
$from_name = '测试者';
$from_email = 'Kensy';
$headers = "From: $from_name <$from_email>";
$body = "测试邮件!";
$subject = "[$now] 测试邮件";
if (mail($to, $subject, $body, $headers)) {
echo "success!";
} else {
echo "fail…";
}
>
你好,用这个邮件类,需要在调用时,填写一个smtp服务器和你的用户名密码。
<php
set_time_limit(600);
/
邮件发送类
/
class smail {
//您的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 smail ( $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 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";
fputs($fp,$lastace);
fclose($fp);
return 0;
}
}
// 发送示例
// 只需要把这部分改成你的信息就行
$sm = new smail( "用户名", "密码", "发件smtp服务器" );
$end = $sm->send( "收件人", "发件人(可以伪造哦)", "标题", "内容" );
if( $end ) echo $end;
else echo "发送成功!$x";
>
1)、下载WAMP
所谓WAMP,是指在Windows系统(W)下安装Apache网页服务器(A)以及MySQL数据库(M)和PHP脚本引擎(P)而搭建起来的PHP网络服务器环境,当然,在LAMP环境肯定是比WAMP环境要好的,可是由于Windows的易用性,所以,我们在做前期开发或者测试某些CMS的时候,使用WAMP环境甚至很方便更实用一些。WAMP即这些单个软件共同组成了一个强大的Web应用程序平台。
2)、下载开发工具ZendStudio
Zend Studio是PHP 集成开发环境,具备功能强大的专业编辑工具和调试工具,支持PHP语法加亮显示,支持语法自动填充功能,支持书签功能,支持语法自动缩排和代码复制功能,内置一个强大的PHP代码调试工具,支持本地和远程两种调试模式,支持多种高级调试功能。
windows版 Zend Studio 801下载
2、安装程序
1)、WAMP 安装步骤图解
把WAMP下载到
选择WAMP安装路径,也可以默认路径。
SMP服务器地址
PHP 邮件服务器默认Email
设置启动浏览器。
安装完成,显示。
3、配置环境
安装完成后默认是英文。
设置WAMP语言。您可以设置其他的语言,当然我们设置为Chinese(中文)
WAMP重启以后就为中文了。您就可以通过WAMP去配置PHP环境了。
添加一个Alias目录,(就像在IIS上配置一个虚拟目录)
添加一个Alias目录名称。
设置Alias目录名称指向的物理路径。
4、PHP调试
在C:\wamp\phpDemo文件夹中添加Indexphp文件,这时就可以在indexphp 编写PHP代码了。
在浏览器地址栏中输入:http://localhost/ 如果能看到上图PHP服务器配置相关信息,说明您的PHP服务器配置成功。
你可以直接访问http://localhost/Demo 就可以查看刚才编写的indexphp程序。显示页面执行的结果。
2)、PHP开发工具ZendStudio安装图
Zend Studio安装过程很简单,点击“Next”、“Next"基本就可以搞定。
安装完成后,你就可以添加一个PHP项目,编写你的PHP网站。在创建PHP项目时,要填写项目名称和保持路径。
这是你就可以在项目中添加PHP文件。编写PHP页面。
5、PHP开发环境
点击运行,就可以在Zend Studion IDE中浏览PHP页面执行的内容。
下载一个phpMailer或者swiftMailer配置一下就可以了,建议用phpMailer,很好用的,也简单。要是用php自带的mail函数需要系统的支持,windows很麻烦的,
你可以用 mail,sendmail 和 smtp 三种方式来借助 Mail 类发送邮件。话说几天前刚买了个 BlueHost 的空间,在上面跑程序的时候用 PHP 发邮件搞出点心得来,放在这里跟大家分享。 首先我在系统中添加了一个邮件账户 test,密码 123456,然后写下了如下代码: require_once( 'Mailphp'); $conf = array( 'host' => 'mailyourdomailcom', 'auth' => true, 'username' => 'test', 'password' => '123456' ); $headers['From'] = 'noreply@yourdomaincom'; $headers['To'] = $To; $headers['Subject'] = '=GB2312B' base64_encode( $Subject) '='; $headers['Content-Type'] = 'text/plain; charset=gb2312'; $Mail = & Mail::factory( 'smtp', $conf); $res = $Mail->send( $To, $headers, $Content); > $To 是想要发送到的信箱地址,比如 foobar@gmailcom,$Subject 是邮件主题,$Content 是 GB2312 编码的邮件正文。结果用以上程序屡试屡败,后来经过多次试验才得出在 BlueHost 主机上用 PHP 以 SMTP 方式发送邮件的正确方法,注意事项如下:1) BlueHost 帮助信息中说跟你账户(域名)相对应的 SMTP 主机地址是 mailyourdomaincom,但其实应该是 localhost。你用 mailyourdomaincom 只会得到 SMTP 拒绝链接的错误信息。2) SMTP 服务器需要验证才能发邮件。3) SMTP 验证时用户名需要写 user+yourdomaincom,不能写 user@yourdomaincom。想想这个也好理解,在虚拟主机上一个 SMTP server 要支撑很多个账户,这种写法应该是为了区别发件的账户。4) 邮件头中的发件邮件账户一定要是存在于系统中的真实账户,象我上面那样注册了一个 test@yourdomaincom,但是发件人账户又写 noreply@yourdomaincom 是不行的,只会得到这样的错误信息:SMTP: Invalid response code received from server (code: 550, response: Verification failed for No Such User Here Sender verify failed) 知道了上面这 4 个注意事项以后就好办了,删掉刚才注册的 test 邮件帐号,注册一个 noreply 帐号,修改程序如下: require_once( 'Mailphp'); $conf = array( 'host' => 'localhost', 'auth' => true, 'username' => 'noreply+yourdomaincom', 'password' => '123456' ); $headers['From'] = 'noreply@yourdomaincom'; $headers['To'] = $To; $headers['Subject'] = '=GB2312B' base64_encode( $Subject) '='; $headers['Content-Type'] = 'text/plain; charset=gb2312'; $Mail = & Mail::factory( 'smtp', $conf); $res = $Mail->send( $To, $headers, $Content); > 邮件被成功的发送出去了,而且由于邮件服务器在美国,发送到 GMail 信箱非常之快,一般这边一发那边刷新一下就能看到新邮件:) 这里再说些题外话,买了 BlueHost 的空间将近一周时间了,感觉美国的虚拟主机市场确实非常成熟,功能强大。跟国内价格还行但是配置超受限的主机比起来性价比高的不得了!只要你选对了服务提供商,可以说绝对让你满意。但是缺点也比较明显,就是速度实在是慢!这里面的原因众所周知,感谢伟大的电信运营商,感谢伟大的 GFW! 今天跟 HostMonster 的客户沟通了一下,问问他们那边从中国过去的访问速度怎么样,估计人家遇到这样的情况不是个别现象,上来就是一句,我们对来自中国的访问速度无法做出承诺。 国内的虚拟主机服务商有万网这样把大家当 SB 漫天要价的主,但是也有兢兢业业踏踏实实做服务的公司,不过性价比跟国外的运营商确实没法比。一边是价格高不了多少,动辄几十 G 空间几百 G 月流量,支持 SSH,支持多 Addon domain 的国外主机,一边是价廉物不太美的国内主机,我想诱惑力是不言而喻的。但是速度,唉,伤心是一种说不出的痛!
0条评论