`

电子邮件开发

    博客分类:
  • PHP
阅读更多
<?php
//发送邮件的类
class Smtp
{

    /* Public Variables */
    var $smtp_port;
    var $time_out;
    var $host_name;
    var $log_file;
    var $relay_host;
    var $debug;
    var $auth;
    var $user;
    var $pass;
    /* Private Variables */
    var $sock;
    /* Constractor */

    function Smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
    {
        $this->debug = FALSE;
        $this->smtp_port = $smtp_port;
        $this->relay_host = $relay_host;
        $this->time_out = 30; //is used in fsockopen()
        
        #
        $this->auth = $auth;//auth
        $this->user = $user;
        $this->pass = $pass;
        
        #
        $this->host_name = "localhost"; //is used in HELO command
        $this->log_file = "";

        $this->sock = FALSE;
    }

    /* Main Function */

    function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
    {

        $mail_from = $this->get_address($this->strip_comment($from));
        $body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
        $header = "MIME-Version:1.0\r\n";
        if($mailtype=="HTML"){
            $header .= "Content-Type:text/html\r\n";
        }
        $header .= "To: ".$to."\r\n";
        if ($cc != "") {
            $header .= "Cc: ".$cc."\r\n";
        }
        $header .= "From: $from<".$from.">\r\n";
        $header .= "Subject: ".$subject."\r\n";
        $header .= $additional_headers;
        $header .= "Date: ".date("r")."\r\n";
        $header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";
        list($msec, $sec) = explode(" ", microtime());
        $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";
        $TO = explode(",", $this->strip_comment($to));
        if ($cc != "") {
            $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
        }

        if ($bcc != "") {
            $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
        }
        $sent = TRUE;
        foreach ($TO as $rcpt_to) {
            $rcpt_to = $this->get_address($rcpt_to);
            
            if (!$this->smtp_sockopen($rcpt_to)) {
                $this->log_write("Error: Cannot send email to ".$rcpt_to."\n");
                $sent = FALSE;
                continue;
            }
            if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
                $this->log_write("E-mail has been sent to <".$rcpt_to.">\n");
            } else {
                $this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");
                $sent = FALSE;
            }
            fclose($this->sock);
            $this->log_write("Disconnected from remote host\n");
        }
        return $sent;
    }
/* Private Functions */
   function smtp_send($helo, $from, $to, $header, $body = "")
    {
        if (!$this->smtp_putcmd("HELO", $helo)) {
            return $this->smtp_error("sending HELO command");
        }
        #auth
        if($this->auth){
            if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {
                return $this->smtp_error("sending HELO command");
            }
            if (!$this->smtp_putcmd("", base64_encode($this->pass))) {
                return $this->smtp_error("sending HELO command");
            }
        }
        #
        if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) {
            return $this->smtp_error("sending MAIL FROM command");
        }
        if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) {
            return $this->smtp_error("sending RCPT TO command");
        }
        if (!$this->smtp_putcmd("DATA")) {
            return $this->smtp_error("sending DATA command");
        }

        if (!$this->smtp_message($header, $body)) {

            return $this->smtp_error("sending message");

        }

        if (!$this->smtp_eom()) {

            return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");

        }

        if (!$this->smtp_putcmd("QUIT")) {

            return $this->smtp_error("sending QUIT command");

        }

        return TRUE;

    }

    function smtp_sockopen($address)

    {

        if ($this->relay_host == "") {

            return $this->smtp_sockopen_mx($address);

        } else {
            return $this->smtp_sockopen_relay();
        }
    }
    function smtp_sockopen_relay()
    {
        $this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");
        $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
        if (!($this->sock && $this->smtp_ok())) {
            $this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");
            $this->log_write("Error: ".$errstr." (".$errno.")\n");
            return FALSE;
        }
        $this->log_write("Connected to relay host ".$this->relay_host."\n");
        return TRUE;
    }
    function smtp_sockopen_mx($address)
    {
        $domain = ereg_replace("^.+@([^@]+)$", "\1", $address);
        if (!@getmxrr($domain, $MXHOSTS)) {
            $this->log_write("Error: Cannot resolve MX \"".$domain."\"\n");
            return FALSE;
        }
        foreach ($MXHOSTS as $host) {
            $this->log_write("Trying to ".$host.":".$this->smtp_port."\n");
           $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
            if (!($this->sock && $this->smtp_ok())) {
                $this->log_write("Warning: Cannot connect to mx host ".$host."\n");
                $this->log_write("Error: ".$errstr." (".$errno.")\n");
               continue;
            }
            $this->log_write("Connected to mx host ".$host."\n");
            return TRUE;
        }
        $this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");
       return FALSE;
    }
    function smtp_message($header, $body)
    {
      fputs($this->sock, $header."\r\n".$body);
        $this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));
        return TRUE;
    }
    function smtp_eom()
   {
        fputs($this->sock, "\r\n.\r\n");
        $this->smtp_debug(". [EOM]\n");
        return $this->smtp_ok();
    }
    function smtp_ok()
   {
        $response = str_replace("\r\n", "", fgets($this->sock, 512));
        $this->smtp_debug($response."\n");
        if (!ereg("^[23]", $response)) {
            fputs($this->sock, "QUIT\r\n");
            fgets($this->sock, 512);
            $this->log_write("Error: Remote host returned \"".$response."\"\n");
            return FALSE;
        }
        return TRUE;
    }
    function smtp_putcmd($cmd, $arg = "")
    {
        if ($arg != "") {
           if($cmd=="") $cmd = $arg;
            else $cmd = $cmd." ".$arg;
        }
        fputs($this->sock, $cmd."\r\n");
        $this->smtp_debug("> ".$cmd."\n");
        return $this->smtp_ok();
    }
    function smtp_error($string)
    {
        $this->log_write("Error: Error occurred while ".$string.".\n");
        return FALSE;
    }
    function log_write($message)
    {
        $this->smtp_debug($message);
        if ($this->log_file == "") {
                return TRUE;
        }
        $message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
        if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {
            $this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n");
            return FALSE;;
        }
        flock($fp, LOCK_EX);
        fputs($fp, $message);
        fclose($fp);
        return TRUE;
    }
    function strip_comment($address)
   {
        $comment = "\([^()]*\)";
       while (ereg($comment, $address)) {
            $address = ereg_replace($comment, "", $address);
        }
        return $address;
    }
    function get_address($address)
    {
        $address = ereg_replace("([ \t\r\n])+", "", $address);
        $address = ereg_replace("^.*<(.+)>.*$", "\1", $address);
        return $address;
    }
    function smtp_debug($message)
    {
        if ($this->debug) {
        echo $message;
        }
    }

function attachment($attachment = '', $attachment_filename = ''){
		if (!empty($attachment)) {
			$filename = empty($attachment_filename) ? basename($attachment) : $attachment_filename ;
			$path = dirname($attachment);
			
			$file = $path.'/'.$filename;
			$file_size = filesize($file);
			$handle = fopen($file, "r");
			$content = fread($handle, $file_size);
			fclose($handle);
			$content = chunk_split(base64_encode($content));
			$uid = md5(uniqid(time()));
			$name = basename($file);
			
			$header = "--".$uid."\r\n";
			$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use diff. tyoes here
			$header .= "Content-Transfer-Encoding: base64\r\n";
			$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
			$header .= $content."\r\n\r\n";
			$header .= "--".$uid."--";
			return $header;
		}else {
			return '';
		}
	}
}


//$smtpserver = "smtp.takoo.com.cn";//SMTP服务器
//$smtpserverport =25;//SMTP服务器端口
//$smtpusermail = "takoo@takoo.com.cn";//SMTP服务器的用户邮箱
//$smtpemailto = "648036889@qq.com";//发送给谁
//$smtpuser = "takoo@takoo.com.cn";//SMTP服务器的用户帐号
//$smtppass = "*****";//SMTP服务器的用户密码
//$mailsubject = "测试邮件主题";//邮件主题
//$mailbody = "<h1>测试邮件的内容</h1>";//邮件内容
//$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
//$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
//$smtp->debug = false;//是否显示发送的调试信息
//$attachment=$smtp->attachment(dirname(__FILE__).'/images/index1_01.gif');//附件
//echo $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype, $smtpusermail,$smtpusermail,$attachment);

?>
分享到:
评论

相关推荐

    电子邮件开发应用

    电子邮件开发应用是一个涵盖广泛的主题,它涉及到如何使用编程语言创建、发送、接收和管理电子邮件。在本文中,我们将深入探讨电子邮件开发的相关知识点,包括SMTP、POP3、IMAP协议、邮件编码、邮件验证以及常见的...

    PHP网络开发--电子邮件开发(源码).rar

    在PHP网络开发中,电子邮件开发是一项重要的技能,它允许开发者创建功能丰富的邮件系统,用于发送通知、确认订单、用户注册验证等。这个压缩包“PHP网络开发--电子邮件开发(源码).rar”包含了实现这一功能的相关源...

    电子邮件系统开发 电子邮件系统开发

    电子邮件系统开发是一个复杂而关键的过程,它涉及到网络通信、数据安全、用户界面设计等多个方面的技术。在本讨论中,我们将深入探讨电子邮件系统的核心组件、工作原理以及开发过程中的关键技术。 一、电子邮件系统...

    vuejs-email-renderer:Vue.js真是太棒了,所以让我们用它来构建HTML电子邮件并为HTML电子邮件开发带来一些乐趣

    描述Vue.js真是太棒了,所以让我们用它来构建HTML电子邮件并为HTML电子邮件开发带来一些乐趣。 创建HTML电子邮件意味着对通常不支持当今基本Web标准的基于桌面和基于Web的电子邮件客户端进行编码。 解决方案是像1999...

    Bojler是一个电子邮件模板和HTML代码编写指南

    Bojler是一个专门为电子邮件设计的模板框架,它旨在帮助开发者创建在各种电子邮件客户端...通过理解和使用"Slicejack-bojler-29b30ec"中的资源,你可以提升你的电子邮件开发技能,并为你的项目带来高质量的邮件设计。

    inker:不断发展的电子邮件开发和交付工作流程

    印加人-电子邮件开发和交易传递工作流程 基本 桌子大乱糟糟了。 Inker提供了创建健全的电子邮件模板并保持干净的代码库的所有机制。 文档 墨者为: 编码 建立在Zurb墨水之上 Sane CSS组件结构 具有Sane HTML组件...

    用于使用swig模板和使用boost的电子邮件友好内联CSS呈现电子邮件的Node.js模块。.zip

    接下来,内联CSS是电子邮件开发中一个重要的概念。由于大多数电子邮件客户端不支持外部样式表,为了确保邮件在各种客户端中的一致显示,需要将CSS样式写入HTML元素内部。这可以通过内联样式属性完成,或者使用工具将...

    Go-Hermes–Golang软件包可以生成干净响应式的HTML电子邮件

    ### 一、Golang在电子邮件开发中的优势 1. **性能**: Go语言以其高效和并发能力闻名,使得处理大量邮件发送任务变得轻松快速。 2. **简洁的语法**: Go的语法简洁明了,易于阅读和编写,降低了开发复杂性的门槛。 3....

    毕业设计,基于C#+Winform开发的电子邮件收发系统,内含完整源代码,数据库,毕业论文

    毕业设计,基于C#+Winform开发的电子邮件收发系统,内含完整源代码,数据库,毕业论文 电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大用户接受。早期的电子邮件只是从一个计算机终端向另外一个...

    framework:HTML电子邮件开发框架

    HTML电子邮件开发框架 关于 注意:此存储库包含Maizzle框架的核心代码。 如果您想使用Maizzle构建HTML电子邮件,请访问。 Maizzle是一个框架,可帮助您使用快速构建HTML电子邮件。 文献资料 有关Maizzle文档,请...

    Internet Email协议开发指南

    书中还包含了如何解决电子邮件问题的策略,如何评估标准和协议的不同实现,以及如何应对电子邮件开发中的挑战。作者通过清晰的解释和实例,帮助读者更好地理解和掌握相关知识。 对于开发者来说,本书不仅提供了协议...

    电子邮件系统UML设计

    UML(统一建模语言)是软件开发中的一个重要工具,用于系统分析和设计,特别是复杂系统如电子邮件系统的建模。本篇文章将深入探讨电子邮件系统UML设计的关键知识点。 首先,我们来看**用例图(Use Case Diagram)**...

    java开发的电子邮件Web客户端

    Java开发的电子邮件Web客户端是一种基于Java技术构建的网络应用程序,允许用户通过Web浏览器访问和管理他们的电子邮件。这种客户端通常利用SMTP(Simple Mail Transfer Protocol)和IMAP(Internet Message Access ...

    电子邮件发送.rar

    电子邮件发送在IT行业中是一项基础但至关重要的技术,尤其在企业通信和自动化流程中扮演着重要角色。本资源“电子邮件发送.rar”包含与ASP.NET相关的源码,提供了两种不同的方法来实现电子邮件的发送:SMTP(Simple ...

    简单电子邮件客户端

    项目还利用了JMail组件,这是一个专为.NET框架设计的电子邮件处理库,但在某些情况下也可用于其他开发环境,如本案例中的Visual C++。JMail提供了高级的电子邮件处理功能,包括SMTP(简单邮件传输协议)和POP3(邮局...

    与电子邮件有关的趣闻

    电子邮件,简称为E-MAIL,是互联网上最基础且广泛使用的通信工具之一。自其诞生以来,电子邮件已经深深地改变了人们的沟通方式,无论是在个人生活中还是商业领域,它都扮演着至关重要的角色。以下将深入探讨电子邮件...

Global site tag (gtag.js) - Google Analytics