首页技术php 发邮件,php如何发送邮件

php 发邮件,php如何发送邮件

编程之家2023-10-31128次浏览

大家好,今天小编来为大家解答以下的问题,关于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”退出。

php 发邮件,php如何发送邮件

以上就是最简单的一次发送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地址或者域名

php 发邮件,php如何发送邮件

'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 发邮件的内容到此结束,希望对大家有所帮助。

cs element 挪威CS选手elemeNt退役了phpstudy配置虚拟主机(Linux 安装phpstudy.bin 安装好后怎么配置虚拟环境)