资源马克-20161124- php smtp 带附件的邮件发送

来源:互联网 发布:21天学通c语言电子版 编辑:程序博客网 时间:2024/04/30 13:48

Problem & Solution

Mark 一个完美的带附件发送的 php smtp 邮件发送代码!

参考

php smtp 邮件发送

<?php//define("SOL", "\n");define("EOL", "\r\n");define("SMTP_HOST", "smtp.163.com");//SMTP服务器define("SMTP_PORT", "25");//SMTP服务器端口define("SMTP_USER", "");//SMTP服务器的用户帐号define("SMTP_PASS", "");//SMTP服务器的用户密码$from = "";//SMTP服务器的用户邮箱$to = "";//发送给谁 可用逗号隔开多个邮箱$cc = "";$bcc = "";$subject="这是一个由PHP发送的带附件的邮件";//邮件主题 很多客户端会有乱码,所以转一下码$body = "这个是一个带附件的邮件发送程序<hr>看到没,这里显示了HTM标签哦;<a href='http://www.google.com/'>请点开链接</a><input type='button' id='aaa' name=\"aaa\"> ".date('Y-m-d H:i:s');//邮件内容$smtp = new smtp(SMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS, true);//这里面的一个true是表示使用身份验证,否则不使用身份验证.$smtp->addAttachment("mail.zip");$smtp->sendmail($to, $from, $subject, $body, $cc, $bcc);class smtp {    /* Public Variables */    public $attachments = array();    /* Private Variables */    private $smtp_host;    private $smtp_port;    private $time_out;    private $host_name;    private $auth;    private $user;    private $pass;    private $sock;    /* Constractor */    public function smtp($smtp_host = null, $smtp_port = null, $user = null, $pass = null, $auth = true) {        $this->smtp_host = (!empty($smtp_host)) ? $smtp_host : SMTP_HOST;        $this->smtp_port = (!empty($smtp_port)) ? $smtp_port : SMTP_PORT;        $this->user = (!empty($user)) ? $user : SMTP_PORT;        $this->pass = (!empty($pass)) ? $pass : SMTP_PORT;        $this->auth = $auth;        $this->time_out = 15;        #        $this->host_name = "localhost";        $this->sock = FALSE;    }    /* Main Function */    public function sendmail($to, $from, $subject = "", $body = "", $cc = "", $bcc = "") {        $bndp = md5(uniqid("")) . rand(1000, 9999);        $bnd  = md5(uniqid("")) . rand(1000, 9999);        list ($msec, $sec) = explode(" ", microtime());        $mail_from = $this->strip_line_breaks($from);        $mail_to = explode(",", $to);        $body = preg_replace("/(^|(\r\n))(\\.)/", "", $body);        if ($cc != "") $mail_to = array_merge($mail_to, explode(",", $cc));        if ($bcc != "") $mail_to = array_merge($mail_to, explode(",", $bcc));        $headers  = "MIME-Version:1.0" . EOL;        $headers .= "To: " . $to . EOL;        if ($cc != "") {        $headers .= "Cc: " . $cc . EOL;        }        $headers .= "From: $from<" . $from . ">" . EOL;        $headers .= "Subject: " . $subject . EOL;        $headers .= "Date: " . date("r") . EOL;        $headers .= "X-Mailer: Webmail ver 1.0 (PHP Version/" . phpversion() . ")" . EOL;        $headers .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec * 1000000) . "." . $from . ">" . EOL;        if (count($this->attachments) > 0) {            $headers .= "Content-Type: multipart/mixed;" . EOL . chr(9) . " boundary=\"" . $bndp . "\"" . EOL . EOL;            $headers .= '--'.$bndp . EOL;            $headers .= 'Content-Type : multipart/alternative; boundary="' . $bnd . '"' . EOL . EOL;            $headers .= '--' . $bnd . EOL;            $headers .= 'Content-Type: text/plain; charset=utf-8' . EOL;            $headers .= "Content-Transfer-Encoding: 8bit" . EOL . EOL;            $headers .= $body . EOL;            $headers .= '--' . $bnd . EOL;            $headers .= 'Content-type: text/html; charset=utf-8' . EOL;            $headers .= "Content-Transfer-Encoding: 8bit" . EOL . EOL;            $headers .= $body . EOL;            $headers .= '--' . $bnd . '--' . EOL;            foreach ($this->attachments as $att) {                $headers .= "--" . $bndp . EOL . $att;            }            $headers .= '--' . $bndp . '--' . EOL;            $this->clear_attachments();        } else {            $headers .= 'Content-Type : multipart/alternative;boundary="'.$bnd.'"' . EOL . EOL;            $headers .= '--'.$bnd . EOL;            $headers .= 'Content-Type: text/plain; charset=utf-8' . EOL;            $headers .= "Content-Transfer-Encoding: 8bit" . EOL . EOL;            $headers .= $body . EOL;            $headers .= '--'.$bnd . EOL;            $headers .= 'Content-type: text/html; charset=utf-8' . EOL;            $headers .= "Content-Transfer-Encoding: 8bit" . EOL . EOL;            $headers .= $body . EOL;            $headers .= '--'.$bnd.'--' . EOL;        }        $sent = TRUE;        foreach ($mail_to as $rcpt_to) {            $rcpt_to = $this->strip_line_breaks($rcpt_to);            if (!$this->smtp_sockopen($rcpt_to)) {                $this->log_write("Error: Cannot send email to " . $rcpt_to);                $sent = FALSE;                continue;            }            if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $headers, $body)) {                $this->log_write("E-mail has been sent to <" . $rcpt_to . ">");            } else {                $this->log_write("Error: Cannot send email to <" . $rcpt_to . ">");                $sent = FALSE;            }            fclose($this->sock);        }        $this->log_write("{$mail_to} send over;");        return $sent;    }    public function addAttachment($file, $dispo = "attachment") {        $file_data = (file_exists($file)) ? file_get_contents($file) : "";        if ($file_data != "") {            $filename = basename($file);            $ext = pathinfo($filename, PATHINFO_EXTENSION);            $chunks = chunk_split(base64_encode($file_data));            $parts  = "Content-Type: application/$ext; name=\"" . $filename . "\"" . EOL;            $parts .= "Content-Transfer-Encoding: base64" . EOL;            $parts .= "Content-Disposition: " . $dispo . "; filename=\"" . $filename . "\"" . EOL . EOL;            $parts .= $chunks . EOL . EOL;            $this->attachments[] = $parts;        }    }    private function clear_attachments() {        unset($this->attachments);        $this->attachments = array();    }    /* Private Functions */    private function smtp_send($helo, $from, $to, $header, $body = "") {        if (!$this->smtp_putcmd("HELO", $helo)) {            //$this->log_write("Error: Error occurred while sending HELO command.");            return FALSE;        }        #auth        if ($this->auth) {            if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {                //$this->log_write("Error: Error occurred while sending HELO command.");                return FALSE;            }            if (!$this->smtp_putcmd("", base64_encode($this->pass))) {                //$this->log_write("Error: Error occurred while sending HELO command.");                return FALSE;            }        }        if (!$this->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) {            //$this->log_write("Error: Error occurred while sending MAIL FROM command.");            return FALSE;        }        if (!$this->smtp_putcmd("RCPT", "TO:<" . $to . ">")) {            //$this->log_write("Error: Error occurred while sending RCPT TO command.");            return FALSE;        }        if (!$this->smtp_putcmd("DATA")) {            //$this->log_write("Error: Error occurred while sending DATA command.");            return FALSE;        }        if (!$this->smtp_message($header, $body)) {            //$this->log_write("Error: Error occurred while sending message.");            return FALSE;        }        if (!$this->smtp_eom()) {            //$this->log_write("Error: Error occurred while sending <CR><LF>.<CR><LF> [EOM].");            return FALSE;        }        if (!$this->smtp_putcmd("QUIT")) {            //$this->log_write("Error: Error occurred while sending QUIT command.");            return FALSE;        }        return TRUE;    }    private function smtp_sockopen($address) {        if ($this->smtp_host == "") {            return $this->smtp_sockopen_mx($address);        } else {            return $this->smtp_sockopen_relay();        }    }    private function smtp_sockopen_relay() {        $this->log_write("Trying to Connect " . $this->smtp_host . ":" . $this->smtp_port . "...");        $this->sock = @fsockopen($this->smtp_host, $this->smtp_port, $errno, $errstr, $this->time_out);        if (!($this->sock && $this->smtp_ok())) {            $this->log_write("Error: connenct error" . $errstr . " (" . $errno . ")");            return FALSE;        }        $this->log_write("Connected Ok");        return TRUE;    }    private function smtp_sockopen_mx($address) {        $domain = preg_replace("/^.+@([^@]+)$/", "\1", $address);        if (!@getmxrr($domain, $MXHOSTS)) {            $this->log_write("Error: Cannot resolve MX \"" . $domain . "\"");            return FALSE;        }        foreach ($MXHOSTS as $host) {            $this->log_write("Trying to " . $host . ":" . $this->smtp_port);            $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);            if (!($this->sock && $this->smtp_ok())) {                $this->log_write("Connect Error ," . $errstr . " (" . $errno . ")");                continue;            }            $this->log_write("Connected to mx host " . $host);            return TRUE;        }        $this->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ")");        return FALSE;    }    private function smtp_message($header, $body) {        fputs($this->sock, $header . "\r\n" . $body);        return TRUE;    }    private function smtp_eom() {        fputs($this->sock, "\r\n.\r\n");        return $this->smtp_ok();    }    private function smtp_ok() {        $response = str_replace("\r\n", "", fgets($this->sock, 512));        if (!preg_match("/^[23]/", $response)) {            fputs($this->sock, "QUIT\r\n");            fgets($this->sock, 512);            $this->log_write("Error: Remote host returned \"" . $response . "\"");            return FALSE;        }        return TRUE;    }    private function smtp_putcmd($cmd, $arg = "") {        if ($arg != "") $cmd = ($cmd == "") ? $arg : ($cmd . " " . $arg);        fputs($this->sock, $cmd . "\r\n");        return $this->smtp_ok();    }    private function strip_line_breaks($address) {        $address = preg_replace("/([\t\r\n])+/", "", $address);        $address = preg_replace("/^.*<(.+)>.*$/", "", $address);        return $address;    }    public function log_write($message) {        $message = date("M d H:i:s ") . get_current_user() . "[" . getmypid() . "]: " . $message;        file_put_contents(dirname(__FILE__) . '/mail.log', $message . PHP_EOL, FILE_APPEND | LOCK_EX);    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 前编头发长了怎么办怎么梳理 九个月宝宝头发稀少不长怎么办 前牙吃饭咬合很深吃饭就痛怎么办 吃了甜的冷的就牙疼怎么办 吃热的凉的甜的牙疼怎么办 头发太细了想让头发变粗点怎么办 我的头发又少又很油该怎么办 头发油掉发头顶头发稀疏怎么办 我的头发天生就少又细怎么办 头发越来越少怎么办 用什么好呢 头发油掉头发怎么办吃什么药好 生完孩子三个月掉头发很厉害怎么办 电夹板夹头发现在掉头发怎么办 刚剪完的头发前面短后面长怎么办 头发太多太厚怎么办_百度经验 米诺地尔搽剂喷在头皮上痛怎么办 米诺地尔擦了头皮痒怎么办 头发又细又少一天不洗就油怎么办 头又尖头发又细又少不知怎么办 蘑菇头发型留长尴尬期怎么办 月经期间洗了下头量很少了怎么办 宝宝喝了有沐浴露的洗澡水怎么办 4个月宝宝头发长的慢怎么办 宝宝不小心吃了自己拉的屎怎么办 手机不小心弄成耳机模式怎么办 苹果手机不小心按了丢失模式怎么办 苹果手机不小心调成耳机模式怎么办 不小心把图书馆的书弄坏了怎么办 不小心把图书馆书拿出来了怎么办 八个月宝宝吃母乳缺铁怎么办 大头笔写的字褪色了怎么办 小画板用记号笔画了擦不下来怎么办 新换的大灯和原大灯有色差怎么办? 微信信息写好没有发送两字怎么办 3d模型导进去 材质丢失怎么办 3d模型导入材质没了怎么办 淘宝上的电视尺寸与实际不符怎么办 医师面试题号忘了写怎么办 淘宝买东西东西被别人拿走了怎么办 9个月宝宝上肢支撑不好怎么办 宝宝快十一个月了留口水怎么办