2015-07-17 06:30:04

阅读( 139 )

《php使用smtp,pop3协议收发邮件代码》

if ($EMAIL_INC) return;

$EMAIL_INC= "defined";

define( "SmtpPort",25);

class Pop3 {

var $subject; // 邮件主题

var $from_email; // 发件人地址

var $from_name; // 发件人姓名

var $to_email; // 收件人地址

var $to_name; // 收件人姓名

var $body; // 邮件内容

var $filename; // 文件名

var $socket; // 当前的 socket

var $Line;

var $Status;

function pop3_open($server, $port)

{

$this->Socket = fsockopen($server, $port);

if ($this->Socket <= 0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return false;

return true;

}

function pop3_user($user)

{

if ($this->Socket < 0){

return false;

}

fputs($this->Socket, "USER $this->user\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return false;

return true;

}

function pop3_pass( $pass)

{

fputs($this->Socket, "PASS $pass\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return 0;

return 1;

}

function pop3_stat()

{

fputs($this->Socket, "STAT\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return 0;

if (!eregi( "+OK (.*) (.*)", $this->Line, $regs))

return 0;

return $regs[1];

}

function pop3_list()

{

fputs($this->Socket, "LIST\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return 0;

$i = 0;

while (substr($this->Line = fgets($this->Socket, 1024), 0, 1) <> ".")

{

$articles[$i] = $this->Line;

$i++;

}

$articles[ "count"] = $i;

return $articles;

}

function pop3_retr($nr)

{

fputs($this->Socket, "RETR $nr\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return 0;

while (substr($this->Line = fgets($this->Socket, 1024), 0, 1) <> ".")

{

$data[$i] = $this->Line;

$i++;

}

$data[ "count"] = $i;

return $data;

}

function pop3_dele( $nr)

{

fputs($this->Socket, "DELE $nr\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return 0;

return 1;

}

function pop3_quit()

{

fputs($this->Socket, "QUIT\r\n");

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "+") return 0;

return 1;

}

}

class Smtp {

var $Subject; // string the email's subject

var $FromName; // string sender's name (opt)

var $ToName; // string recipient's name (opt)

var $Body; // string body copy

var $Attachment; // attachment (optional)

var $AttachmentType;

var $Socket;

var $Line;

var $Status;

function Smtp($Server = "localhost",$Port = SmtpPort)

{

return $this->Open($Server, $Port);

}

function SmtpMail($FromEmail, $FromName, $ToEmail, $ToName, $Subject, $Body, $Attachment=null, $AttachmentType= "TEXT")

{

$this->Subject = $Subject;

$this->ToName = $ToName;

$this->FromName = $FromName;

$this->Body = $Body;

$this->Attachment = $Attachment;

$this->AttachmentType = $AttachmentType;

if ($this->Helo() == false){

return false;

}

if ($this->MailFrom($FromEmail) == false){

return false;

}

if ($this->RcptTo($ToEmail) == false){

return false;

}

if ($this->Body() == false){

return false;

}

if ($this->Quit() == false){

return false;

}

}

function Open($Server, $Port)

{

$this->Socket = fsockopen($Server, $Port);

if ($this->Socket < 0) return false;

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "2") return false;

return true;

}

function Helo()

{

if (fputs($this->Socket, "helo\r\n") < 0 ){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "2") return false;

return true;

}

function Ehlo()

{

/* Well, let's use "helo" for now.. Until we need the

extra func's [Unk]

*/

if(fputs($this->Socket, "helo localhost\r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "2") return false;

return true;

}

function MailFrom($FromEmail)

{

if (fputs($this->Socket, "MAIL FROM: \r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "2") return false;

return true;

}

function RcptTo($ToEmail)

{

if(fputs($this->Socket, "RCPT TO: \r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "2") return false;

return true;

}

function Body()

{

$FileSize = 0;

$Attachment = null;

$fp = null;

$buffer = sprintf( "From: %s\r\nTo:%s\r\nSubject:%s\r\n", $this->FromName, $this->ToName, $this->Subject);

if(fputs($this->Socket, "DATA\r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "3") return false;

if(fputs($this->Socket, $buffer)<0){

return false;

}

if ($this->Attachment == null){

if(fputs($this->Socket, "MIME-Version: 1.0\r\nContent-Type: text/plain; charset=ISO-8859-1\r\nContent-Transfer-Encoding: 7bit\r\n\r\n")<0){

return false;

}

if(fputs($this->Socket, "$this->Body\r\n\r\n")<0){

return false;

}

if(fputs($this->Socket, ".\r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

if (substr($this->Line, 0, 1) <> "2"){

return false;

}else{

return true;

}

}else{

if(fputs($this->Socket, "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"----=_NextPart_000_01BCFA61.A3697360\"\r\n".

"Content-Transfer-Encoding: 7bit\r\n\r\n".

"This is a multi-part message in MIME format.\r\n".

"\r\n------=_NextPart_000_01BCFA61.A3697360\r\n".

"Content-Type: text/plain; charset=ISO-8859-1\r\n".

"Content-Transfer-Encoding: 7bit\r\n".

"\r\n")<0){

return false;

}

/* 输出邮件内容 */

if(fputs($this->Socket, "$this->Body\r\n\r\n")<0){

return false;

}

if ( fputs($this->Socket, "\r\n------=_NextPart_000_01BCFA61.A3697360\r\n")<0){

return false;

}

$FileSize = filesize($this->Attachment);

if ($FileSize == false){

return false;

}

if (($fp = fopen($this->Attachment, "r"))== false) {

return false;

}else{

$Attachment = fread($fp,$FileSize);

}

// 如果没有附件的目录

if (($AttachName = strrchr($this->Attachment, '/')) == false){

$AttachName = $this->Attachment;

}

if( fputs($this->Socket,

"Content-Type: application/octet-stream; \r\nname=\"$AttachName\"\r\n".

"Content-Transfer-Encoding: quoted-printable\r\n".

"Content-Description: $AttachName\r\n".

"Content-Disposition: attachment; \r\n\tfilename=\"$AttachName\"\r\n".

"\r\n")<0){

return false;

}

/* 输出附件*/

if( fputs($this->Socket, $Attachment)<0){

return false;

}

if ( fputs($this->Socket, "\r\n\r\n------=_NextPart_000_01BCFA61.A3697360--\r\n")<0){

return false;

}

if( fputs($this->Socket, ".\r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

if (substr($this->Line, 0, 1) <> "2")

return false;

return true;

}

}

function Quit()

{

if(fputs($this->Socket, "QUIT\r\n")<0){

return false;

}

$this->Line = fgets($this->Socket, 1024);

$this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);

$this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);

if ($this->Status[ "LASTRESULT"] <> "2") return 0;

return 1;

}

function Close()

{

fclose($this->Socket);

}

}

/*

怎样使用这个程序的一个示例

$MailTo = new Smtp();

$MailTo->SmtpMail("Dave@micro-automation.net","Dave Cramer",

"Dave@micro-automation.net","David",

"Test Mail",$MailMessage,"service.tab",0);

$MailTo->Close();

$MailTo=null;

*/

/*

$pop3 = pop3_open("localhost", "110");

if (!$pop3) {

printf("[ERROR] Failed to connect to localhost
\n");

return 0;

}

if (!pop3_user($pop3, "unk")) {

printf("[ERROR] Username failed!
\n");

return 0;

}

if (!pop3_pass($pop3, "secret")) {

printf("[ERROR] PASS failed!
\n");

return 0;

}

$articles = pop3_list($pop3);

if (!$articles) {

printf("[ERROR] LIST failed!
\n");

return 0;

}

for ($i = 1; $i < $articles ["count"] + 1; $i++)

{

printf("i=$i
\n");

$data = pop3_retr($pop3,$i);

if (!$data) {

printf("data goes wrong on '$i'
\n");

return 0;

}

for ($j = 0; $j < $data["count"]; $j++)

{

printf("$data[$j]
\n");

}

}

*/

?>

分享给朋友:

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息:

面试题

php pop3,php使用smtp,pop3协议收发邮件代码相关推荐

  1. exchange无法收发邮件_Python使用POP3和SMTP协议收发邮件!

    先来了解一下收/发邮件有哪些协议: SMTP协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议.相当于中转站,将邮件发送到客户端. POP3协议 POP3 ...

  2. python pop3_Python使用POP3和SMTP协议收发邮件的示例代码

    先来了解一下收/发邮件有哪些协议: SMTP协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议.相当于中转站,将邮件发送到客户端. POP3协议 POP3 ...

  3. 在telnet登录并使用SMTP和POP收发邮件(QQ邮箱)

    目录 一.什么是POP3.SMTP和IMAP? 二.使用SMTP协议手工发送邮件 1.开启QQ邮箱的SMTP服务 2.开启TELNET客户端 3.使用SMTP协议手工发送邮件 三.POP查看邮件 四. ...

  4. telnet登录并使用SMTP和POP收发邮件(QQ邮箱)

    目录 一.POP3.SMTP和IMAP协议原理 1.POP协议 2.SMTP协议 3.IMAP协议 4.POP3与IMP3的差异 二.开启QQ邮箱的SMTP服务 1.登陆QQ邮箱 2.找到" ...

  5. Exchange2007使用POP3/SMTP协议收发邮件

    一.首先准备两台虚拟机 1.Windows2008(Exchange2007.DNS.DC.IP:192.168.6.1) 2.WindowsXP(客户机.IP:192.168.6.2) 二.在EXC ...

  6. telnet登录SMTP和pop收发邮件(QQ邮箱)

    一路生花 一.开启SMTP和POP服务 二.SMTP发送邮件 三.POP查看邮件 四.总结 五.参考 一.开启SMTP和POP服务 进入QQ邮箱网页版,设置->账户,往下翻找到图片所示内容,打开 ...

  7. java smtp.126.com_Java Mail---SMTP、POP3协议-DOS下手动收发邮件演示过程

    转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自 E-Mail协议简介: 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器. 发送 ...

  8. 2.架设邮件服务器-windows 2003 POP3服务,SMTP服务收发邮件

    1.默认安装的系统是没有安装POP3组件,SMTP组件,搞个盘过来,或从网上下载一个i386(下载地址:http://down.spdns.com/i386.rar ). (1)从"控制面板 ...

  9. 域名系统DNS、文件传送协议FTP、动态主机配置协议DHCP、远程登录协议TELNET、电子邮件协议(SMTP/POP3/IMAP)、常用端口

    1.DNS域名系统 Domain Name System DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务. 这里的分布式数据库是指,每个站点只保留它自己的那部分数据. 域名具 ...

  10. 电子邮件协议---SMTP,POP3,IMAP,MIME

    在应用层的另外一个典型的应用例子就是电子邮件 电子邮件的传送和通过浏览器访问其他主机的文件有不同之处,电子邮件的形式更多像我们日常生活中的邮箱. 电子邮件的概述: 在用户写好电子邮件之后,电子邮件首先 ...

最新文章

  1. Asp.Net MVC4下设置W3P3(IIS)调试步骤
  2. 【转:SAP学习篇】Fiori 的开发工具
  3. 我的GitHub 欢迎光临
  4. sql 2012先分离迁移mdf mlf 文件到别的机器后附加 数据库成只读的修复方法
  5. Elasticsearchan相关插件和工具安装
  6. 包r语言_R语言入门之寻找你的R包
  7. Java解决找不到主类或者无法加载主类
  8. Vue的三个点es6知识,扩展运算符表达含义
  9. Nero 9 Lite
  10. 固定资产管理有关的计算机知识,固定资产管理相关知识问答梳理(无形资产篇)...
  11. c语言表达ch是大写英文字母,如何用C语言输出26个英文字母和其ascii码的对照表...
  12. C++数论库:NTL
  13. 求几道C++题,不用排版,代码尽量简单,方便理解
  14. Charles的使用——打断点
  15. MATLAB中字符串数组的文件输出
  16. 计算机主板的海关编码,请问线路板上已经含有电子元件的海关编码是多少?急啊!!...
  17. [FZSZOJ 1223] 上海红茶馆
  18. “黑客”通过2B铅笔注入阅卷系统
  19. 2020IT行业最新HR人事面试题
  20. Java 热更新 加载class和jar

热门文章

  1. jquery-pager的使用
  2. 处理收到的Stanzas
  3. 学习日记day 10 : JavaScript秋风扫落叶第一期
  4. POJ 2054 Color a Tree#贪心(难,好题)
  5. C#一个FTP操作封装类FTPHelper
  6. 使用 Anthem.NET 的常见回调(Callback)处理方式小结
  7. 美团到店综合知识图谱的构建与应用
  8. 顶会 Best paper award 获得者分享发顶会技巧
  9. 北京大学联合复旦大学发布中文空间语义理解评测SpaCE2021
  10. 聊聊我的 ACL2020 论文