php邮件发送类smtp.class.php在服务器上发送失败

php邮件发送类smtp.class.php在服务器上发送失败,第1张

开启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 的国外主机,一边是价廉物不太美的国内主机,我想诱惑力是不言而喻的。但是速度,唉,伤心是一种说不出的痛!

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » php邮件发送类smtp.class.php在服务器上发送失败

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情