使用 PHP 发送邮件(mail() or socket)

PHPABC PHP开发 1,004 次浏览 , , , 没有评论

使用php发送邮件主要有两种方式:

1.使用mail函数发送
2.通过 Socket方式发送

1. mail()函数发送邮件

mail()函数目前不支持远程smtp的验证,如果使用此方式,本地服务器需要支持smtp服务,windows 系统下可以通过安装IIS组件里的“SMTP Service”来配置smtp服务器环境,linux系统下可以通过安装其它mail组件系统来配置smtp服务。服务器环境配置好以后,下面看一下使用方法。

mail(to,subject,message,headers,parameters)

简单实例:

<?php
$to = "test@phpabc.cn";
$subject = "Test Subject";
$message = "This is the test email.";
$from = "youremail@phpabc.cn";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
?>

2. 使用Socket方式发送邮件

使用Socket方式,可以利用远程smtp服务器发送邮件,Socket支持远程 smtp验证,所以这也是Socket方式一个比较灵活的地方,如果本地服务器不支持smtp,使用mail()函数会出错,此时可以考虑使用 Socket方式发送邮件,目前网上有比较多的Socket发送邮件类的源码,可以参考一下。

使用Socket的第一步,需要你有一个可用的邮箱(126或163都可以,当然其它的也行)。

网上的部分参考代码:

".$lb,"250","MAIL FROM error: ");
//6、发送Rcpt To。期待返回250
$smtp[] = array("RCPT TO: &lt;".$to."&gt;".$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 "<strong>Error:</strong> 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;
}
?&gt;

使用方法:

if(send_mail('test@qq.com',' 邮件主题','邮件内容')==""){
echo "发送成功!
";
} else{
echo "发送失败!
";
}

一篇关于Socket参考文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Go