当前位置:Linux教程 - Php - 又一个发送mime邮件的类

又一个发送mime邮件的类

又一个发送mime邮件的类
2004-02-26 13


<?php

    
// 存成 "mime_mail.inc" 檔案

    
class mime_mail {

        var
$parts;
        var
$to;
        var
$from;
        var
$headers;
        var
$subject;
        var
$body;


        
/*
         *     void mime_mail()
         *     類別建構者
         */

        
function mime_mail() {
            
$this->parts = array();
            
$this->to = "";
            
$this->from = "";
            
$this->subject = "";
            
$this->body = "";
            
$this->headers = "";
        }


        
/*
         *     void add_attachment(string message,
         *                         [string name],
         *                         [string ctype])
         *     將附加物(附檔)加入郵件物件
         */

        
function add_attachment($message, $name = "",
                    
$ctype = "application/octet-stream") {
            
$this->parts[] = array( "ctype" => $ctype,
                            
"message" => $message,
                        
"encode" => $encode,
                        
"name" => $name);
        }


        
/*
         *     void build_message(array part)
         *     建立 multipart 郵件的訊息部份
         */

        
function build_message($part) {
            
$message = $part["message"];
            
$message = chunk_split(base64_encode($message));
            
$encoding = "base64";
            return
"Content-Type: " . $part["ctype"] .
                (
$part["name"] ? "; name="".$part["name"].""" : "") .
                
"nContent-Transfer-Encoding: $encodingnn$messagen";
        }


        
/*
         *     void build_multipart()
         *     建立一封 multipart 郵件
         */

        
function build_multipart() {
            
$boundary = "b" . md5(uniqid(time()));
            
$multipart = "Content-Type: multipart/mixed; " .
                     
"boundary = $boundarynn" .
                     
"This is a MIME encoded message.nn--$boundary";

            for (
$i = sizeof($this->parts) - 1; $i >= 0; $i--) {
                
$multipart .= "n" . $this->build_message($this->parts[$i]) . "--$boundary";
            }

            return
$multipart . "--n";
        }


        
/*
         *     string get_mail()
         *     傳回已組合完成的郵件
         */

        
function get_mail($complete = true) {
            
$mime = "";
            if (!empty(
$this->from))
                
$mime .= "From: " . $this->from . "n";
            if (!empty(
$this->headers))
                
$mime .= $this->headers . "n";

            if (
$complete) {
                if (!empty(
$this->to))
                    
$mime .= "To: $this->ton";
                if (!empty(
$this->subject))
                    
$mime .= "Subject: $this->subjectn";
            }

            if (!empty(
$this->body))
                
$this->add_attachment($this->body, "", "text/plain");

            
$mime .= "MIME-Version: 1.0n" . $this->build_multipart();

            return
$mime;
        }


        
/*
         *     void send()
         *     寄出這封信(最後一個被呼叫的函式)
         */

        
function send() {
            
$mime = $this->get_mail(false);
            
mail($this->to, $this->subject, "", $mime);
        }

    }  
// 類別結束

?>

<?php

/*
    include "mime_mail.inc";

    $filename     = "testfile.jpg";
    $content_type = "image/jpeg";

    # 讀取磁碟裡的 JPEG 圖形
    $fd = fopen($filename, "r");
    $data = fread($fd, filesize($filename));
    fclose($fd);
  
    # 建立物件實體
    $mail = new mime_mail;

    # 設定所有項目
    $mail->from    = "your@address.com";
    $mail->to      = "recipient@remote.net";
    $mail->subject = "歡迎!";
    $mail->body    = "這是真正的電子郵件訊息,
                      當然....你可以寫成一行以上。";
    # 加上附檔
    $mail->add_attachment($data, $filename, $content_type);

    # 送出電子郵件
    $mail->send();
*/
?>

<HTML>
<BODY>
<?
    
// by Hsu
    
if (!preg_match("!^(http://)?" . getenv("SERVER_NAME") . "!", getenv("HTTP_REFERER")) ││
        
!preg_match("/^.+@.+..+/", $myemail)) {

        echo
"<FORM ACTION="$PHP_SELF" METHOD="post">n";
        echo
"Your E-Mail addr: <INPUT TYPE="text" NAME="myemail" SIZE="30">n";
        echo
"<INPUT TYPE="submit" VALUE="寄件測試(含附件)">n";
        echo
"</FORM>n";

    } else {

        include
"mime_mail.inc";

        
$filename     = "php_logo.gif";
        
$content_type = "image/gif";

        
# 讀取磁碟裡的 JPEG 圖形
        
$fd = fopen($filename, "r");
        
$data = fread($fd, filesize($filename));
        
fclose($fd);

        
# 建立物件實體
        
$mail = new mime_mail;

        
# 設定所有項目
        
$mail->from    = $myemail;
        
$mail->to    = $myemail;
        
$mail->subject    = "歡迎!";
        
$mail->body    = "這是真正的電子郵件訊息,n" .
                  
"當然....你可以寫成一行以上。";
        
# 加上附檔
        
$mail->add_attachment($data, $filename, $content_type);

        
# 送出電子郵件
        
$mail->send();
        echo
"郵件已送出,請檢查您的信箱。";
    }
?>
</BODY>
</HTML>