php简单的邮件系统

想了很久觉得应该写点什么,最后还是决定写个简单的邮件系统,网上有很多这样的例子,但是直接拿来后是用不了的,不得不自己动手做一个。

1、首先是写邮件的php处理文件 mail.inc.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;
	var $from;
	var $test="test";

    /* Private Variables */ 
    var $sock;

    /* Constractor */

    function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass,$from)
    {
        $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->from = $from;
        
        #

        $this->host_name = "localhost"; //is used in HELO command 
        $this->log_file = "";
        $this->sock = FALSE;
    }
    /* Main Function */

    function sendmail($to,$fromname="",$subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
    {
        $mail_from = $this->get_address($this->strip_comment($this->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";
        }
		if ($fromname!="") $header .= "From: ".$fromname."<".$this->from.">\r\n";
        if ($fromname=="") $header .= "From:<".$this->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";
		$utfheader=iconv("GBK","UTF-8//IGNORE",$header);
        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, $utfheader, $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;
        }
    }
}
?>
2、编写邮件的参数配置 mail.php:

<?php
include_once("mail.inc.php");
//发件人信箱信息
$smtp = new smtp("smtp.xxxxx.com,25,true,"服务器用户账号","服务器用户密码", "服务器用户邮箱");
//是否显示发送的调试信息 FALSE or TRUE
$smtp->debug = false;$mailto = "xxxx@xx.com";//收件人信箱$mailsubject = "邮箱标题";$mailfrom = $_POST["email"];$mailbody = "正文: ".$_POST["email"]";$mailbody = $mailbody.正文:".$_POST["content"]."<br>";// $mailbody = $mailbody."如图:".$_POST["img"]."<br>";//其他的表单项目以此类推$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件$mailsubject = '=?UTF-8?B?'.base64_encode($mailsubject).'?=';//邮件主题$mailfrom = '=?UTF-8?B?'.base64_encode($mailfrom).'?=';//发件人$smtp->sendmail($mailto, $mailfrom, $mailsubject, $mailbody, $mailtype);//echo "<script language=\"JavaScript\">alert(\"Send success.\");\"http://www.oceanx.cc/help/feedback.html\"</script>"; echo "<script language=\"JavaScript\">alert("发送成功");</script>"; exit();?>

3、接下来就是前端显示的表单了,这个很简单,直接使用html就行。下面是mail.html代码:

<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
	<title>简单邮件系统</title>
</head>
<body>
<form name="contactForm" method="post" action="mail.php" target="ifrm">
	标题:<input type="text" name="email" id="contact">
	内容:<textarea id="content" name="content" ></textarea>
	<input type="submit" name="submit" value="发送">
</form>
</body>
</html>

3、接下来就是前端显示的表单了,这个很简单,直接使用html就行。下面是mail.html代码:
可以根据自己的需要定制该邮件系统,如果需要更好的html显示,那么就自己好好设计一个页面,这样就可以变为自己喜欢的样子,不过有几个要点要注意。

1、mail.php中的$_POST["replease"]中的replease为form表单中要提交的数据的name,必须要对应,不能搞错。

2、如果要上传附件,需要修改mail.inc.php中的内容,将加载附件的模块添加进去。







  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP和MySQL是一对常常一起使用的技术,可以用来开发各种不同类型的应用程序,包括邮件系统邮件系统通常由两个主要部分组成:前端和后端。前端部分是用户界面,在这里用户可以编写和发送电子邮件,查看收件箱和其他邮件相关功能。后端部分是用来处理数据的服务器端应用程序,负责接收用户的邮件请求并将其存储到数据库中。 PHP是一种服务器端脚本语言,非常适合用于开发邮件系统的后端部分。它可以与MySQL数据库进行交互,将用户的邮件和相关信息存储在其中。通过使用PHP的各种函数和命令,我们可以在数据库中创建邮件表格,并实现用户的注册、登录、发送、接收和删除电子邮件等功能。 对于邮件系统的前端部分,我们可以使用HTML、CSS和JavaScript等前端技术来设计和构建用户界面。用户可以通过填写表单来编写和发送邮件,通过点击链接或按钮来查看收件箱和其他邮件操作。 邮件系统还需要实现与SMTP服务器的通信来发送和接收邮件。我们可以使用PHP的内置函数或第三方库来实现与SMTP服务器的通信,将用户编写邮件发送给收件人,并将收到的邮件存储到数据库中。 总之,使用PHP和MySQL开发邮件系统需要熟悉PHP语言和MySQL数据库的基本知识,并掌握与SMTP服务器通信的技术。只要合理设计和实现,我们就可以开发出功能强大且易于使用的邮件系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值