`
student_lp
  • 浏览: 438020 次
  • 性别: 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邮件发送类

    当我们需要在PHP应用中实现邮件发送功能时,通常会利用PHP的内置函数或者专门的邮件发送类。在这个主题中,我们将深入探讨"PHP邮件发送类"的相关知识点,包括其工作原理、常见库的使用以及如何自定义此类。 首先,...

    php 邮件发送类

    "php 邮件发送类"是一个专门用于通过PHP发送邮件的工具,它可以简化邮件发送过程,使得开发者能够方便地与163和QQ等常见邮箱服务提供商进行通信。在这个场景中,我们使用的类库很可能是PHPMailer,一个广泛使用的...

    php发送电子邮件工具类

    `class.phpmailer.php`是PHPMailer的核心类文件,它包含了处理邮件发送的所有功能。这个类提供了丰富的选项来配置邮件,如设置发件人、收件人、抄送人、密送人、主题、邮件正文、附件等。此外,它还支持HTML格式的...

    PHP邮件发送类.zip

    综上所述,这个"PHP邮件发送类"是一个强大且灵活的工具,可以帮助开发者高效地处理电子邮件的发送需求。通过理解和应用这些知识点,你可以轻松地构建自己的邮件系统,提高工作效率,同时提供更好的用户体验。

    php好用的邮件发送类

    PHP提供了多种方法来实现这个功能,其中一种是通过使用邮件发送类。本篇文章将详细探讨如何使用PHP进行邮件发送,特别是那些带有附件的邮件。 首先,我们需要了解PHP内置的`mail()`函数。这是一个简单的邮件发送...

    PHP 发送邮件类,含实例(客发送附件)

    我们将基于PHP的`PHPMailer`库进行讨论,这是一个强大且广泛使用的邮件发送类。 `PHPMailer`是一个开源的PHP类库,它提供了丰富的功能,包括SMTP验证、HTML邮件、附件支持以及多种错误处理。使用`PHPMailer`可以...

    完整版php邮件发送类.zip

    总的来说,这个“完整版php邮件发送类”是一个强大的工具,能够满足多种邮件发送需求,无论是简单的日常通信还是复杂的商业应用。它通过封装和简化邮件发送的过程,使开发者能够专注于代码的其他逻辑,而无需担心...

    php发送邮件,php发送邮件插件

    PHPMailer是一个强大的邮件发送库,它支持SMTP验证,可以发送HTML邮件,甚至可以添加附件,极大地增强了PHP处理邮件的能力。 描述中提到“利用PHPMailer批量发送附件内容”,这意味着我们可以利用PHPMailer的功能,...

    php发邮件类smtp发邮件发送文本发送附件和图片全部代码

    在PHP开发中,有时我们需要通过程序来发送电子邮件,例如通知用户、发送验证码或者分享文件等。`PHPMailer`是一个广泛使用的...这个`send_mail`文件可以作为一个实用工具,帮助你在项目中轻松地处理邮件发送的需求。

    PHP文件上传和邮件发送的类

    总结,`PHP文件上传和邮件发送的类`是一个实用的工具,它简化了开发过程中与文件上传和邮件发送相关的复杂操作,让开发者能更专注于业务逻辑,提高开发效率。同时,它还提供了更好的用户体验,如支持HTML邮件和无需...

    phpemail邮件发送demo

    总的来说,"phpemail邮件发送demo"是一个实用的工具,它涵盖了PHP邮件发送的各个方面,通过学习和实践,你可以掌握使用PHP进行邮件发送的技巧,从而提升你的开发技能。记得在使用时,根据你的具体需求和邮件服务提供...

    php邮件发送类

    PHP邮件发送类就是一种工具,它封装了邮件发送的相关逻辑,使得开发者能够更方便地进行邮件通信。本文将详细讲解PHP邮件发送类及其工作原理。 首先,我们需要了解PHP的mail()函数,这是PHP内置的用于发送邮件的函数...

    非常好用的php发送邮件类

    "非常好用的php发送邮件类" 提供了一种高效、简便的方式来实现PHP中的邮件发送。 这个邮件类很可能基于PHPMailer,这是一个开源且流行的PHP邮件处理库。PHPMailer提供了丰富的功能,包括SMTP验证、HTML邮件、附件...

    PHP5.0邮件发送类

    **PHP5.0邮件发送类**是用于在PHP5.0环境下实现邮件发送和接收功能的一个类库。这个类库通常基于PHPMailer,一个广泛使用的开源邮件处理工具,其版本为**phpMailer_v2.1.0beta2**。通过使用PHPMailer,开发者可以...

    php monitor 发送邮件

    在IT行业中,PHP是一种广泛使用的服务器端脚本语言,尤其在构建动态网站和Web应用程序时。...通常,这样的工具可能会提供邮件发送统计、错误报告、日志查看等功能,帮助开发者管理和优化邮件发送流程。

    php邮件发送测试类

    2. **创建PHPMailer类**:在项目中创建一个名为`MailSender.php`的文件,导入PHPMailer并创建一个类来封装邮件发送的逻辑。 ```php require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use ...

    php发送邮件源代码

    总的来说,PHPMailer_v5.1是一个强大且灵活的邮件发送工具,它提供了丰富的功能,帮助开发者轻松地处理PHP的邮件发送任务。只需根据自己的需求配置参数,就可以实现各种复杂的邮件发送需求。记得在使用过程中,根据...

    php实现一个发送邮件类 gmail邮箱

    接下来,创建一个名为`GmailMailer.php`的PHP类,该类将封装邮件发送的逻辑: ```php class GmailMailer { private $mail; public function __construct($fromEmail, $fromName, $gmailUsername, $gmailPassword...

    邮件发送类PHPMailer

    PHPMailer支持多种邮件发送协议,包括SMTP、SENDMAIL和PHP's mail()函数,因此你可以根据服务器配置选择最适合的发送方式。 PHPMailer的核心特性包括: 1. **SMTP验证**:支持SMTP身份验证,可以使用用户名和密码...

Global site tag (gtag.js) - Google Analytics