`
student_lp
  • 浏览: 429717 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

php工具类之【邮件发送类】

阅读更多
class email {
	var $mail;
	var $recipient;
	var $title;
	var $content;
	var $sender;
	var $delimiter;
	var $header;
	var $charset;

	function __construct(&$mail) {
		$this->email($mail);
	}

	function email(&$mail) {
		$this->mail = $mail;
		$this->charset = CHARSET;
	}

	function send($recipient, $title, $content, $sender = '') {
		if($this->mail['silent']) {
			error_reporting(0);
		}

		$tousers = array();
		foreach(explode(',', $recipient) as $touser) {
			$tousers[] = preg_match('/^(.+?) \<(.+?)\>$/', $touser, $to) ? '=?'.$this->charset.'?B?'.base64_encode($to[1])."?= <$to[2]>" : $touser;
		}
		$this->recipient = implode(',', $tousers);

		$this->title = '=?'.$this->charset.'?B?'.base64_encode(str_replace(array("\r", "\n"), '', $title)).'?=';
		$this->content = chunk_split(base64_encode(str_replace(array("\n\r", "\r\n", "\r", "\n", "\r\n."), array("\r", "\n", "\n", "\r\n", " \r\n.."), $content)));

		$this->delimiter = $this->mail['delimiter'] == 1 ? "\r\n" :
			($this->mail['delimiter'] == 2 ? "\r" : "\n");
		$this->sender = preg_match('/^(.+?) \<(.+?)\>$/', $sender, $from) ? '=?'.$this->charset.'?B?'.base64_encode($from[1])."?= <$from[2]>" : $sender;

		$this->header = "From: $this->sender{$this->delimiter}".
			"X-Priority: 3{$this->delimiter}".
			"X-Mailer: Email{$this->delimiter}".
			"MIME-Version: 1.0{$this->delimiter}".
			"Content-type: text/plain; charset={$this->charset}{$this->delimiter}".
			"Content-Transfer-Encoding: base64{$this->delimiter}";
		$this->mail['port'] = $this->mail['port'] ? $this->mail['port'] : 25;
		if($this->mail['type'] == 1) {
			return $this->sendMail();
		} elseif($this->mail['type'] == 2) {
			return $this->socketSmtp();
		} elseif($this->mail['type'] == 3) {
			return $this->phpSmtp();
		}
	}

	function sendMail() {
		if(!function_exists('mail')) {
			return array('status' => 1, 'error' => 'SendMail\tFunction "mail()" NOT exists!');
		}
		if(@mail($this->recipient, $this->title, $this->content, $this->header)) {
			return array('status' => 0);
		} else {
			return array('status' => 2, 'error' => 'PHP Mail\tPHP sendmail error!');
		}
	}

	function socketSmtp() {
		$error = "({$this->mail[server]}:{$this->mail[port]})";
		if(!$fp = fsockopen($this->mail['server'], $this->mail['port'], $errno, $errstr, 30)) {
			return array('status' => 4, 'error' => "SMTP\t$error CONNECT - Unable to connect to the SMTP server");
		}
	 	stream_set_blocking($fp, true);

		$lastmessage = fgets($fp, 512);
		if(substr($lastmessage, 0, 3) != '220') {
			return array('status' => 5, 'error' => "SMTP\t$error CONNECT - $lastmessage");
		}

		fputs($fp, ($this->mail['auth'] ? 'EHLO' : 'HELO')." hello\r\n");
		$lastmessage = fgets($fp, 512);
		if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
			return array('status' => 6, 'error' => "SMTP\t$error HELO/EHLO - $lastmessage");
		}

		while(1) {
			if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
	 			break;
	 		}
	 		$lastmessage = fgets($fp, 512);
		}

		if($this->mail['auth']) {
			fputs($fp, "AUTH LOGIN\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 334) {
				return array('status' => 7, 'error' => "SMTP\t$error AUTH LOGIN - $lastmessage");
			}

			fputs($fp, base64_encode($this->mail['auth_username'])."\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 334) {
				return array('status' => 8, 'error' => "SMTP\t$error USERNAME - $lastmessage");
			}

			fputs($fp, base64_encode($this->mail['auth_password'])."\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 235) {
				return array('status' => 9, 'error' => "SMTP\t$error PASSWORD - $lastmessage");
			}

			$this->sender = $this->mail['auth_from'];
		}

		fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $this->sender).">\r\n");
		$lastmessage = fgets($fp, 512);
		if(substr($lastmessage, 0, 3) != 250) {
			fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $this->sender).">\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 250) {
				return array('status' => 10, 'error' => "SMTP\t$error MAIL FROM - $lastmessage");
			}
		}

		foreach(explode(',', $this->recipient) as $touser) {
			$touser = trim($touser);
			if($touser) {
				fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n");
				$lastmessage = fgets($fp, 512);
				if(substr($lastmessage, 0, 3) != 250) {
					fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n");
					$lastmessage = fgets($fp, 512);
					return array('status' => 11, 'error' => "SMTP\t$error RCPT TO - $lastmessage");
				}
			}
		}

		fputs($fp, "DATA\r\n");
		$lastmessage = fgets($fp, 512);
		if(substr($lastmessage, 0, 3) != 354) {
			return array('status' => 12, 'error' => "SMTP\t$error DATA - $lastmessage");
		}

		$this->header .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($this->content.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$this->delimiter}";

		fputs($fp, "Date: ".gmdate('r')."\r\n");
		fputs($fp, "To: ".$this->recipient."\r\n");
		fputs($fp, "Subject: ".$this->title."\r\n");
		fputs($fp, $this->header."\r\n");
		fputs($fp, "\r\n\r\n");
		fputs($fp, "$this->content\r\n.\r\n");
		$lastmessage = fgets($fp, 512);
		if(substr($lastmessage, 0, 3) != 250) {
			return array('status' => 13, 'error' => "SMTP\t$error END - $lastmessage");
		}

		fputs($fp, "QUIT\r\n");
		return array('status' => 0);
	}

	function phpSmtp() {
		if(!function_exists('mail')) {
			return array('status' => 1, 'error' => 'SendMail\tFunction "mail()" NOT exists!');
		}
		ini_set('SMTP', $this->mail['server']);
		ini_set('smtp_port', $this->mail['port']);
		ini_set('sendmail_from', $this->sender);

		if(@mail($this->recipient, $this->title, $this->content, $this->header)) {
			return array('status' => 0);
		} else {
			return array('status' => 3, 'error' => 'PHP SMTP\tPHP smtp mail error!');
		}
	}
}

 

分享到:
评论

相关推荐

    php发送电子邮件工具类

    class.phpmailer.php和class.smtp.php

    PHP邮件发送类

    NULL 博文链接:https://hudeyong926.iteye.com/blog/693380

    php monitor 发送邮件

    NULL 博文链接:https://zl-go.iteye.com/blog/1893866

    阿里云OSS存储、支付宝即时到账接口、Redis缓存、PHPmailer批量发送邮件、 ECharts图表库、PDO预处理

    主要有视频播放器插件、阿里云OSS存储、支付宝即时到账接口、Redis缓存、PHPmailer批量发送邮件、Monolog 日志工具、ECharts图表库、PDO预处理、PHP-FFmpeg、WebSocket、无限级分类

    SMTP4PHP:PHP功能强大的工具,可快速轻松地发送电子邮件-开源

    SMTP4PHP是PHP类的集合,专用于快速,轻松地编写和发送多部分/混合的电子邮件消息,带有或不带有嵌入式图像和/或附件。

    PHP动态网页设计与制作案例教程

    本书展示一个完整网站的设计和实现过程,详细地介绍动态网页设计和制作的技术和相关...8.3.3 PHP发送电子邮件的方式 8.4 正则表达式 8.4.1 正则表达式简介 8.4.2 常用表单项验证 8.4.3 正则表达式的法则 参考文献

    八年PHP文件管理器 v2.6.2 免费版.rar

    mp3 歌曲名称 调整了图片 增加了文件编码识别 支持直接编辑 UTF8 文件 支持新建UTF8 文件 直接显示 图片大小 细节调整 BUG 修复了一些 //2.5更新----- 修正了文件 大小计算 调整了 探针 增加了 电子邮件发送功能 ...

    PHP入门到精通

    21.3应用PHP发送和接收电子邮件 PHP与XML技术(教学录像:31分17秒) 22.1XML的概述 22.2XML语法 22.3在PHP中创建XML文档 22.4SimpleXML 22.5动态创建XML文档 PHP与LDAP技术(教学录像:25分27秒) 23.1LDAP简介 ...

    PHP入门到精通02

    21.3应用PHP发送和接收电子邮件 PHP与XML技术(教学录像:31分17秒) 22.1XML的概述 22.2XML语法 22.3在PHP中创建XML文档 22.4SimpleXML 22.5动态创建XML文档 PHP与LDAP技术(教学录像:25分27秒) 23.1LDAP简介 ...

    email-bundle:Symfony Bundle可自动创建并向用户发送电子邮件(有关Web应用或新闻通讯或任何其他定制内容的事件的通知)

    Azine电子邮件捆绑 ...与诸如mailgun.com之类的事务电子邮件服务配合使用非常好。 目录 使您的电子邮件在网络视图和网络预览中可用 配置网络视图和网络预览 实现WebViewServiceInterface 更新你的数据库

    php网络开发完全手册

    1.6 几种开发工具的介绍 20 1.6.1 Vi及Vim 20 1.6.2 Eclipse+PHPEclipse插件 21 1.6.3 UltraEdit 21 1.6.4 EditPlus 22 1.6.5 支持PHP的IDE环境 22 1.7 小结 23 第2章 PHP的基础语法 24 2.1 语言构成与工作原理 24 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。 PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用...

    OurPHP 傲派企业级 电商免费开源建站系统 v1.8.5 bulid20190331.zip

    站内邮件 = 强大的站内邮件,会员与会员之间可发送站内邮件聊天沟通 在线充值 = 支持支付宝,微信,网银等在线充值 广告管理 = 多功能型广告系统,支持右下角广告,对联广告,浮窗广告等 友链链接 = 支持文字型和...

    PHP开源类广告系统源码openx2.4.6

    包含有中文语言包,可自行处理. OpenX是一个采用PHP开发的横幅广告管理与跟踪系统,适合中大型网站...当前它能够管理每个广告主拥有的多种任何尺寸横幅广告,按天查看,详细和概要统计并通过电子邮件发送报表给广告主。

    AirPHP轻型开源框架 兼容SAE平台 v1.1 beta

    集成了 采集类 分页类 RBAC类 插件类 数据库备份类 安装类 PHP发送邮件类 等等....举个简单例子比如模板操作 加载Jquery只需要一句 LoadGoogleJquery就可以在线载入...引入css/js/images 只需要__AIR__后面跟上css/...

    简历制作工具,生成简历

    邮件发送使用的phpmailer类,很不错的一个邮件发送类。 欢迎一切非人生攻击的谩骂和指责,不过最好是建议啦,哈哈。 有很多地方需要慢慢完善,事情太多,时间不够... 6、联系我,Come on.. 我爱好交朋友,渴望向大家...

    php OA 源码 办公自动化源码

    电子邮件:建立自己的邮件中心,方便的给同事或客户发送电子邮件,消除传统信函效率低,成本高的弊端。支持群发。 手机短信:可以方便的给同事、朋友、客户等发短信,即使员工不在单位也可以保持时时沟通,并建立...

    phpmsh:PHP 语法荧光笔 PHP、Pascal、SQL、VB 源代码

    PHP 多语法荧光笔 phpMSH 是一种语法高亮工具,可以“美化”PHP... 如果您愿意,请将带有示例的关键字和字符串规则列表发送给我,然后通过电子邮件发送给我。 我将创建一个新类来支持您喜欢的语言并将它们添加到包中。

    网钛PHP商城系统 v1.0.rar

     16、邮件功能 支持邮件设置,自动发送邮件,邮件群发等17、图形并茂的统计工具 网钛商城系统内置了多种数字图形统计工具(饼状图、柱状图、折线图),为您的商城经营提供准确的数据依据,并集成了CNZZ站长统计等...

Global site tag (gtag.js) - Google Analytics