php 发邮件,php如何发送邮件
大家好,今天小编来为大家解答以下的问题,关于php 发邮件,php如何发送邮件这个很多人还不知道,现在让我们一起来看看吧!
如何使用php通过smtp发送邮件步骤
由于php没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。
首先是使用telnet来连接本地的25端口,稍微熟悉点网络的人都知道smtp协议使用25端口,这也就是说,现在在连接本地的smtp服务器。
这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。
“MAIL FROM:teste@dominio.com.br”这个命令指明了发件地址是teste@dominio.com.br,“250 Ok”说明这条命令被服务器接受并正确执行,这类似http协议的200、404、500等状态代码。接下来的“RCPT TO:teste@dominio.com.br”指明了收件地址是teste@dominio.com.br。
这一段是输入邮件正文,输入“DATA”以后系统提示使用“<回车>.<回车>”来结束输入,正文内容是“teste”。
最后使用“QUIT”退出。
以上就是最简单的一次发送mail的过程,从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。
把这个过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连接,然后发送文本的命令给服务器
<?php
require_once'Mail.php';
$conf['mail']=array(
'host'=>'xx.xx.xx.xx',//smtp服务器地址,可以用ip地址或者域名
'auth'=>true,//true表示smtp服务器需要验证,false代码不需要
'username'=>'tester',//用户名
'password'=>'retset'//密码
);
/***
*使用$headers数组,可以定义邮件头的内容,比如使用$headers['Reply-To']可以定义回复地址
*通过这种方式,可以很方便的定制待发送邮件的邮件头
***/
$headers['From']='tester@domain.com';//发信地址
$headers['To']='tester@domain.com';//收信地址
$headers['Subject']='testmailsendbyphp';//邮件标题
$mail_object=&Mail::factory('smtp',$conf['mail']);
$body=<<<MSG//邮件正文
helloworld!!!
MSG;
$mail_res=$mail_object->send($headers['To'],$headers,$body);//发送
if(Mail::isError($mail_res)){//检测错误
die($mail_res->getMessage());
}
?>
php如何发送邮件
你好,用这个邮件类,需要在调用时,填写一个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";
?>
用PHP发送电子邮件的方法
<?
/*
*邮件发送类
*/
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("用户名@163.com","密码","smtp.163.com");
$end=$sm->send("目标邮箱","来源邮箱","这是标题","这是邮件内容");
if($end) echo$end;
else echo"发送成功!";
*/
?>
关于php 发邮件的内容到此结束,希望对大家有所帮助。