• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        用PHP發送有附件的電子郵件

        用PHP發送有附件的電子郵件

        更新時間:2019-06-21 文章作者:未知 信息來源:網絡 閱讀次數:

        我經常聽到這樣一個問題:"我有一個從網站發來的合同。我如何給通過表單發送的電子郵件增加一個附件呢?"

        首先我要說的是要做到這個沒有什么簡單的辦法。你要很好的理解PHP或其它的服務器端的腳本語言。當然你還要一個真正支持PHP的網站的賬號。如果滿足了這個前提,在你讀完了本章后就可以用PHP發送帶附件的電子郵件了。

        1. 附件是如何工作的

        如果你曾經在PHP的手冊中搜索過"附件"函數,那么結果可能是什么都沒有(至少在我寫本文的時間還沒有)。后來你就要花很多時間來了解這方面的知識。

        你也許會想當你給某個人發送一封帶附件的電子郵件時,附件是和郵件一起放到收件人的信箱里的(比如,如果你給他/她發了一個PNG的圖片文件,他/她的信箱里會包含一個txt文件(電子郵件)和一個.png文件(附件))。但這不是它的工作原理。當你加入一個附件時,你的郵件程序把附件轉換成純文本文件,并在你寫的內容(實際的電子郵件)后面插入這個文本塊。這個,當你把所有的東西發出來后,收件人的信箱里只有一個純文本文件--一個同時包含附件和實際電子郵件內容的文件。

        下面是一個帶附件(一個HTML文件)電子郵件的例子。我已經標注了其中重要的幾行:

        Return-Path: <someone@example.com>
        Date: Mon, 22 May 2000 19:17:29 +0000
        From: Someone <someone@example.com>
        To: Person <person@eksempel.dk>
        Message-id: <83729KI93LI9214@example.com>
        Content-type: multipart/mixed; boundary="396d983d6b89a"
        Subject: Here's the subject

        --396d983d6b89a
        Content-type: text/plain; charset=iso-8859-1
        Content-transfer-encoding: 8bit

        This is the body of the email.

        --396d983d6b89a
        Content-type: text/html; name=attachment.html
        Content-disposition: inline; filename=attachment.html
        Content-transfer-encoding: 8bit

        <html>
        <head>
        <title>The attachment</title>
        </head>
        <body>
        <h2>This is the attached HTML file</h2>
        </body>
        </html>

        --396d983d6b89a--



        前面的7行是郵件的頭,其中值得注意的是Content-type頭部分。這個頭告訴郵件程序電子郵件是由一個以上的部分組成的。不含附件的郵件只有一個部分:消息本身。帶附件的電子通常至少由兩部分組成:消息和附件。這樣,帶兩個附件的郵件由三部分組成:消息,第一個附件和第二個附件。

        帶附件的電子郵件的不同部分之間用分界線來分隔。分界線在Content-type頭中定義。郵件的每個新部分以兩個連字號(--)和分界線開始。最后一個分界線后也有兩個連字號,表示這個郵件中沒有其它的部分了。

        在每個分界線后有一些行,用來告訴郵件程序這個部分的內容的類型。比如,看看上面例子中第一個分界線后面的兩行--以Content-type: text/plain開頭的行。這些行說明后面的部分是ISO-8859-1字符集的純文本。跟在第二個分界線后的行告訴郵件程序現在的部分是一個HTML文件,它的名字是"attachment.html"。

        Content-disposition這持告訴郵件程序如果可能就以內嵌的方式顯示附件。現在新的郵件程序會在消息后顯示HTML的內容。如果Content-disposition被設為attachment,那么郵件程序就不會顯示HTML文件的內容,而是顯示一個連接到文件的圖標(或其它的類似的東西)。收件人要看附件的內容,必須點擊這個圖標。一般情況下,如果附件是一些文本(包含HTML),Content-disposition會被設為inline,這是因為現在大部分郵件程序能夠不借助其它瀏覽器而直接顯示附件(文本)的內容。如果附件不是文本(比如圖片或其它類似的內容),Content-disposition就設為attachment。

        2. 用PHP生成帶附件的電子郵件

        這里一個例子,告訴你如果把一個定義好的HTML文件加為郵件的附件:

        <?php
        # 我們首先寫實際的消息內容
        $emailBody =  "This is text that goes into the body of the email.";

        # 然后我們要作為附件的HTML文件
        $attachment =  "<html>
        <head>
        <title>The attached file</title>
        </head>
        <body>
        <h2>This is the attached HTML file</h2>
        </body>
        </html>";

        # 建立在郵件中分隔不同部分的分界線。
        # 基本上,分界線可以是任意的字符串。
        # 但是重要的一點是確定一個寫郵件的人
        # 這會隨意寫出的字符串,所以我們用
        # uniqid函數來產生一個隨機的字符串。
        $boundary = uniqid( "");

        # 現在我們要建立郵件頭。不要忘了插入
        # Content-type頭來說明這個郵件包含一個或更多的附件。
        $headers =  "From: someone@example.com
        Content-type: multipart/mixed; boundary=\"$boundary\"";

        # 好,現在我們已經有了郵件的所有內容。
        # 下一件事是修改郵件的主體。
        $emailBody =  "--$boundary
        Content-type: text/plain; charset=iso-8859-1
        Content-transfer-encoding: 8bit

        $emailBody

        --$boundary
        Content-type: text/html; name=attachment.html
        Content-disposition: inline; filename=attachment.html
        Content-transfer-encoding: 8bit

        $attachment

        --$boundary--";

        # 現在可以把郵件發出去了
        mail( "person@eksempel.dk",  "The subject", $emailBody, $headers);
        ?>



        3. 把用戶上傳的文件作為附件

        你也許會覺得上面的例子難以理解,但下面...。在下面的例子中事情更難了,因為我們要用一個表單讓用戶上傳他們的文件,并把這個文件作為我們要發的郵件的附件。麻煩的是我們不能預先知道文件的MIME類型。在前面的例子中,我們已經知道該它是一個HTML文件,所以給這個附件設置Content-type頭是很簡單的。在下面的例子中,MIME類型可能是任意的,因為用戶可能會上傳一個HTML文件,一個PNG文件,一個vCard文件,或者其它的東西。讓我們來看看例子:

        <?php
        # 現在我們來生成表單。在產生可以上傳文件的表單時,
        # 不要忘了把<form>標簽的"enctype"屬性設為"multipart/form-data".
        echo  "<form action='$PHP_SELF' enctype='multipart/form-data' method='post'>\n";
        echo  "<input type='text' name='from'><br>\n";
        echo  "<input type='text' name='to'><br>\n";
        echo  "<input type='text' name='subject'><br>\n";
        echo  "<input type='file' name='attachment'><br>\n";
        echo  "<textarea name='body'></textarea><br>\n";
        echo  "<input type='submit' name='send' value='Send'>\n";
        echo  "</form>\n";

        # 如果用戶已經按了"Send"按鈕"
        if ($send) {
             # 定義分界線
            $boundary = uniqid( "");

             # 生成郵件頭
            $headers =  "From: $from
        Content-type: multipart/mixed; boundary=\"$boundary\"";

             # 確定上傳文件的MIME類型
            if ($attachment_type) $mimeType = $attachment_type;
             # 如果瀏覽器沒有指定文件的MIME類型,
        # 我們可以把它設為"application/unknown".
            else $mimeType =  "application/unknown";

             # 確定文件的名字
            $fileName = $attachment_name;

             # 打開文件
            $fp = fopen($attachment,  "r");
             # 把整個文件讀入一個變量
            $read = fread($fp, filesize($attachment));

             # 好,現在變量$read中保存的是包含整個文件內容的文本塊。
        # 現在我們要把這個文本塊轉換成郵件程序可以讀懂的格式
        #  我們用base64方法把它編碼
            $read = base64_encode($read);

             # 現在我們有一個用base64方法編碼的長字符串。
        # 下一件事是要把這個長字符串切成由每行76個字符組成的小塊
            $read = chunk_split($read);

             # 現在我們可以建立郵件的主體
            $body =  "--$boundary
        Content-type: text/plain; charset=iso-8859-1
        Content-transfer-encoding: 8bit

        $body

        --$boundary
        Content-type: $mimeType; name=$fileName
        Content-disposition: attachment; filename=$fileName
        Content-transfer-encoding: base64

        $read

        --$boundary--";

             # 發送郵件
            mail($to, $subject, $body, $headers);
        }
        ?>


        這就是全部內容。如果你不能很好地理解上面的例子,我的建議是給你自己發送幾個帶附件的郵件,然后仔細研究郵件的源代碼。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 久久国产精品成人免费| 亚洲中文字幕无码中文| 免费毛片在线播放| 亚洲三级在线免费观看| 999在线视频精品免费播放观看| 亚洲精品无码久久久久久久 | 乱淫片免费影院观看| 国产成人高清精品免费鸭子 | 日韩在线一区二区三区免费视频| 成人伊人亚洲人综合网站222| 日亚毛片免费乱码不卡一区| 亚洲一级片内射网站在线观看| 亚洲乱码一区av春药高潮| 97视频免费在线| 亚洲丰满熟女一区二区哦| 国产免费变态视频网址网站| 亚洲AV无码一区二区乱子伦 | 无码一区二区三区免费视频| 亚洲欧洲无码AV不卡在线| 国产无遮挡吃胸膜奶免费看视频 | 亚洲日本在线电影| 国产成人精品免费直播| 国产免费AV片在线观看播放| 亚洲电影免费在线观看| 免费做爰猛烈吃奶摸视频在线观看 | 黄色网页免费观看| 亚洲香蕉成人AV网站在线观看| 成全高清在线观看免费| 亚洲人成在久久综合网站| 国产成人免费手机在线观看视频| 久久免费观看视频| 亚洲人成网国产最新在线| ww在线观视频免费观看| 国产成人亚洲精品蜜芽影院| 亚洲国产精品久久久天堂| 欧美在线看片A免费观看| 一个人看的免费视频www在线高清动漫| 亚洲第一视频网站| 免费又黄又爽又猛的毛片| 久久久久久成人毛片免费看| 女bbbbxxxx另类亚洲|