php发邮件接口源码需要什么意思,分享个发邮件API 便于不支持smtp的虚拟空间使用...

分享个发邮件API 便于不支持smtp的虚拟空间使用 <?php

class email

{

//通过sock发送e_mail,不支持附件,

//-------------------------------------------------------------------------------------------------------

function email_sock($host,$port,$errno,$errstr,$timeout,$auth,$user,$pass,$from)//构造函数

{

$this->host = $host;

$this->port = $port;

$this->errno = $errno;

$this->errstr = $errstr;

$this->timeout = $timeout;

$this->auth = $auth;

$this->user = $user;

$this->pass = $pass;

$this->from = $from;

}

function send_mail_sock($subject,$message,$to,$from_name,$mailformat=0)//邮件标题,邮件内容,收件地址,邮件格式1=text|0=html,默认为0

{

$host = $this->host;

$port = $this->port;

$errno = $this->errno;

$errstr = $this->errstr;

$timeout = $this->timeout;

$auth = $this->auth;

$user = $this->user;

$pass = $this->pass;

$from = $this->from;

/*

1.创建sock,并打开连接

2.设置为阻塞模式

3.测试smtp应答码是否为220,220代表邮件服务就绪

4.发送用户身份验证,由用户设置

1=EHLO Host Domain \r\n

0=HELO Host Domain \r\n

?.读取服务器端发送给客户端的返回数据

smtp.163.com 发送的数据为:

250-PIPELINING//流水命令,告诉客户端可以一次发送多个命令来提高速度,在这里PHP

并没有使用,因为PHP单个文件的运行还是单线程的

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250 8BITMIME//得到这一行也就是smtp服务器发送结束了,等待客户端发送命令

5.发送AUTH LOGIN命令

6.发送用户名

7.发送密码

?.身份验证过成功后后,

8.向服务器添加from

9.向服务器添加to

10.发送DATA命令,开始输入email数据,以"."号结束

11.书写邮件内容

12.将邮件内容发送到smtp服务器

13.发送QUIT命令,结束会话

*/

$fp = fsockopen($host,$port,$errno,$errstr,$timeout);//打开sock的网络连接

if(!$fp){return '1.没有设置好smtp服务';}

stream_set_blocking($fp, true);//设置为阻塞模式,此模式读不到数据则会停止在那

$mail_return=fgets($fp, 512);//读取512字节内容

if(substr($mail_return, 0, 3) != '220')

{return $host.'-2.返回应答码为'.substr($mail_return, 0, 3);}//返回应答码所代表意思请参考'smtp协议.txt'

fputs($fp, ($auth ? 'EHLO' : 'HELO')." ".$host."\r\n");//服务器标识用户身份 1=身份验证的标识,0=不需要身份验证的标识

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 220 && substr($mail_return, 0, 3) != 250)

{return $host.'-3.返回应答码为'.substr($mail_return, 0, 3);}

while(true)

{

$mail_return = fgets($fp, 512);

if(substr($mail_return, 3, 1) != '-' || empty($mail_return))

{break;}

}

if($auth)

{

fputs($fp, "AUTH LOGIN\r\n");

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 334)

{return $host.'-5.返回应答码为'.substr($mail_return, 0, 3);}

fputs($fp, base64_encode($user)."\r\n");

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 334)

{return $host.'-6.返回应答码为'.substr($mail_return, 0, 3).'user='.$user;}

fputs($fp, base64_encode($pass)."\r\n");

$mail_return=fgets($fp, 512);

if(substr($mail_return, 0, 3) != 235)

{return $host.'-7.用户验证失败,应答码为'.substr($mail_return, 0, 3);}

}

//向服务器添加FROM and TO

//------------------------------------------------------------------------------------------------------------------------

fputs($fp, "MAIL FROM: ".$from."\r\n");//有两种格式,MAIL FROM:xxx@xx.com和MAIL FROM:

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 250)

{

fputs($fp, "MAIL FROM: \r\n");

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 250)

{return $host.'-8.返回应答码为'.substr($mail_return, 0, 3);}

}

foreach(explode(',', $to) as $mailto)

{

$mailto = trim($mailto);

if($mailto)

{

fputs($fp, "RCPT TO: ".$mailto."\r\n");

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 250)

{

fputs($fp, "RCPT TO: \r\n");

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 250)

{return $host.'-9.返回应答码为'.substr($mail_return, 0, 3);}

}

}

}

//------------------------------------------------------------------------------------------------------------------------

fputs($fp, "DATA\r\n");//开始输入email数据,以"."号结束

$mail_return = fgets($fp, 512);

if(substr($mail_return, 0, 3) != 354)

{return $host.'-10.返回应答码为'.substr($mail_return, 0, 3);}

//邮件内容

//-----------------------------------------------------------

$mail_message = "From:".$from_name.'\r\n";

$mail_message .= "To:".$to."\r\n";

$mail_message .= "Subject:".str_replace("\n",' ',$subject)."\r\n";

if($mailformat==1)

{$mail_message .= "Content-Type: text/html;\r\n"; }

else

{$mail_message .= "Content-Type: text/plain;\r\n";}

// $mail_message .= "charset=gb2312\r\n\r\n";

$mail_message .= $message;

$mail_message .= "\r\n.\r\n";

//-----------------------------------------------------------

fputs($fp,$mail_message);

fputs($fp,"QUIT\r\n");

return 1;

}

}

?>

以上就是分享个发邮件API 便于不支持smtp的虚拟空间使用的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种用于开Windows应用程序的集成开环境(IDE)。它提供了强大的功能,可以方便地实现各种任务,包括送电子邮件。 在Delphi中,我们可以使用Indy组件库来送电子邮件。Indy是一个开的网络通信组件库,它提供了各种协议的支持,包括SMTP(Simple Mail Transfer Protocol)。 下面是一个示例代码,演示了如何使用Delphi送电子邮件: ```pascal procedure TForm1.Button1Click(Sender: TObject); var IdSMTP: TIdSMTP; IdMessage: TIdMessage; begin IdSMTP := TIdSMTP.Create(nil); IdMessage := TIdMessage.Create(nil); try IdSMTP.Host := 'smtp.example.com'; // 设置SMTP服务器地址 IdSMTP.Port := 25; // 设置SMTP服务器端口 IdMessage.Subject := '测试邮件'; // 设置邮件主题 IdMessage.Body.Text := '这是一封来自Delphi的测试邮件。'; // 设置邮件内容 IdMessage.Recipients.EmailAddresses := '[email protected]'; // 设置收件人邮箱 IdSMTP.Connect; // 连接SMTP服务器 try IdSMTP.Send(IdMessage); // 邮件 finally IdSMTP.Disconnect; // 断开连接 end; ShowMessage('邮件送成功!'); except on E: Exception do ShowMessage('邮件送失败:' + E.Message); end; IdMessage.Free; IdSMTP.Free; end; ``` 上述代码创建了一个TIdSMTPSMTP客户端)对象和一个TIdMessage(邮件)对象。我们设置了SMTP服务器的地址和端口,邮件的主题、内容以及收件人邮箱地址。然后,我们调用Connect方法连接到SMTP服务器,并使用Send方法邮件。最后,我们断开连接并释放对象。 注意,以上代码只是一个简单的示例,实际中可能需要进行一些额外配置,比如身份验证、SSL加密等。真实环境中,我们还需根据具体需求来设置其他参数和处理异常情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值