前几天正好需要用mail()函数定时向一个网管邮箱发邮件!就研究了下!贴出来看看你有没有用!
是windows下实现的,linux下要还没研究...<?php
/*
实现在windows下利用mail()发送电子邮件1、发送邮件系统要有SMTP服务。在“windows Server 2003”下安装“SMTP Service”组件:
A、“添加删除Windows组件”->“应用程序服务器”->“Internet 信息服务(IIS)”点击“详细信息”。
B、选择“SMTP Service”进行安装。
2、对SMTP进行设置:
A、打开“Internet 信息服务(IIS)管理器”,找到“默认 SMTP虚拟服务器”。
B、在该服务上单击右键选择“属性”。
C、在弹出的“默认 SMTP虚拟服务器 属性”框内点选“访问”表项,选择“身份验证”按钮。
D、在弹出的“身份验证”框内只选择“匿名访问”其它都不选。
E、回到“访问”表项,选择“中继”按钮,在弹出的“中继限制”框内单击“添加”按钮,添加127.0.0.1的IP地址。
3、修改“php.ini”:
------------------------------
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25; For Win32 only.
sendmail_from = [email protected]
------------------------------
4、运行本程序,登陆“$toaddress”所示邮箱查看邮件。*/
$toaddress = '[email protected]';
$subjects = 'test the php mail';
$mailcontent = 'Onlu test the php mail!';
$fromaddress = 'From: [email protected]';
mail($toaddress,$subjects,$mailcontent,$fromaddress);
?>
是windows下实现的,linux下要还没研究...<?php
/*
实现在windows下利用mail()发送电子邮件1、发送邮件系统要有SMTP服务。在“windows Server 2003”下安装“SMTP Service”组件:
A、“添加删除Windows组件”->“应用程序服务器”->“Internet 信息服务(IIS)”点击“详细信息”。
B、选择“SMTP Service”进行安装。
2、对SMTP进行设置:
A、打开“Internet 信息服务(IIS)管理器”,找到“默认 SMTP虚拟服务器”。
B、在该服务上单击右键选择“属性”。
C、在弹出的“默认 SMTP虚拟服务器 属性”框内点选“访问”表项,选择“身份验证”按钮。
D、在弹出的“身份验证”框内只选择“匿名访问”其它都不选。
E、回到“访问”表项,选择“中继”按钮,在弹出的“中继限制”框内单击“添加”按钮,添加127.0.0.1的IP地址。
3、修改“php.ini”:
------------------------------
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25; For Win32 only.
sendmail_from = [email protected]
------------------------------
4、运行本程序,登陆“$toaddress”所示邮箱查看邮件。*/
$toaddress = '[email protected]';
$subjects = 'test the php mail';
$mailcontent = 'Onlu test the php mail!';
$fromaddress = 'From: [email protected]';
mail($toaddress,$subjects,$mailcontent,$fromaddress);
?>
(1)sendmail_from = [email protected] 这个邮箱是系统默认的吗,还是你申请的?
(2)$toaddress = '[email protected]'; 这个邮箱是接受方的邮箱,那我是163.com,直接在这写就行了吗?不是说需要验证的吗?你那个邮箱不需要验证吗?我现在php代码:
=====================================================
<?php
$toaddress = '[email protected]';
$subjects = 'test the php mail';
$mailcontent = 'Onlu test the php mail!';
$fromaddress = 'From: [email protected]';
$yes=mail($toaddress,$subjects,$mailcontent,$fromaddress);
if ($yes) {
echo "yes";
}
else
{echo "error";}
?>
======================================================
执行时,页面能显示yes。但'[email protected]'邮箱没收到任何信息。为什么
================================================================
php.ini内容如下:
===============================mail function]
; For Win32 only.
SMTP =localhost
smtp_port = 25; For Win32 only.
sendmail_from [email protected] ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path =C:\WINDOWS\system32\
答:不是我申请的,php.ini里默认就是这个.当目标邮箱收到邮件后看到的发送方是$fromaddress = 'From: [email protected]';里的邮箱地址.(2)$toaddress = '[email protected]'; 这个邮箱是接受方的邮箱,那我是163.com,直接在这写就行了吗?不是说需要验证的吗?你那个邮箱不需要验证吗?
答:'[email protected]'换成你要发送的目标邮箱.
mail()函数需要SMTP服务,也就是说你的PHP程序所在的服务器要有SMTP服务!你先要搞清楚发邮件和收邮件都是什么服务在起作用!
发邮件(SMTP)收邮件(POP3),收邮件不需要验证,发邮件才需要.我提供的程序我自己在用,可以发邮件没问题!
你在PHP.ini里加了个;
For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path =C:\WINDOWS\system32\ 那你就要装sendmail,这个我没试过不知道,你可以自己实验下!我用的windows2003自带的SMTP服务实现的!
那我要用163邮箱发肯定需要验证的,你的不需要吗?
(2)如果php.ini的sendmail_path =C:\WINDOWS\system32\ 被屏蔽到后就会报以下错误:Warning: mail() [function.mail]: Failed to connect to mailserver at "mail.csage.cn" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\yes.php on line 7
我是windowsxp系统,用你给我的测试的。那你这行屏蔽了,报错吗?我也是用系统自带的smtp服务
<?php
$toaddress = '[email protected]';
$subjects = 'test the php mail';
$mailcontent = 'Onlu test the php mail!';
$fromaddress = 'From: [email protected]';
$panduan=mail($toaddress,$subjects,$mailcontent,$fromaddress);
if($panduan)
{echo "ok";}
else
{echo "error";}
?>
如果页面显示ok的话是不是可以说明本地smtp服务已经配置成功了!
有什么办法可以判断本地smtp服务是否配置成功!
那为什么往163.com和sina发信时,报以下错:
Warning: mail() [function.mail]: SMTP server response: 553 This target address is not our MX service client. in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\yes.php on line 7
嘿嘿。
<?
#################################################
# 此函数可以发简单的邮件,三个参数:邮箱地址,标题,内容#
#################################################
function send_mail($to, $subject = 'No subject', $body) {
$loc_host = "localhost"; //发信计算机名,可随意
$smtp_acc = "[email protected]"; //Smtp认证的用户名,类似[email protected],或者fuweng
$smtp_pass="passwd"; //Smtp认证的密码,一般等同pop3密码
$smtp_host="smtp.163.com"; //SMTP服务器地址,类似 smtp.tom.com
[email protected]"; //发信人Email地址,你的发信信箱地址
$headers = "Content-Type: text/plain; charset=\"gb2312\"\r\nContent-Transfer-Encoding: base64";
$lb="\r\n"; //linebreak
$hdr = explode($lb,$headers); //解析后的hdr
if($body) {$bdy = preg_replace("/^\./","..",explode($lb,$body));}//解析后的Body $smtp = array(
//1、EHLO,期待返回220或者250
array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
//2、发送Auth Login,期待返回334
array("AUTH LOGIN".$lb,"334","AUTH error:"),
//3、发送经过Base64编码的用户名,期待返回334
array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
//4、发送经过Base64编码的密码,期待返回235
array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
//5、发送Mail From,期待返回250
$smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");
//6、发送Rcpt To。期待返回250
$smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");
//7、发送DATA,期待返回354
$smtp[] = array("DATA".$lb,"354","DATA error: ");
//8.0、发送From
$smtp[] = array("From: ".$from.$lb,"","");
//8.2、发送To
$smtp[] = array("To: ".$to.$lb,"","");
//8.1、发送标题
$smtp[] = array("Subject: ".$subject.$lb,"","");
//8.3、发送其他Header内容
foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}
//8.4、发送一个空行,结束Header发送
$smtp[] = array($lb,"","");
//8.5、发送信件主体
if($bdy) {foreach($bdy as $b) {$smtp[] = array(base64_encode($b.$lb).$lb,"","");}}
//9、发送“.”表示信件结束,期待返回250
$smtp[] = array(".".$lb,"250","DATA(end)error: ");
//10、发送Quit,退出,期待返回221
$smtp[] = array("QUIT".$lb,"221","QUIT error: "); //打开smtp服务器端口
$fp = @fsockopen($smtp_host, 25);
if (!$fp) echo "Error: Cannot conect to ".$smtp_host."
";
while($result = @fgets($fp, 1024)){if(substr($result,3,1) == " ") { break; }}
$result_str="";
//发送smtp数组中的命令/数据
foreach($smtp as $req){
//发送信息
@fputs($fp, $req[0]);
//如果需要接收服务器返回信息,则
if($req[1]){
//接收信息
while($result = @fgets($fp, 1024)){
if(substr($result,3,1) == " ") { break; }
};
if (!strstr($req[1],substr($result,0,3))){
$result_str.=$req[2].$result."
";
}
}
}
//关闭连接
@fclose($fp);
return $result_str;
}
//send_mail("[email protected]","hello","huizi"); //直接调用函数
?>
还有 $to 是填你自己的邮箱。